目前后台数据库使用了一个实例做数据统计分析,随着数据井喷,单个实例无法做数据分析。故开始了读写分离。
1.主配置
[client] port = 3306 socket = /tmp/mysql-3306.sock # The MySQL server [mysqld] port = 3306 socket = /tmp/mysql-3306.sock basedir=/opt/mysql # 使用单独的数据盘 datadir=/data/mysql # 设置最大连接数,这个值等于连接到此数据库的tomcat实例的所有活跃线程数 max_connections=260 plugin-dir=/opt/mysql/lib/plugin pid-file=/data/mysql/mysql.pid skip-external-locking log-error=/opt/mysql/log/error.log # 使用独立表空间 alter table tbName engine=innodb;才可以将共享表空间转独立表空间 innodb_file_per_table=1 # 设置 innodb 的 数据目录,适用于 共享表空间 #innodb_data_home_dir=/data/mysql/innodb #设置innodb 强制恢复 6是只读模式,不支持update insert delete. 0是常规模式 #innodb_force_recovery=6 # MyISAM 主键缓存 key_buffer_size = 16M # 最大响应包体 max_allowed_packet = 5M # 最多缓存的表 table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M # 记录慢查询 #log_slow_queries=ON slow_query_log=ON slow_query_log_file=/var/log/mysql-3306-slow.log long_query_time=1 # mysql purge 命令可以清理二进制日志,详情请查阅 ? purge log-bin=mysql-bin binlog-ignore-db=mysql binlog-ignore-db=test # 此处不可以使用单行逗号分割,容易失去日志 binlog-do-db=globaldata binlog-do-db=metaapp binlog-do-db=statisticsdata # 设置 bin_log 过期自动清理的天数 expire_logs_days=3 # 日志格式,官方推荐mixed binlog_format=mixed # 唯一ID,不能与其他Mysql实例重复 server-id = 1 sync_binlog=1 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
2.检查bin-log日志记录
mysqlbinlog --start-datetime=‘2018-02-27 00:00:00‘ --stop-datetime=‘2018-02-28 23:01:01‘ -d statisticsdata /data/mysql/mysql-bin.000058
binlog-do-db 会影响到日志记录,这里用mysqlbinlog 检查日志是否拿到。
3.dump导出多个数据库并记录日志位置
mysqldump -B globaldata metaapp statisticsdata --master-data=1 --add-drop-database --flush-logs > three.sql
-B 多个数据库 --master-data=1 记录日志位置 --flush-logs 整个dump期间锁表,避免日志读取异常。
4.配置从服务器
[client] #password = your_password port = 3306 socket = /tmp/mysql-3306.sock # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket = /tmp/mysql-3306.sock basedir=/opt/mysql # 使用单独的数据盘 datadir=/data/mysql # 设置最大连接数,这个值等于 数据收集tomcat+数据分析+metaAppService的最大线程数 max_connections=260 plugin-dir=/opt/mysql/lib/plugin pid-file=/data/mysql/isRunning.pid skip-external-locking log-error=/data/mysql/log/error.log # 使用独立表空间 alter table tbName engine=innodb;才可以将共享表空间转独立表空间 innodb_file_per_table=1 # 设置 innodb 的 数据目录,适用于 共享表空间 #innodb_data_home_dir=/data/mysql/innodb #设置innodb 强制恢复 6是只读模式,不支持update insert delete. 0是常规模式 #innodb_force_recovery=6 # MyISAM 主键缓存 key_buffer_size = 16M # 最大响应包体 max_allowed_packet = 5M # 最多缓存的表 table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M #log_slow_queries=ON slow_query_log=ON slow_query_log_file=/data/mysql/log/mysql-3306-slow.log long_query_time=1 # 主从服务器都要避免使用这个属性 #skip-networking # Replication Master Server (default) # binary logging is required for replication # 暂时关闭 log-bin # mysql purge 命令可以清理二进制日志,详情请查阅 ? purge #log-bin=mysql-bin #binlog-ignore-db=mysql,information_schema,test #binlog-do-db=globaldata,metaapp,statisticsdata # 设置 bin_log 过期自动清理的天数 #expire_logs_days=3 # binary logging format - mixed recommended # 从服务器不需要配置 binlog_format ,会自动识别。 #binlog_format=mixed # required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id = 2 relay-log=slave-relay-bin [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
5.导入dump文件
dump文件已包含 位置点信息
mysql < three.sql
6.开启 slave
start slave;
7.查看slave状态
1. show proccesslist; -- 看 Time 2. show slave status; -- 看 Seconds_Behind_Master(比主服务延迟了多少秒)