一、主从配置工作原理
MySQL主从复制是一种数据复制技术,用于实现数据的高可用性和负载均衡。其工作流程原理如下:
-
主服务器操作:
- 所有更新操作(如
INSERT
、UPDATE
、DELETE
等)都会被记录到二进制日志(Binary Log)中。 - 开启
binlog dump
线程,负责读取二进制日志中的事件,并发送给从服务器。
- 所有更新操作(如
-
从服务器操作:
- 通过
I/O
线程读取主服务器上的二进制日志,并将其写入到从服务器的中继日志(Relay Log)中。 SQL
线程实时监控中继日志的内容是否有更新,一旦有更新,SQL线程会解析中继日志中的SQL语句,并在从服务器上执行这些语句,从而实现数据的同步。
- 通过
-
复制过程的监控和维护:
- 使用
SHOW SLAVE STATUS
命令查看从服务器的状态,确保复制过程正常运行。 - 特别关注
Slave_IO_Running
和Slave_SQL_Running
两个字段的值,它们应该都为Yes
,表示复制进程正在正常运行。
- 使用
二、Docker 部署 MySQL 主从配置步骤
1. 准备主服务器
-
创建并启动 MySQL 主服务器容器:
docker run -d \ -p 3306:3306 \ -v /path/to/mysql/master/conf:/etc/mysql/conf.d \ -v /path/to/mysql/master/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=yourpassword \ --name mysql-master \ mysql:8.0
-
创建 MySQL 主服务器配置文件:
[mysqld] server-id=1 log-bin=mysql-bin binlog_format=ROW
-
重启 MySQL 容器:
docker restart mysql-master
-
登录 MySQL 主服务器并创建 slave 用户:
CREATE USER 'slave'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; FLUSH PRIVILEGES;
-
查询 master 状态:
SHOW MASTER STATUS;
记下
File
和Position
的值。
2. 准备从服务器
-
创建并启动 MySQL 从服务器容器:
docker run -d \ -p 3307:3306 \ -v /path/to/mysql/slave/conf:/etc/mysql/conf.d \ -v /path/to/mysql/slave/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=yourpassword \ --name mysql-slave \ mysql:8.0
-
创建 MySQL 从服务器配置文件:
[mysqld] server-id=2 relay-log=mysql-relay read_only=1 log_bin=mysql-bin binlog_format=ROW log_slave_updates=1
-
重启 MySQL 容器:
docker restart mysql-slave
-
在从机上配置主从关系:
CHANGE MASTER TO MASTER_HOST='master_ip_address', MASTER_USER='slave', MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_LOG_FILE='recorded_file_name', MASTER_LOG_POS=recorded_position; START SLAVE;
三、验证主从配置
- 在主服务器上执行写操作,然后在从服务器上检查是否成功复制。
四、故障排查
-
查看从服务器状态:
SHOW SLAVE STATUS\G
确保
Slave_IO_Running
和Slave_SQL_Running
都为Yes
。 -
处理异常情况,如网络中断、主服务器宕机等,需要根据具体情况进行相应的处理。
五、优化建议
- 优化大事务,将大事务拆分为多个小事务,以减少对主从复制的影响。
- 提升网络性能,优化主从服务器之间的网络连接,减少网络延迟。
- 提升从节点性能,升级从节点的硬件配置,优化数据库参数设置,以提升其处理能力。
- 使用多线程复制,在MySQL 5.7及以上版本中,可以使用多线程复制来加速从节点的数据应用速度。