mysql主从复制
ip | 角色 | 环境 |
---|---|---|
192.168.242.41 | master | mysql8.0.16 |
192.168.242.42 | slave | mysql8.0.16 |
master配置
master配置文件
记得重启:systemctl restart mysqld
创建复制帐号
# 登录mysql # 创建账户 create user 'copy'@'%' identified with mysql_native_password by'123'; # 赋予权限使其可以从主服务器copy二进制日志 GRANT REPLICATION SLAVE ON *.* TO 'copy'@'%'; # 刷新权限 flush privileges; # 查看主服务器状态 show master status\G;
配置slave从服务器
slave配置文件
vi /etc/my.cnf # 配置唯一server id server-id=42 # 打开日志,格式为二进制 relay_log=mysql-relay # 设置只读权限 read_only=1 # 打开二进制日志 log-bin=mysql-bin # 使得更新的数据写入二进制日志中 log_slave_updates=1
记得重启mysql
启动从服务器复制线程
# 登录mysql CHANGE MASTER TO master_host='192.168.242.41', master_user='copy', master_password='123', master_log_file='mysql-bin.000002', master_log_pos=155; 第五六行数据从master中show master status\G;获取 # 启动slave(在数据库控制台输入) start slave # 查看slave状态 show slave status\G;
互为主从
①配置方面两台都相同
vi /etc/my.cnf
# 配置唯一server id
server-id=41 # 要保证每台不一样
# 打开二进制日志
log-bin=mysql-bin
# 关闭名称解释
skip-name-resolve=on
# 使得更新的数据写入二进制日志中
log_slave_updates=1
auto_increment_increment=2
auto_increment_offset=1 # (这里每台递增)
②两台都设置一个复制账号(例如copy)
# 登录mysql
# 创建账户
create user 'copy'@'%' identified with mysql_native_password by'123';
# 赋予权限使其可以从主服务器copy二进制日志
GRANT REPLICATION SLAVE ON *.* TO 'copy'@'%';
# 刷新权限
flush privileges;
# 查看主服务器状态
show master status\G;
③两台主机都当作slave连接另一台
# 登录mysql
CHANGE MASTER TO
master_host='192.168.242.41',
master_user='copy',
master_password='123',
master_log_file='mysql-bin.000002',
master_log_pos=155;
# 第三行填写对方ip第六七行数据从master中show master status\G;获取
# 启动slave(在数据库控制台输入)
start slave
# 查看slave状态
show slave status\G;
如何安全关机(重要!!!)
主从复制的关机顺序确实很重要。如果关机顺序不当,可能导致数据丢失、复制中断或类似问题(如重复执行事务)。合理的关机顺序可以确保主从复制状态的完整性和一致性。
推荐的关机顺序
- 优先关闭从服务器 在关闭主服务器之前,先停止从服务器上的复制线程。这可以避免从服务器在主服务器关闭后尝试从主服务器拉取日志而发生错误。
- 然后关闭主服务器 关闭主服务器时,确保事务已提交并记录到二进制日志中。
详细步骤
关闭从服务器
- 停止复制线程 在从服务器上运行以下命令:
- 检查复制状态 确认复制线程已停止:
确保 Slave_IO_Running
和 Slave_SQL_Running
均为 No
。
- 关闭从服务器 安全地关闭 MySQL 服务:
关闭主服务器
- 检查活动事务 确保没有未完成的事务,尤其是对于需要同步到从服务器的事务。可以使用以下命令检查:
- 刷新并同步日志 在关闭主服务器之前,刷新二进制日志,确保所有事务写入日志文件:
- 关闭主服务器 使用以下命令安全地停止主服务器:
重新启动顺序
-
先启动主服务器 确保主服务器正常运行,监听指定端口,并可以接受从服务器的连接。
-
检查主服务器状态 使用以下命令检查主服务器的状态:
- 再启动从服务器 启动从服务器后,确认主从复制正常运行:
注意事项
- 避免从服务器独立运行 如果主服务器已关闭,而从服务器仍在尝试同步日志,可能导致复制错误或状态混乱。
- 事务一致性 在主服务器关闭前,确保所有事务已提交并同步到从服务器。
- 日志和位置 在每次重新配置主从复制或遇到问题时,确保主从日志位置正确匹配。
- 启用 GTID(可选) 使用 GTID 模式,可以进一步简化主从复制的管理,避免复杂的日志位置匹配问题。
总结
关机顺序的基本原则是:
- 从服务器先关,确保复制线程停止。
- 主服务器后关,确保日志完整写入。
启动时,顺序相反:先主后从。
正确的顺序和操作可以避免大多数主从复制问题,如事务丢失、日志不一致等。
启动问题
太久未启动应该初始化slave