Centos7 Docker配置Mysql主从复制
前言
mysql主从复制配置
一、需要先安装docker,可以参考其他文章安装,这里不介绍了。
二、配置步骤如下:
1.首先拉取mysql的镜像,我这里使用的是mysql5.7
docker pull mysql:5.7
2.使用此镜像配置两个容器
Main(主):
docker run -p 3306:3306 --name mysql_main -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
From(从):
docker run -p 3307:3306 --name mysql_from -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Master对外映射端口号是3306,Slave对外映射端口号是3307。因为docker容器之间的ip是相互独立的,我们这里容器里面的端口号就都为3306,尽量不要修改。
3.查看Mysql是否成功运行
通过以下命令查看运行服务
docker ps -a
运行结果如下表示已经运行
再通过本地的Navicat测试连接
4.配置容器
4.1 Main(主)
通过以下命令进入容器内部,进入到 /etc/mysql 目录下,编辑 my.cnf 文件
vim 命令可能会报出 bash: vim: command not found。
可以先执行 apt-get update 后再执行 apt-get install vim 进行安装。之后就可以使用vim命令了。
docker exec -it 容器ID/名字 /bin/bash
cd /etc/mysql
vim my.cnf
进入编辑将以下内容复制到里面去
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
配置完成后需要重新启动mysql服务
service mysql restart
重启mysql服务会导致docker容器停止运行,需要启动一下容器
docker start mysql-main
下一步需要登录Main(主)数据库,然后创建同步用户,授权SLAVE REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
4.2 From(从)
同Main(主)一样,进入到 /etc/mysql 目录下,编辑 my.cnf 文件,并把以下内容复制进去
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
配置完成后一样需要重启服务,通Main一样
4.3 链接Main(主)和From(从)
进入Main数据库后,输入以下命令
show master status
得到以下表格
在From(从)数据库中执行以下命令
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='binlog.000007', master_log_pos= 1084, 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秒
在From(从)数据库执行以下命令查看主从同步服务状态
show slave status \G
此时 SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没开启主从复制过程。输入 start slave 命令开启,再次输入上述命令会发现 SlaveIORunning 和 SlaveSQLRunning 都是Yes。如果SlaveIORunning为Connecting 需要排查一下以下原因:
IP配置错误
网络不通
防火墙端口未开放
mysql账户密码错误
mysql主从机配置文件写错
配置从机连接语法错误
主机未开放账户连接权限
我这里一直连不上,然后在From(从)容器里面通过 mysql -uslave -p123456 -h172.17.0.3 连接Main(主)发现IP错了导致一直连不上。
5.测试
我在Main(主)上建立了一个数据库,一张表。刷新以下From(从),发现From(从)也有了这张表,至此完成。
6.总结
MySql除了这个主从复制外,还可以主从从…,主主复制等等可以根据业务自己配置,不过也都大差不差,我这里就不做详解了。