在Docker环境下配置MySQL的主从复制,可以极大地简化部署过程,并提高系统的可用性。以下是实现这一目标的详细步骤:
1. 准备工作
1.1 安装Docker
确保你的系统中已经安装了Docker。如果没有,可以访问Docker官网下载并安装。
1.2 创建MySQL镜像
从Docker Hub下载MySQL镜像,或者使用官方镜像。
docker pull mysql
2. 配置主服务器(Master)
2.1 创建主服务器容器
创建一个名为mysql_master的容器,并配置MySQL的root密码。
docker run -d --name mysql_master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
2.2 配置MySQL主服务器
进入容器,修改my.cnf文件,添加或修改以下配置:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
保存文件并退出。
2.3 刷新权限
在容器内执行以下命令刷新权限:
docker exec mysql_master mysql -u root -p'my-secret-pw' -e "FLUSH PRIVILEGES;"
3. 配置从服务器(Slave)
3.1 创建从服务器容器
创建一个名为mysql_slave的容器,并指定连接到主服务器。
docker run -d --name mysql_slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_REPLICATION_USER=repl_user -e MYSQL_REPLICATION_PASSWORD=repl_password mysql
3.2 配置MySQL从服务器
进入从服务器容器,修改my.cnf文件,添加或修改以下配置:
[mysqld]
server-id=2
log-bin=mysql-bin
binlog-format=ROW
replicate-do-db=your_database
其中,your_database是你希望复制的数据库名。
保存文件并退出。
3.3 配置复制用户
在主服务器上创建一个用于复制的用户,并授权。
docker exec mysql_master mysql -u root -p'my-secret-pw' -e "CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';"
docker exec mysql_master mysql -u root -p'my-secret-pw' -e "GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';"
docker exec mysql_master mysql -u root -p'my-secret-pw' -e "FLUSH PRIVILEGES;"
3.4 设置从服务器的主从同步
在从服务器上设置主服务器信息:
docker exec mysql_slave mysql -u repl_user -p'repl_password' -e "CHANGE MASTER TO MASTER_HOST='mysql_master', MASTER_USER='repl_user', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4;"
启动复制进程:
docker exec mysql_slave mysql -u repl_user -p'repl_password' -e "START SLAVE;"
4. 验证主从复制
在主服务器上插入一条数据,并检查从服务器是否同步了这条数据。
-- 在主服务器上执行
INSERT INTO your_database.your_table (column1, column2) VALUES (value1, value2);
-- 在从服务器上执行
SELECT * FROM your_database.your_table;
如果从服务器上显示了相同的数据,则主从复制已成功配置。
5. 总结
通过以上步骤,你可以在Docker环境下轻松配置MySQL的主从复制,从而实现高可用架构。这种方法简化了部署过程,并且能够根据需要轻松扩展你的数据库服务。