本示例演示在Centos 7 上基于Docker搭建MySQL主从复制环境
1. 安装组件
1.1 安装Docker
Docker运行在Centos7上,要求系统为64位,系统内核版本为3.10以上。
# 查看系统内核版本
uname -r
# 安装docker
yum -y install docker
# 启动Docker
service docker start
1.2 下载mysql5.6镜像
docker pull mysql:5.6
# 查看已有的docker镜像
docker images
2. 创建容器:
docker run --name master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6
docker run --name slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6
# 查看启动的容器
docker ps
3. 配置主库
3.1 添加配置文件
创建文件master.cnf
touch master.cnf
内容如下:
[mysqld]
log-bin=mysql-bin
server-id=1
注意: 其中的server-id绝对不能重复
将该文件复制到容器中/etc/mysql/conf.d/
下
docker cp master.cnf master:/etc/mysql/conf.d/
重启主数据库
docker restart master
3.2 添加用户
使用数据库工具如Navicate连接到master数据库,端口为映射的3307端口
创建用户
# 新建一个用户名和密码都为backup的用户,%代表任何IP地址都可以连接
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup';
# 查看用户状态
show grants for 'backup'@'%';
4. 配置从库
4.1 添加配置文件
创建文件slave.cnf
touch slave.cnf
内容如下:
[mysqld]
log-bin=mysql-bin
server-id=2
将该文件复制到容器中/etc/mysql/conf.d/
下
docker cp slave.cnf slave:/etc/mysql/conf.d/
重启从数据库
docker restart slave
4.2 从库连接到主库
使用Navicat连接到从库,执行如下SQL
CHANGE MASTER TO
# 填Navicat连接配置中的ip
MASTER_HOST='ip',
# 主容器的端口
MASTER_PORT=3307,
# 同步账号的用户名
MASTER_USER='backup',
# 同步账号的密码
MASTER_PASSWORD='backup';
start slave;
查看配置是否成功
show slave status;
Slave_IO_State 如果是Waiting for master to send event,那么基本就成功了
如果是Connecting to master,基本就是配置失败了,建议重新检查下配置,具体失败的原因可以查看日志追踪
docker logs slave -f
修改错误需要用stop slave
,停止线程,再做修改,再start slave
启动同步线程
之后就可以测试主从复制是否有效了!