基于Docker的mysql主从复制

本文详细介绍了如何使用Docker拉取并启动mysql容器,配置master为从master切换到slave,并指导如何在master和slave上设置主从复制,包括配置文件编辑、用户权限设置和网络连接。

目录

一、拉取mysql

 二、启动两个mysql容器

2.1 主master

2.2 从slave

三、配置master

3.1 进入master内部配置

 3.2 安装vim命令

3.3 重启mysql

3.4 创建数据同步用户(可不建,直接用root)

四、配置slave

4.1 编辑slave文件

 4.2 重启mysql

五、配置主从复制

5.1 查看master状态

5.2 配置slave 

5.3 启动或关闭主从复制


声明:已经实测通过

一、拉取mysql

docker pull mysql:5.7

 二、启动两个mysql容器

2.1 主master

docker run -p 3339:3306 --name mysql_master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

2.2 从slave

docker run -p 3340:3306 --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

三、配置master

3.1 进入master内部配置

通过`docker exec -it 627a2368c865 /bin/bash`命令,进入mysql内部,也可以通过`docker exec -it mysql_master /bin/bash`进入。

`cd /etc/mysql`到此目录下,然后编辑`vi my.cnf`,内容如下

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

 3.2 安装vim命令

编辑my.cnf会遇到vi和vim命令不可用(因为容器内部没安装,需要自己手动安装),遇到如下情况就是需要安装vim的

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim

3.3 重启mysql

重启mysql `service mysql restart`,重启时docker容器会关闭,需要重新启动docker容器`docker start mysql-master`

3.4 创建数据同步用户(可不建,直接用root)

进入master容器,执行如下命令

mysql -uroot -p123456
# 创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

四、配置slave

4.1 编辑slave文件

参照3.1进入slave容器,`cd /etc/mysql`进入到此目录下,编辑`vi my.cnf`

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

 4.2 重启mysql

重启mysql `service mysql restart`,重启时docker容器会关闭,需要重新启动docker容器`docker start mysql_slave`

五、配置主从复制

5.1 查看master状态

根据3.1进入master容器

mysql -uroot -p123456
show master status;

查看到如下信息 

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      617 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

重点:记住File、Position内容,下文要用到 

5.2 配置slave 

mysql -u root -p
change master to master_host='129.78.272.8', master_user='slave', master_password='123456', master_port=3339, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

关键字说明

master_host:实际服务器地址

master_user:master 中 mysql 用户的账号

master_password:master 中 mysql 用户的密码

master_port:对外暴露的端口

master_log_file:5.1提到的file文件

master_log_pos:5.1提到的偏移量

此时查看slave状态Slave_IO_Running和Slave_SQL_Running都是No

show slave status \G

5.3 启动或关闭主从复制

进入slave的mysql容器内部,执行如下指令

mysql -uroot -p123456
# 开启
start slave;
# 关闭
stop slave;

此时再看slave状态,状态如下

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果不是,需要确认网络是否连通等情况

要在Docker中设置MySQL主从复制,您可以按照以下步骤进行操作: 1. 首先,创建一个Docker容器来运行主数据库。假设您已经安装了Docker并具有基本的Docker知识。在命令行中运行以下命令: ``` docker run --name mysql-master -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 -d mysql ``` 请将"your_password"替换为您所需的实际密码。 2. 确保主数据库容器正在运行。您可以运行以下命令来检查容器状态: ``` docker ps ``` 3. 创建一个Docker容器来运行从数据库。在命令行中运行以下命令: ``` docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=your_password -p 3307:3306 -d mysql ``` 请注意,这里我们使用的是不同的端口来避免与主数据库冲突。同样,将"your_password"替换为您所需的实际密码。 4. 确保从数据库容器正在运行。 5. 进入主数据库容器。运行以下命令: ``` docker exec -it mysql-master bash ``` 6. 在主数据库容器中,编辑MySQL配置文件以启用二进制日志。运行以下命令: ``` vi /etc/mysql/my.cnf ``` 将以下行添加到文件的末尾: ``` [mysqld] log-bin=mysql-bin server-id=1 ``` 保存并退出文件。 7. 重新启动主数据库容器,使更改生效。运行以下命令: ``` service mysql restart ``` 8. 进入从数据库容器。运行以下命令: ``` docker exec -it mysql-slave bash ``` 9. 在从数据库容器中,编辑MySQL配置文件以启用主从复制。运行以下命令: ``` vi /etc/mysql/my.cnf ``` 将以下行添加到文件的末尾: ``` [mysqld] server-id=2 replicate-do-db=my_database ``` 这里的"my_database"是您要复制的数据库名称。如果您只想复制特定数据库,请将其替换为您的数据库名称。 保存并退出文件。 10. 重新启动从数据库容器,使更改生效。运行以下命令: ``` service mysql restart ``` 11. 在主数据库容器中,创建一个新用户并授予复制权限。运行以下命令: ``` mysql -u root -p -e "CREATE USER 'replication_user'@'%' IDENTIFIED BY 'your_password';" mysql -u root -p -e "GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';" mysql -u root -p -e "FL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值