MySQL主从复制是一种数据复制技术,用于实现数据的高可用性和负载均衡。其工作流程原理如下:
创建并启动 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
的值。
创建并启动 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
。
处理异常情况,如网络中断、主服务器宕机等,需要根据具体情况进行相应的处理。