Docker中MySQL无状态主从配置与增量同步

需积分: 9 2 下载量 129 浏览量 更新于2024-09-09 收藏 6KB TXT 举报
本文将介绍如何在Docker容器中配置MySQL数据库的无状态主从复制,使得从节点在重启后能自动进行增量同步。 在Docker环境下,我们首先需要找到并下载MySQL的镜像。这可以通过`docker search mysql`命令来搜索MySQL的官方镜像,然后使用`docker pull mysql`来下载最新或者特定版本的镜像。通过`docker images`可以查看已下载的镜像列表,确保MySQL镜像已经成功获取。 接下来是创建主数据库容器。在本例中,使用`docker run`命令创建名为`mysql-master`的容器,挂载本地的配置文件`my-m.cnf`到容器内的`/etc/mysql/my.cnf`,端口映射为3307,设置环境变量以定义数据库的root密码、用户、密码以及数据库名称,并挂载数据卷`/soft/master`到容器的`/var/lib/mysql`目录,最后指定运行`mysql`服务。完整的命令如下: ```bash docker run --name mysql-master -v /soft/conf/my-m.cnf:/etc/mysql/my.cnf -p 3307:3306 -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_USER=sbin -e MYSQL_PASSWORD=1234 -e MYSQL_DATABASE=sbin -v /soft/master:/var/lib/mysql -d mysql ``` 同样,创建从数据库容器`mysql-slave`,挂载配置文件`my-s.cnf`,端口映射为3308,其余设置与主数据库容器相同,但挂载的数据卷为`/soft/slave`。命令如下: ```bash docker run --name mysql-slave -v /soft/conf/my-s.cnf:/etc/mysql/my.cnf -p 3308:3306 -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_USER=sbin -e MYSQL_PASSWORD=1234 -e MYSQL_DATABASE=sbin -v /soft/slave:/var/lib/mysql -d mysql ``` 配置主从复制之前,需要在主节点上创建一个用于复制的用户,并授权。登录到MySQL的主节点(可通过`mysql -h 0.0.0.0 -P 3307 -u root -p`),执行如下SQL语句: ```sql GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456'; ``` 获取主节点的binlog文件名和位置,这将在从节点的配置中使用。同样在主节点上,输入: ```sql SHOW MASTER STATUS; ``` 记下返回的`File`(例如`mysql-bin.000004`)和`Position`(例如`312`)。 接下来,配置从节点。登录到从节点(`mysql -h 0.0.0.0 -P 3308 -u root -p`),执行以下命令来更改主从复制的设置: ```sql CHANGE MASTER TO MASTER_HOST='121.32.32.54', MASTER_USER='backup', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=312, MASTER_PORT=3307; ``` 这里`MASTER_HOST`为主节点的IP地址,`MASTER_PORT`为主节点的MySQL端口,其他参数与之前的步骤对应。 最后,启动从节点的复制进程: ```sql START SLAVE; ``` 通过`SHOW SLAVE STATUS`检查从节点的状态,确认其是否已正确连接并开始复制。 无状态主从配置意味着从节点在重启后能自动恢复到复制状态,无需手动干预。这里的无状态是指从节点的数据不保存任何业务状态,仅用于读取和同步主节点的数据。这种配置对于高可用性和负载均衡的分布式系统非常重要。 为了保证主从复制的顺利进行,配置文件`my-m.cnf`和`my-s.cnf`需要包含适当的复制配置,如`server-id`(每个节点必须不同),`log-bin`(启用二进制日志)等。同时,确保网络连接的稳定性,以防止复制中断。