Docker搭建MySQL主从

介绍

MySQL是一种常用的关系型数据库管理系统,用于存储和检索数据。在某些情况下,为了提高数据库的可用性和性能,我们需要使用主从复制架构。主从复制允许将数据从一个数据库服务器(主服务器)复制到一个或多个数据库服务器(从服务器)。当主服务器发生故障时,从服务器可以接管服务,以确保系统的高可用性。

Docker是一种容器化平台,它允许我们在隔离的环境中部署和运行应用程序。使用Docker,我们可以轻松地搭建MySQL主从架构,并在不同的环境中进行部署。

本文将介绍如何使用Docker搭建MySQL主从,并提供代码示例。

步骤

1. 下载MySQL镜像

首先,我们需要在本地计算机上下载MySQL的Docker镜像。在终端或命令提示符中运行以下命令:

docker pull mysql

这将从Docker Hub下载最新版本的MySQL镜像。

2. 创建主服务器容器

接下来,我们将创建一个MySQL容器作为主服务器。在终端或命令提示符中运行以下命令:

docker run --name mysql-master -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql

这将创建一个名为mysql-master的容器,并设置root用户的密码为yourpassword。请将密码替换为您的密码。

3. 配置主服务器

运行以下命令登录主服务器容器:

docker exec -it mysql-master mysql -uroot -p

输入您在第2步中设置的密码。

在MySQL命令行中,输入以下命令以创建用于复制的用户:

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

这将创建一个名为replication的用户,并授予复制权限。

4. 查看主服务器状态

在主服务器上运行以下命令以查看当前的二进制日志文件和位置:

SHOW MASTER STATUS;

记下这些值,我们将在从服务器上使用它们。

5. 创建从服务器容器

现在,我们将创建一个MySQL容器作为从服务器。在终端或命令提示符中运行以下命令:

docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql

这将创建一个名为mysql-slave的容器,并设置root用户的密码为yourpassword。请将密码替换为您的密码。

6. 配置从服务器

运行以下命令登录从服务器容器:

docker exec -it mysql-slave mysql -uroot -p

输入您在第5步中设置的密码。

在MySQL命令行中,输入以下命令以配置从服务器复制主服务器的数据:

CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='replication', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='log_file_from_step_4', MASTER_LOG_POS=log_position_from_step_4;
START SLAVE;

请将log_file_from_step_4log_position_from_step_4替换为第4步中的值。

7. 查看从服务器状态

在从服务器上运行以下命令以查看复制进程的状态:

SHOW SLAVE STATUS\G

确保Slave_IO_RunningSlave_SQL_Running的值都是Yes,这表示复制过程正在运行。

8. 测试主从复制

现在,我们可以测试主从复制是否正常工作。在主服务器上创建一个数据库和表,并插入一些数据:

CREATE DATABASE mydb;
USE mydb;
CREATE TABLE mytable (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO mytable VALUES (1, 'John'), (2, 'Jane');

在从服务器上,检查是否已复制主服务器上的数据库和表:

USE mydb;
SELECT * FROM mytable;

您应该能够看到从服务器上的相同数据。

结论

通过使用Docker,我们可以