基于docker的mysql主从复制(一主两从)

1.下载mysql5.7镜像

docker pull mysql:5.7

下载完成后,可以使用如下命令查看mysql镜像:

docker images

2. 使用下载好的镜像搭建3MySQL主从

Master:

docker run -p 3301:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Slave:

docker run -p 3302:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

slave2:

docker run -p 3303:3306 --name mysql-slave2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

master对外映射的端口号是3301slave对外映射的端口号是3302slave2对外的映射端口号是3303,大家可以自己随意设置。因为docker容器是相互隔离的,每个容器有其独立的IP地址,所以不同容器使用相同的端口并不会冲突。

3.配置master

3.1编辑my.cnf文件

进入到Master容器内部,使用容器ID或者名称均可:

docker exec -it mysql-master /bin/bash

切换到 /etc/mysql 目录下:

https://i-blog.csdnimg.cn/blog_migrate/b53dfca7ff664bc47f38f814e6863f93.png

使用vim命令编辑my.cnf文件,会出现bash: vim: command not found,因此我们需要在docker内部安装vim工具

https://i-blog.csdnimg.cn/blog_migrate/257cacb1f064bab294a9557de887bf2a.png

docker内部安装vim

依次输入如下命令即可安装,时间和网速有关,耐心等待。

apt-get update

apt-get install vim

安装成功后,编辑my.cnf文件:

[mysqld]
server-id=100  
log-bin=master-bin
binlog-format=ROW     

配置完成后,需要重启mysql服务使其修改的配置文件生效,使用如下命令使mysql进行重启和使容器重新启动

service mysql restart
docker start mysql-master

3.2创建数据库同步账户

使用docker命令重新进入到Master容器内部:

docker exec -it mysql-master /bin/bash

Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。登录到mysql客户端:

mysql -uroot -p123456

创建用户并授权:

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

4.配置slave

4.1编辑my.cnf文件

使用docker命令docker exec -it mysql-slave /bin/bash 进入到slave容器中,进入到etc/mysql路径,使用vim命令编辑my.cnf文件:

[mysqld]
server-id=101  
log-bin=mysql-slave-bin   
relay_log=mysql-relay-bin  
read_only=1

配置完成后也需要重启mysql服务和docker容器

service mysql restart

docker start mysql-slave

4.2开启Master-Slave主从复制

进入Mastermysql客户端:输入show master status查看Master状态

记住FilePosition,后面需要用到。此时一定不要操作Master库,否则将会引起Master状态的变化,FilePosition字段也将会进行变化。
进入到Slavemyslq客户端,执行如下命令:

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

其中master_host :是Master库的地址,指的是容器的独立ip,可以通过

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id


查询容器的IP。其中

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒。

Slave 中的mysql终端执行

start slave;
show slave status \G

用于查看主从同步状态。

Slave_IO_Running  Slave_SQL_Running 都是Yes,说明主从复制已经开启。

5.配置slave2

5.1编辑my.cnf文件

进入到/etc/mysql/目录,通过vim命令修改mysql 的配置文件my.cnf,添加如下配置

[mysqld]
server-id=102  
relay-log=mysql-relay-bin

配置完成后也需要重启mysql服务和docker容器

service mysql restart
docker start mysql-salve2

5.2开启master-slave2主从复制

进入到Slave2myslq客户端,执行如下命令:

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

之后步骤就跟配置slave时一样:

Slave2 中的mysql终端执行

start slave

show slave status \G

用于查看主从同步状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值