MySQL主从复制是一种常见的数据库架构设计,它允许将一个MySQL数据库的更改同步到一个或多个从服务器(slave),以提供数据备份、读取负载均衡以及灾难恢复等功能。以下是在CentOS 7 64位的Docker环境中设置MySQL主从复制的基本步骤:
1、准备两个MySQL容器
在Docker中运行两个MySQL容器,一个作为主服务器(Master),另一个作为从服务器(Slave)。
# 启动Master容器
docker run --name mysql-master -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
# 启动Slave容器
docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
确保替换 password 为你所需的MySQL root用户密码。
2、配置Master服务器
进入Master容器并进行配置:
docker exec -it mysql-master bash
修改MySQL配置文件 my.cnf,允许网络连接和二进制日志记录:
[mysqld]
server-id = 1
log_bin = /var/lib/mysql/mysql-bin.log
bind-address = 0.0.0.0
重启MySQL服务使配置生效:
service mysql restart
创建用于复制的用户
3、在Master容器中创建一个用于复制的用户并授权:
mysql -uroot -ppassword
CREATE USER 'replicator'@'%' IDENTIFIED BY 'replicator_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
这里将用户名、密码和权限替换为实际的值。
4、获取Master服务器状态
在Master容器中获取当前的二进制日志文件名和位置:
SHOW MASTER STATUS;
记录下 File 和 Position 的值,后续在配置Slave服务器时会用到。
5、配置Slave服务器
进入Slave容器并进行配置:
docker exec -it mysql-slave bash
修改MySQL配置文件 my.cnf,配置服务器ID和启用复制:
[mysqld]
server-id = 2
重启MySQL服务:
service mysql restart
设置Slave服务器连接Master
6、在Slave容器中配置连接Master的信息,使用Master服务器的二进制日志文件和位置:
mysql -uroot -ppassword
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replicator',
MASTER_PASSWORD='replicator_password',
MASTER_LOG_FILE='mysql-bin.xxxxxx', -- 替换为Master的日志文件名
MASTER_LOG_POS=xxxxx; -- 替换为Master的日志位置
START SLAVE;
将 master_ip 替换为你Master容器的IP地址,replicator、replicator_password、mysql-bin.xxxxxx 和 xxxxx 替换为Master服务器的相应值。
7、在Slave容器中查看复制状态,确保没有错误:
SHOW SLAVE STATUS\G;
检查 Slave_IO_Running 和 Slave_SQL_Running 是否都为 Yes,表明复制已经成功启动。