Docker 实现 mysql5.7 主从复制

前言

记录下docker一台服务器环境下配置mysql主从配置

准备

1.安装docker(环境自己安装)
2.开放3307和3308端口

步骤

1.docker拉取mysql5.7镜像

docker pull mysql:5.7



2.创建两个mysql5.7容器

主数据库容器

docker run -d -p 3307:3306 -v /home/docker/mysql_master/conf:/etc/mysql/conf.d -v /home/docker/mysql_master/data:/var/lib/mysql -v /home/docker/mysql_master/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_master mysql:5.7

从数据库容器

docker run -d -p 3308:3306 -v /home/docker/mysql_slave/conf:/etc/mysql/conf.d -v /home/docker/mysql_slave/data:/var/lib/mysql -v /home/docker/mysql_slave/logs:/var/log/mysql  -e MYSQL_ROOT_PASSWORD=123456 --name mysql_slave mysql:5.7

查看是否创建成功

docker ps -a

4.配置主从数据库my.cnf文件
创建主从数据库容器的时候已经把my.cnf配置文件挂载到/home/docker/mysql_master/和 /home/docker/mysql_slave/目录下,
只需要分别在目录下新建一个set.cnf文件配置就行

主数据库set.cnf配置

[mysqld]
#主同步配置
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
binlog-do-db=test_mysql

从数据库set.cnf配置

[mysqld]
#从同步配置
server-id=2
relay-log-index=slave-relay-bin.index
log_slave_updates=1
replicate-do-db=test_mysql

5.重启容器,更新数据库配置

docker restart 容器id

6.进入主数据库docker容器看下配置情况

docker exec -it 容器id /bin/bash

mysql -uroot -p123456

show master status;

配置已生效

7.主数据库创建test_mysql数据库

8.主数据库给从数据库赋予权限

grant replication slave, replication client on *.* to 'repl'@'121.196.148.138' identified by '123456';

flush privileges ;

'121.196.148.138'服务器ip,
'repl'设置从数据库连接的账号,
'123456'设置从数据库连接的密码

9.进入从数据库docker容器,登录mysql配置

change master to master_host='121.196.147.138',master_user='repl',master_password='123456',master_port=3307,master_log_file='master-bin.000001',master_log_pos=154;

开启从数据库同步

start slave;

查看状态

show slave status\G;

上面显示错误,主数据库连接失败,原因有防火墙端口没有开启,云服务器安全组没有开放端口
Slave_IO_Running 和 Slave_SQL_Running = YES,说明主从同步配置成功。

10.最后用Navicat连接两个数据库,在主数据库在test_mysql中创建表并插入数据测试。

最后

mysql最基础的主从复制就配置好了,mysql复制默认是异步复制,不能保证所有事务都被所有slave接收,下次基于此上再配置半同步复制。

添加新评论

-->