docker 使用2台服务器搭建 mysql 主从复制

docker 使用2台服务器搭建 mysql 主从复制

笔者这里准备2台 centos7服务器,它们的 ip分别是 192.168.0.113,192.168.0.111,后面简称113和111

113服务器用来做主服务器,111服务器用来做从服务器

mysql 的版本使用 8.0.25

 

服务器安装 docker这里就不赘述了

 

1、主从服务器分别拉取 mysql镜像

docker pull mysql:8.0.25

拉取完成后,主从服务器分别运行 mysql 容器

主 mysql容器别名为 mysql8-master

docker run --privileged=true --name=mysql8-master -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /docker_data/mysql8-master:/var/lib/mysql -d mysql:8.0.25

从 mysql容器别名为 mysql8-slave

docker run --privileged=true --name=mysql8-slave -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /docker_data/mysql8-slave:/var/lib/mysql -d mysql:8.0.25

主服务器

从服务器

 

2、主服务器修改配置文件

将主 mysql容器的 mysql.cnf 文件复制到 root 目录下

docker cp mysql8-master:/etc/mysql/conf.d/mysql.cnf /root 

编辑 mysql.cnf 文件

vi mysql.cnf

 

 

将下面内容复制到 mysql.cnf 文件中

[mysqld]
log-bin=mysql-bin    
server-id=1

如下图

复制后保存

将修改后的 mysql.cnf 文件从 root目录下复制回主 mysql容器中

docker cp /root/mysql.cnf mysql8-master:/etc/mysql/conf.d/

 

重启主 mysql容器使新的配置文件生效

docker restart mysql8-master

 

3、主mysql容器创建账号

重启主mysql后,进入容器内创建用于主从复制的账号

docker exec -it mysql8-master bash

登录 mysql

mysql -u root -p123456

 

 

在主库创建用于从库复制的用户,账号 slavecopyuser 密码 copy123456,然后赋予权限

这里限制了访问的 ip只能是从服务器的ip地址 192.168.0.111

create user 'slavecopyuser'@'192.168.0.111' identified with mysql_native_password by 'copy123456';
grant replication client,replication slave on *.* to 'slavecopyuser'@'192.168.0.111';

如果不想限制访问的 ip 地址,使用下面命令

create user 'slavecopyuser'@'%' identified with mysql_native_password by 'copy123456';
grant replication client,replication slave on *.* to 'slavecopyuser'@'%';

创建用户并赋予权限后,刷新权限

flush privileges;

 

命令如下图

 

用户创建完成后,查看主服务器 master_log_file,master_log_pos 两个参数

show master status;

 

这里记下 mysql-bin.000001 和 890

 

4、修改从mysql 容器配置文件

步骤和主mysql容器一样,先将配置文件从容器里复制出来,修改后再复制回去

docker cp mysql8-slave:/etc/mysql/conf.d/mysql.cnf /root
vi mysql.cnf

 

将下面内容复制到从mysql 配置文件中

[mysqld]
log-bin=mysql-bin    
server-id=2

 

保存后,将 mysql.cnf 文件复制回 mysql 容器里

docker cp /root/mysql.cnf mysql8-slave:/etc/mysql/conf.d/

重启从mysql 容器

docker restart mysql8-slave

 

 

5、在从mysql容器中开启主从复制

重启从mysql 容器后,今日从mysql容器内

docker exec -it mysql8-slave bash

登录

mysql -u root -p123456

 

配置连接主服务器的信息

这里需要在主mysql容器中记下的 mysql-bin.000001 和 890

master_host 为主mysql容器的 ip 地址

master_user 为用于复制的账号

master_password 为用于复制的账号的密码

change master to master_host='192.168.0.113',master_user='slavecopyuser',master_password='copy123456',master_log_file='mysql-bin.000001',master_log_pos=890;

配置后,开启主从复制

start slave;

 

 

检查主从连接状态

show slave status\G

 

Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 说明没问题

如果是 No 或者 connect 说明没接上

 

6、测试主从复制

主服务器创建数据库

create database user_test;

从服务器上查看

show databases;

主服务器创建数据库 user_test,从服务能看到 user_test

说明主从复制搭建成功

 

 

至此完

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世君子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值