1. 准备工作
确认网络连通性:确保两个 Docker 容器所在的系统能够相互通信,你可以使用
ping
命令测试网络连接。记录数据库信息:记录两个 MySQL 数据库的 IP 地址、端口、用户名和密码等信息。
2. 配置主数据库(Master)
2.1 进入主数据库容器
收起
bash
docker exec -it <master_container_name> bash
其中 <master_container_name>
是主数据库容器的名称。
2.2 修改 MySQL 配置文件
编辑 my.cnf
或 my.ini
文件(位置可能因 MySQL 版本和容器配置而异,通常在 /etc/mysql/my.cnf
),添加或修改以下配置:
收起
ini
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = <database_name> # 指定需要复制的数据库名称
server-id
:每个 MySQL 实例必须有一个唯一的 ID。log-bin
:开启二进制日志,用于记录数据库的更改操作。binlog-do-db
:指定需要复制的数据库,如果不指定,将复制所有数据库。
2.3 重启主数据库容器
退出容器并重启主数据库容器,使配置生效:
收起
bash
exit
docker restart <master_container_name>
2.4 创建复制用户
进入主数据库容器并登录 MySQL:
收起
bash
docker exec -it <master_container_name> mysql -u root -p
在 MySQL 中创建一个用于复制的用户,并授予复制权限:
收起
sql
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
repl_user
:复制用户的用户名。repl_password
:复制用户的密码。
2.5 查看二进制日志信息
在 MySQL 中执行以下命令,记录二进制日志文件名和位置:
收起
sql
SHOW MASTER STATUS;
输出结果类似于:
收起
plaintext
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1234 | test_db | | |
+------------------+----------+--------------+------------------+-------------------+
记录 File
和 Position
的值,后续配置从数据库时会用到。
3. 配置从数据库(Slave)
3.1 进入从数据库容器
收起
bash
docker exec -it <slave_container_name> bash
其中 <slave_container_name>
是从数据库容器的名称。
3.2 修改 MySQL 配置文件
编辑 my.cnf
或 my.ini
文件,添加或修改以下配置:
收起
ini
[mysqld]
server-id = 2
确保 server-id
与主数据库的 server-id
不同。
3.3 重启从数据库容器
退出容器并重启从数据库容器,使配置生效:
收起
bash
exit
docker restart <slave_container_name>
3.4 配置从数据库复制
进入从数据库容器并登录 MySQL:
收起
bash
docker exec -it <slave_container_name> mysql -u root -p
在 MySQL 中执行以下命令,配置从数据库连接到主数据库并开始复制:
收起
sql
CHANGE MASTER TO
MASTER_HOST = '<master_ip>',
MASTER_USER = 'repl_user',
MASTER_PASSWORD = 'repl_password',
MASTER_LOG_FILE = '<master_log_file>',
MASTER_LOG_POS = <master_log_pos>;
<master_ip>
:主数据库的 IP 地址。<master_log_file>
:主数据库SHOW MASTER STATUS
命令输出的File
值。<master_log_pos>
:主数据库SHOW MASTER STATUS
命令输出的Position
值。
3.5 启动从数据库复制
收起
sql
START SLAVE;
3.6 检查从数据库复制状态
收起
sql
SHOW SLAVE STATUS\G
确保 Slave_IO_Running
和 Slave_SQL_Running
都为 Yes
,表示复制正常工作。
4. 验证复制
在主数据库中创建、修改或删除数据,然后检查从数据库中是否同步更新。如果一切正常,从数据库将自动复制主数据库的操作。