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;
记录下返回的File
和Position
值,稍后将在配置从节点时使用。
步骤 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 开发者
小白->>开发者: