原理
master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
slave将master的binary log events拷贝到它的中继日志(relay log);
slave重做中继日志中的事件,将改变反映它自己的数据。
环境
版本 8.0.21
主库: 10.11.12.121
从库: 10.11.12.122
通用配置
/etc/my.cnf
1 | [mysqld] |
主库
新增配置/etc/my.cnf.d/rep-master.conf
1 | [mysqld] |
创建同步用户
1 | CREATE USER 'rep'@'%' IDENTIFIED BY '123456'; |
重启服务
1 | sudo service mysqld restart |
检查
1 | mysql -uroot -proot |
从库1
新增配置/etc/my.cnf.d/rep-slave.conf
1 | [mysqld] |
配置主库
1 | change master to master_host='10.11.12.121',master_port=3306,master_user='rep',master_password='123456',master_log_file='master-bin.000006',master_log_pos=156,get_master_public_key=1; |
备注:
master_host
对应主服务器的IP地址。master_port
对应主服务器的端口。master_log_file
对应show master status显示的File列:master-bin.000006master_log_pos
对应show master status显示的Position列:156
启动同步
1 | 启动slave数据同步 |
查看slave信息
1 | show slave status\G; |
常见错误
Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.
设置master的时候加参数get_master_public_key=1
Slave failed to initialize relay log info structure from the repository
从库进行了多次配置,应该先停止,重置复制状态
1 |
|
Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’
master_log_file
、master_log_pos
与主库不一致,重新检查主库的show master status
输出。
其他
查看新安装默认密码
1 | sudo grep 'temporary password' /var/log/mysqld.log |
后续问题
- 主从切换
- 数据一致性检查
- 扩容从库