使用docker部署mysql主从复制实战
时间: 2023-09-04 08:13:02 浏览: 150
详解Docker方式实现MySql 主从复制(实践篇)
1. 安装Docker
如果您还没有安装Docker,请按照官方文档的说明安装Docker。
2. 创建Docker网络
为了使主从复制工作,我们需要为Docker容器创建一个网络。在命令行中运行以下命令:
```
sudo docker network create mysql_network
```
3. 启动主数据库
我们将使用官方的MySQL Docker镜像来启动主数据库。在命令行中运行以下命令:
```
sudo docker run -d --name mysql_master --net mysql_network -e MYSQL_ROOT_PASSWORD=password mysql:latest --server-id=1 --log-bin=mysql-bin --binlog-do-db=mydb
```
这将启动一个名为mysql_master的Docker容器,并将其连接到我们创建的mysql_network网络中。我们还指定了一个root用户的密码,并为该容器分配了一个server-id,以便在创建从数据库时使用。
我们还使用了两个MySQL选项来启用二进制日志记录和仅记录mydb数据库的事务。
4. 启动从数据库
现在我们需要启动另一个MySQL容器作为从数据库。在命令行中运行以下命令:
```
sudo docker run -d --name mysql_slave --net mysql_network -e MYSQL_ROOT_PASSWORD=password mysql:latest --server-id=2 --log-bin=mysql-bin --binlog-do-db=mydb --relay-log=mysql-relay-bin --log-slave-updates=1 --read-only=1 --slave-skip-errors=all --skip-slave-start
```
这将启动一个名为mysql_slave的Docker容器,并将其连接到我们创建的mysql_network网络中。我们还指定了一个root用户的密码,并为该容器分配了一个server-id。
我们还使用了一些MySQL选项来启用二进制日志记录和仅记录mydb数据库的事务。我们还启用了中继日志记录和从服务器更新主服务器的日志记录。我们还将容器设置为只读模式,并跳过任何从数据库错误。最后,我们将跳过从服务器的启动。
5. 配置主数据库
现在我们需要登录主数据库并为它创建一个用于从服务器的用户。在命令行中运行以下命令:
```
sudo docker exec -it mysql_master mysql -u root -p
```
输入我们在启动容器时指定的root密码,这将进入MySQL shell。在MySQL shell中,运行以下命令:
```
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
```
这将创建一个名为slave_user的用户并授予其复制权限。我们还刷新了特权表以确保更改生效。最后,我们显示了主服务器的状态,以便稍后配置从服务器。
请注意,我们在第一行中使用了“%”通配符,以便从任何位置连接到主服务器。在生产环境中,您应该更明确地指定从服务器的IP地址。
6. 配置从数据库
现在我们需要登录从数据库并配置它以连接到主服务器。在命令行中运行以下命令:
```
sudo docker exec -it mysql_slave mysql -u root -p
```
输入我们在启动容器时指定的root密码,这将进入MySQL shell。在MySQL shell中,运行以下命令:
```
CHANGE MASTER TO MASTER_HOST='mysql_master', MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0;
START SLAVE;
```
这将配置从服务器以连接到我们的主数据库,并指定将从哪个二进制日志文件开始复制。我们还启动从服务器以开始复制。
请注意,我们在第一行中使用了主服务器的容器名称(mysql_master)作为主机名。在Docker网络中,容器可以使用其名称进行通信。
7. 测试主从复制
现在,我们已经成功配置了主从复制,我们可以测试它是否正常工作。在MySQL shell中,运行以下命令:
```
USE mydb;
CREATE TABLE test (id INT PRIMARY KEY);
INSERT INTO test VALUES (1);
```
这将在主服务器上创建一个名为test的表,并将一行插入其中。我们可以使用以下命令在从服务器上检查是否成功复制:
```
USE mydb;
SELECT * FROM test;
```
如果一切正常,您应该看到与主服务器上插入的相同的行。
现在,我们已经成功地使用Docker部署了MySQL主从复制。请记住,这只是一个简单的示例,用于演示如何设置主从复制。在生产环境中,您应该仔细考虑安全性和高可用性等问题。
阅读全文