返回

在Docker环境中搭建MySQL主从复制的完整指南

后端

1. 前提条件

  • 一台安装了Docker的CentOS服务器
  • 稳定的网络连接
  • MySQL镜像(例如,mysql:5.7)

2. 安装MySQL镜像

首先,我们需要在宿主机上安装MySQL镜像。您可以使用以下命令来完成:

docker pull mysql:5.7

3. 创建并启动MySQL容器

接下来,我们需要创建并启动MySQL容器。我们可以使用以下命令来完成:

docker run -d --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql:5.7

此命令将创建一个名为“mysql-master”的容器,并将其映射到宿主机上的3306端口。我们还设置了MySQL的根密码为“password”。

4. 创建并启动MySQL从容器

现在,我们需要创建并启动MySQL从容器。我们可以使用以下命令来完成:

docker run -d --name mysql-slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=password --link mysql-master:mysql mysql:5.7

此命令将创建一个名为“mysql-slave”的容器,并将其映射到宿主机上的3307端口。我们还设置了MySQL的根密码为“password”。同时,我们还使用--link选项将从容器链接到主容器。

5. 配置主容器

接下来,我们需要配置主容器以启用复制。我们可以使用以下命令来完成:

docker exec -it mysql-master bash

mysql -u root -ppassword

CREATE USER 'slave'@'%' IDENTIFIED BY 'password';

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';

FLUSH PRIVILEGES;

此命令将创建一个名为“slave”的用户,并授予它复制权限。我们还刷新了权限以使更改生效。

6. 配置从容器

现在,我们需要配置从容器以连接到主容器并开始复制。我们可以使用以下命令来完成:

docker exec -it mysql-slave bash

mysql -u root -ppassword

CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='slave', MASTER_PASSWORD='password';

START SLAVE;

此命令将从容器连接到主容器,并启动复制。

7. 验证复制

现在,我们可以使用以下命令来验证复制是否正常工作:

docker exec -it mysql-slave bash

mysql -u root -ppassword

SHOW SLAVE STATUS\G

此命令将显示从容器的复制状态。如果复制正常工作,您应该会看到“Slave_IO_Running”和“Slave_SQL_Running”的值为“Yes”。

8. 测试复制

现在,我们可以使用以下命令来测试复制:

docker exec -it mysql-master bash

mysql -u root -ppassword

CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, PRIMARY KEY (id));

INSERT INTO test (name) VALUES ('John Doe');

此命令将在主容器中创建一个名为“test”的表,并插入一条记录。

docker exec -it mysql-slave bash

mysql -u root -ppassword

SELECT * FROM test;

此命令将在从容器中查询“test”表。您应该会看到刚插入的那条记录。

9. 优点和局限性

MySQL主从复制具有以下优点:

  • 高可用: 如果主服务器发生故障,从服务器可以立即接管并继续提供服务。
  • 容灾: 如果主服务器所在的数据中心发生灾难,从服务器可以位于另一个数据中心,从而确保数据的安全。
  • 备份: 从服务器可以作为主服务器的备份,以便在需要时进行恢复。
  • 性能提升: 从服务器可以分担主服务器的负载,从而提高性能。
  • 可扩展性: 可以通过添加更多从服务器来扩展MySQL主从复制环境,从而满足不断增长的需求。

MySQL主从复制也具有一些局限性:

  • 延迟: 从服务器上的数据可能与主服务器上的数据存在延迟。
  • 复杂性: MySQL主从复制的配置和管理可能比较复杂。
  • 成本: 如果需要在不同的数据中心部署主从服务器,则可能会增加成本。

10. 最佳实践

在生产环境中使用MySQL主从复制时,应遵循以下最佳实践:

  • 使用负载均衡器: 在主服务器和从服务器之间使用负载均衡器可以帮助分发流量并提高性能。
  • 定期监控: 应定期监控MySQL主从复制环境,以确保其正常工作。
  • 定期备份: 应定期备份主服务器和从服务器的数据,以防数据丢失。
  • 使用加密: 在主服务器和从服务器之间使用加密可以保护数据免遭未经授权的访问。
  • 定期更新: 应定期更新MySQL软件,以确保使用最新版本。