Docker实现Mysql 主从复制实战

一、部署主从Mysql服务器

1)、mysql主从复制用途

●实时灾备,用于故障切换

●读写分离,提供查询服务

●备份,避免影响业务

2)、主从部署必要条件:

●主库开启binlog日志(设置log-bin参数)

●主从server-id不同

●从库服务器能连通主库

利用docker实现mysql的主从复制,首先需要在服务器上安装好docker 及拉取相关mysql镜像,这里演示的版本为 mysql 5.7 ,Docker为 version 20.10.11

在服务器创建两个目录 master 与 slave 分别对应主从数据库的data和conf ,目录结构如下

然后在master/conf/  路径下创建 my.cnf 里面内容如下 

[mysqld]
## 同一局域网内注意要唯一
server-id=1024
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password  #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整

在slave /conf/路径下 创建 my.cnf 内容如下

[mysqld]
## 设置server_id,注意要唯一
server-id=1022 
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password  #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整

然后利用镜像分别启动两个容器,一个master 一个slave , master端口为3339,slave为3340 对应的root密码为123456,映射配置文件和数据存储目录到mysql

启动 Master

 docker run --name master -p 3339:3306  \
 -v "$PWD/master/conf/my.cnf":/etc/mysql/my.cnf \
 -v "$PWD/master/data":/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

 启动Slave

  docker run --name slave -p 3340:3306 \
 -v "$PWD/slave/conf/my.cnf":/etc/mysql/my.cnf \
 -v "$PWD/slave/data":/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

 启动完成后,分别测试下连接,发现都可以正常连接,接下来开始具体的主从配置

 二、主从数据同步配置

使用navicat连接 master数据库,进行slave账户创建及相关授权

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

 在Master进入mysql,执行show master status;

show master status;

 回到linux服务器,执行命令查看master容器的ip地址

docker inspect --format={{.NetworkSettings.IPAddress}} master

然后在slave数据库服务器中根据上面得到的信息执行命令,主要是

master_log_filemaster_log_pos这两个参数需要根据上面语句查出来的结果进行配置,IP分配的内部地址基本就是172.17.0.2,如果不是这个地址改为上述查询出来的地址即可。

change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 609, master_connect_retry=30;

 查询下当前从服务器的状态

show slave status \G;

show slave status \G;

由于navicat 不支持 \G格式化展示,所以我们进入slave从服务器内查看

docker exec -it slave mysql -uroot -p123456

show slave status \G

 可以看到这两个属性都为No

设置从数据库开启主从服务

start slave;

如果中途报错,之类的,可以使用reset slave进行从服务器重置

reset slave;

 

执行语句后,可以看到主从服务已经开启了。

三、主从同步测试

利用navicat 在主数据库新建一个TestDB数据库,然后刷新从数据库连接

发现在主数据库添加的新库TestDB也被同步到从数据库上了,至此主从同步配置完成。

 后续对主数据库做的操作都会基于binlog发送给从数据库的relaylog上进行同步。

参考文献

抹香鲸之海 :基于docker的Mysql主从数据库配置_u010797364的博客-CSDN博客

Dockerhub官方文档:Mysql - Official Image | Docker Hub

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值