mysql gtid模式 主从同步

gtid模式比传统的binlog file + pos 的方式,能避免在同步配置时期漏掉sql的问题,并且能简化配置,不用手动定义file和pos了。

先在主库开启binlog和gtid, 新建配置 /etc/mysql/mysql.conf.d/binlog.cnf

1
2
3
4
5
6
7
8
9
[mysqld]
server-id=1
binlog-format=mixed
log-bin=mysql-bin
log-bin-index=mysql-bin.index

gtid-mode=on
log-slave-updates=true
enforce-gtid-consistency=true

然后重启主库使其生效

然后添加从库用来同步的账号 并授权

1
2
3
CREATE USER 'slave'@'&' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;

到此主库配置完毕

在从库开启gtid,新建配置 /etc/mysql/mysql.conf.d/slave.cnf

1
2
3
4
5
6
7
8
9
[mysqld]
server-id=2
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%

gtid-mode=on
log-slave-updates=true
enforce-gtid-consistency=true
log-bin=mysql-bin

重启从库使其生效

然后将主库数据导出一份到从库,注意跳过mysql数据库,因为mysql数据库里面记录了主库的账号,binlog信息之类的,当然,如果你需要同步mysql库也可以

在从库机器上执行一下命令来导入

1
mysqldump -h 主库host -p 3306 -u slave -p 'password' -A > mysql

配置从库账号连接信息并开启同步

1
2
3
4
5
6
7
8
CHANGE MASTER TO
MASTER_HOST = '主库host',
MASTER_PORT = 3306,
MASTER_USER = 'slave',
MASTER_PASSWORD = 'password',
MASTER_AUTO_POSITION=1;

START SLAVE;

然后用 SHOW SLAVE STATUS\G; 命令查看是否正常即可,主要关注下面两个参数:

1
2
 Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果都是yes,那么就行了,否则请查看 Last_IO_ErrorLast_SQL_Error 来定位和修复遇到的问题。