一、主数据库配置
1.开启GTID模式
修改配置文件,一般位于/ect/my.cnf
1 | [mysqld] |
2.创建专用账号
请务必修改脚本中用户名master
和密码Asdf1234@
为自己的,避免造成安全隐患。
1 | create user 'master'@'%' identified by 'Asdf1234@'; |
3.重启mysql
二、从数据库配置
1.开启GTID模式
修改配置文件,一般位于/ect/my.cnf
1 | [mysqld] |
2.重启mysql
3.配置主从同步
开启主从同步之前,请务必保证从库内容与主库一致,避免后续可能造成错误
1 | CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_PORT=3306, MASTER_USER='master', MASTER_PASSWORD='Asdf1234@',master_auto_position = 1; |
4.查看状态
1 | show slave status; |
5.开启只读模式
一般从库最好开启只读模式,避免误操作从库与主库发生冲突,导致主从无法正常同步
请注意只读权限对超管账号无效
- 开启
set global read_only=1;
- 查看
show global variables like "%read_only%";
三、测试
若主库已有数据,建立主从关系后从库不会同步旧数据,请手动将旧数据迁移至从库
此时在主库中执行建库建表插入数据等操作,从库将会实时同步。
四、F&Q
1.配置主从失败
请确保master启动了binlog,在mysql8中默认启动,若之前关闭过,可在配置文件中开启log-bin=mysql-bin
。
2.开启从失败
当建立主从关系后,请勿直接操作从库,避免造成错误,例如在主键唯一的表中,手动在从库添加了一条数据,这时主库中也添加了相同主键的数据,同步时将产生错误,并且会导致后续主库中有操作,从库不再同步。
若出现此情况,可通过重置日志。
1 | stop slave; |
重新开启
1 | CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_PORT=3306, MASTER_USER='master', MASTER_PASSWORD='Asdf1234@',master_auto_position = 1; |
3.无法主从同步
通过show slave status;
查看状态,可在Last_Error发现错误信息例如
1 | Coordinator stopped because there were error(s) in the worker(s). |
根据提示查看错误日志
1 | select * from performance_schema.replication_applier_status_by_worker |
1 | Worker 1 failed executing transaction 'dbb607d1-b56e-11ec-852f-02420a000094:3' at master log binlog.000005, end_log_pos 842; |
可发现在同步CREATE DATABASE test
语句时发生错误,原因因为重新开启主从之前,test
表已存在,因此手动删除再开启即可。理论上主从的错误都可通过此方式排查解决。