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_4
和log_position_from_step_4
替换为第4步中的值。
7. 查看从服务器状态
在从服务器上运行以下命令以查看复制进程的状态:
SHOW SLAVE STATUS\G
确保Slave_IO_Running
和Slave_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,我们可以