Docker搭建MySQL主从复制教程

1. 整体流程

下面是搭建MySQL主从复制的整个流程:

步骤 描述
1 创建MySQL主从网络
2 创建主节点
3 创建从节点
4 配置主节点
5 配置从节点
6 启动主节点
7 启动从节点
8 验证主从复制是否成功

2. 具体步骤

步骤 1:创建MySQL主从网络

首先,我们需要创建一个网络,用于主从节点之间的通信。使用下面的命令创建一个名为mysql-network的网络:

docker network create mysql-network

步骤 2:创建主节点

使用下面的命令创建一个名为mysql-master的MySQL容器作为主节点,并将其连接到mysql-network网络:

docker run --name mysql-master -e MYSQL_ROOT_PASSWORD=<password> -d --network=mysql-network mysql

<password>:你想要设置的MySQL root密码。

步骤 3:创建从节点

使用下面的命令创建一个名为mysql-slave的MySQL容器作为从节点,并将其连接到mysql-network网络:

docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=<password> -d --network=mysql-network mysql

<password>:你想要设置的MySQL root密码。

步骤 4:配置主节点

进入主节点的MySQL容器:

docker exec -it mysql-master bash

在MySQL命令行中运行以下命令,创建一个用于复制的用户,并授予适当的权限:

mysql -u root -p

CREATE USER 'replication'@'%';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

<password>:复制用户的密码。

然后,查找主节点的二进制日志文件和位置:

SHOW MASTER STATUS;

记录下返回的FilePosition值,稍后将在配置从节点时使用。

步骤 5:配置从节点

进入从节点的MySQL容器:

docker exec -it mysql-slave bash

在MySQL命令行中运行以下命令,配置从节点以连接到主节点并开始复制:

mysql -u root -p

CHANGE MASTER TO MASTER_HOST='<主节点IP地址>', MASTER_USER='replication', MASTER_PASSWORD='<password>', MASTER_LOG_FILE='<主节点的File值>', MASTER_LOG_POS=<主节点的Position值>;
START SLAVE;

<主节点IP地址>:主节点的IP地址。 <password>:复制用户的密码。 <主节点的File值><主节点的Position值>:步骤 4 中记录的值。

步骤 6:启动主节点

返回到宿主机并启动主节点:

docker start mysql-master

步骤 7:启动从节点

返回到宿主机并启动从节点:

docker start mysql-slave

步骤 8:验证主从复制是否成功

进入主节点的MySQL容器:

docker exec -it mysql-master bash

在MySQL命令行中运行以下命令,创建一个数据库和表,并向表中插入一些数据:

mysql -u root -p

CREATE DATABASE test;
USE test;
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50));
INSERT INTO users (name) VALUES ('John'), ('Jane'), ('Doe');

然后,进入从节点的MySQL容器:

docker exec -it mysql-slave bash

在MySQL命令行中运行以下命令,验证从节点是否成功复制了主节点的数据:

mysql -u root -p

USE test;
SELECT * FROM users;

如果从节点返回与主节点相同的数据,则表示主从复制已经成功搭建。

3. 整体流程图

下面是搭建MySQL主从复制的整体流程图:

sequenceDiagram
    participant 小白
    participant 开发者

    小白->>开发者: