135机器 | 136机器 |
server-id=1 log-bin=mysql-bin log-slave-updates slave-skip-errors=all sync_binlog=1 auto_increment_increment=1 auto_increment_offset=1 | server-id=2 log-bin=mysql-bin log-slave-updates slave-skip-errors=all sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1 |
4. 配置项说明
配置项 | 配置项说明 |
server-id | 不能相同!唯一标识号,值位于1~2^32-1之间 |
user | 这个可以不指定,则使用mysqld_safe指定的用户,或者mysqld_safe默认的用户mysql |
log-bin | 启用二进制日志文件 |
log-slave-updates | 配置从库上的更新操作是否写二进制文件,需要和log-bin一起使用 |
slave-skip-errors | 值为all表示让从库跳过所有错误(但不能跳过所有DDL所引起的主从错误),也可以只跳过指定的错误,如:--slave-skip-errors=1062,1053;也可以配置只跳过DDL错误,如:--slave-skip-errors=ddl_exist_errors,这等同于: --slave-skip-errors=1007,1008,1050,1051,1054,1060,1061,1068,1094,1146 |
sync_binlog | 值为1表示主机每次提交事务的时候把二进制日志的内容同步到磁盘上 |
auto_increment_increment auto_increment_offset | 和auto_increment_offset一起用于主主同步,用来错开自增,防止键值冲突,所以auto_increment_increment和auto_increment_offset两者,至少要有一项值不同。 |
上述配置会导致同步所有的数据库,借助下列配置项也可以选择性的同步或不同步:
配置项 | 配置项说明 |
binlog-do-db=test1 binlog-do-db=test2 | 表示只同步数据库test1和test2,如果还想同步test3,只需要新增一行:binlog-do-db=test3即可 |
binlog-ignore-db=db1 binlog-ignore-db=db2 | 表示不同步数据库db1和db2,如果还有db3不想同步,新增一行:binlog-ignore-db=db3即可 |
5. 设置同步关系()
前提:需要和主从一样,先导出一方的数据库,在另一方的数据库运行,才能执行同步
注意:一个库应该是空的,File和Position用那个非空数据库的即可
分别重启MySQL,进入MySQL Cli,执行命令“show master status\G”,记住“File”和“Position”的值,如:
mysql> show master status\G *************************** 1. row *************************** File: mysql-bin.000004 Position: 682 Binlog_Do_DB: test Binlog_Ignore_DB: mysql Executed_Gtid_Set: 1 row in set (0.00 sec) |
设置同步关系(两个主都需要设置):
stop slave; change master to master_host='192.168.165.136',master_user='replication',master_password='1234',master_log_file='mysql-bin.000004',master_log_pos=682; |
如果不先执行“stop slave;”,则可能遇到如下错误:
ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first. |
这里,peer、user和password三者的取值为“创建同步用户”时指定的值。设置示例:
stop slave;
change master to master_host='192.168.165.135',master_user='replication',master_password='1234',master_log_file='mysql-bin.000004',master_log_pos=682; |
由于前面一步调用“stop slave;”,停止了复制。在完成后,需再启动复制:
start slave; |
注意:为了能让从服务器登录mysql,要关闭centos的防火墙
[root@dbServer ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@dbServer ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
6. 验证
执行命令“show slave status\G”查看复制状态,如果出现“Slave_IO_Running: Yes”和“Slave_SQL_Running: Yes”,则表示状态正常。
进一步,可以分别创建一个表,如:create table test1 (a int)和create table test2 (b int)。再分别使用show tables查看是否同步过去。