[A 服务器配置参数说明 192.168.1.17] [mysqld] server_id = 1 #区分不同的mysql #basedir = /usr/local/mysql #port = 3306 #socket = /tmp/mysql.sock #datadir = /usr/local/mysql/data #pid_file = /usr/local/mysql/data/mysql.pid #log_error = /usr/local/mysql/data/mysql.er #log_bin=mysql_bin #记录binlog并存放在默认位置 mysql/data mysql8好像默认开启 #log_bin_index = /var/lib/mysql/mysql_bin.index #expire_logs_days = 7 #删除超出这个变量保留期之前的全部日志被删除 #binlog_format = ROW #(牵涉到数据量的问题 Statement,MiXED,以及ROW) 默认ROW #binlog_row_metadata=MINIMAL #(binlog_format=ROW情况下有效,减少日志量 FULL全量日志大) max_binlog_size = 512M #日志大小 sync_binlog = 1 #(commit时记录binlog日志,影响效率,但是为了保证主从一致性,需要开启 0:commit 先写缓存 1:立即写 N:操作N次写 ) #innodb_flush_log_at_trx_commit = 0 #(redo日志 0:commit不写 1:立即写 2:先写缓存 ) log_replica_updates=true #(原来的log_slave_updates,如果是3级以上或GTID主从 A_>B_>C 这个要打开,否则B复制A的数据无法同步到C,主要是否主从同步数据是否写入binlog) #binlog_do_db = dbmgame #需要同步的库(记录binlog) #binlog_do_db = dbmaccount binlog_ignore_db = mysql #忽略的库,操作不需要同步 binlog_ignore_db = percona #(percona-toolkit一致性检测产生的库) #replicate_do_db = dbmgame #需要复制的库(如果需要复制库,使用这个,binlog_do_db考虑效率尽量不适用) #replicate_do_db = dbmaccount replicate_ignore_db = mysql #忽略复制库 replicate_ignore_db = percona #开启GTID(不支持CREATE TABLE ... SELECT , MyISAM) gtid-mode=ON enforce_gtid_consistency=1 #不让违反GTID的操作执行,可取值为:off:允许所有操作 on:不允许有违反GTID的操作,且报错 master_info_repository=TABLE #(file和table,决定了slave记录master的状态,如果参数是file,就会创建master.info文件,如果参数值是table,就在mysql中创建slave_master_info的表) #relay_log_info_repository=TABLE #(类似master_info_repository,不过是记录relay日志) #sync_relay_log_info=1 sync_master_info=1 #(更新master_info_repository指定的文件和表,1个事件后记录) slave_parallel_workers=0 master_verify_checksum=on #master从binary log读取信息的时候会执行校验 slave_sql_verify_checksum=on #slave从relay log读取信息的时候会执行校验 #binlog_rows_query_log_events =1 # 在row模式下..开启该参数,将把sql语句打印到binlog日志里面.默认是0(off); auto_increment_offset = 1 auto_increment_increment = 2 #奇数ID,避免同时写数据库冲突 #master_host = 192.168.1.34 #主库ip #master_user = baksync #主库同步数据用的账号 #master_password = baksync #master_port = 3306 #master_connect_retry = 10 #重新连接主库间隔时间(秒) #master_auto_position=1 #GTID模式下有效,不需要指定binlog文件名和pos #执行命令:change master to master_host='192.168.1.34', master_user='baksync', master_password='baksync',master_connect_retry=10,master_auto_position=1; [B 服务器配置参数说明 192.168.1.34] [mysqld] server_id = 2 #区分不同的mysql #basedir = /usr/local/mysql #port = 3306 #socket = /tmp/mysql.sock #datadir = /usr/local/mysql/data #pid_file = /usr/local/mysql/data/mysql.pid #log_error = /usr/local/mysql/data/mysql.er #log_bin=mysql_bin #记录binlog并存放在默认位置 mysql/data mysql8好像默认开启 #log_bin_index = /var/lib/mysql/mysql_bin.index #expire_logs_days = 7 #删除超出这个变量保留期之前的全部日志被删除 #binlog_format = ROW #(牵涉到数据量的问题 Statement,MiXED,以及ROW) 默认ROW #binlog_row_metadata=MINIMAL #(binlog_format=ROW情况下有效,减少日志量 FULL全量日志大) max_binlog_size = 512M #日志大小 sync_binlog = 1 #(commit时记录binlog日志,影响效率,但是为了保证主从一致性,需要开启 0:commit 先写缓存 1:立即写 N:操作N次写 ) #innodb_flush_log_at_trx_commit = 0 #(redo日志 0:commit不写 1:立即写 2:先写缓存 ) log_replica_updates=true #(如果是3级以上或GTID主从 A_>B_>C 这个要打开,否则B复制A的数据无法同步到C) #binlog_do_db = dbmgame #需要同步的库(记录binlog) #binlog_do_db = dbmaccount binlog_ignore_db = mysql #忽略的库,操作不需要同步 binlog_ignore_db = percona #(percona-toolkit一致性检测产生的库) #replicate_do_db = dbmgame #需要复制的库(如果需要复制库,使用这个,binlog_do_db考虑效率尽量不适用) #replicate_do_db = dbmaccount replicate_ignore_db = mysql #忽略复制库 replicate_ignore_db = percona #开启GTID(不支持CREATE TABLE ... SELECT , MyISAM) gtid-mode=ON enforce_gtid_consistency=1 master_info_repository=TABLE #(file和table,决定了slave记录master的状态,如果参数是file,就会创建master.info文件,如果参数值是table,就在mysql中创建slave_master_info的表) #relay_log_info_repository=TABLE #(类似master_info_repository,不过是记录relay日志) #sync_relay_log_info=1 sync_master_info=1 #(更新master_info_repository指定的文件和表,1个事件后记录) slave_parallel_workers=0 master_verify_checksum=on #master从binary log读取信息的时候会执行校验 slave_sql_verify_checksum=on #slave从relay log读取信息的时候会执行校验 #binlog_rows_query_log_events =1 # 在row模式下..开启该参数,将把sql语句打印到binlog日志里面.默认是0(off); auto_increment_offset = 2 auto_increment_increment = 2 #偶数ID,避免同时写数据库冲突 #master_host = 192.168.1.17 #主库ip #master_user = baksync #主库同步数据用的账号 #master_password = baksync #master_port = 3306 #master_connect_retry = 10 #重新连接主库间隔时间(秒) #master_auto_position=1 #GTID模式下有效,不需要指定binlog文件名和pos #执行命令:change master to master_host='192.168.1.17', master_user='baksync', master_password='baksync',master_connect_retry=10,master_auto_position=1; ###########################################操作步骤############################################## 整个配置基于mysql8.0,测试可用,不需要改动,只需要修改ip即可,同时创建可用于相互连接的账号(baksync)既可 ###1:如果主从,只需要在B服务器执行: ###change master to master_host='192.168.1.17', master_user='baksync', master_password='baksync',master_connect_retry=10,master_auto_position=1; ###start slave; ###show slave status\G;#查看状态确保 Slave_IO_Running: Yes Slave_SQL_Running: Yes ###切换的时候服务器执行 reloadconfig,然后从服务器stop slave;就可以正常处理 ###2:如果双主, ###则 A 执行 change master to master_host='192.168.1.34', master_user='baksync', master_password='baksync',master_connect_retry=10,master_auto_position=1; ### B 执行 change master to master_host='192.168.1.17', master_user='baksync', master_password='baksync',master_connect_retry=10,master_auto_position=1; ###A/B 同时执行 start slave; show slave status\G; ###切换的时候服务器执行 reloadconfig,然后A/B stop slave;