基于Docker的Mysql主从复制
MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。
MySQL主从同步的作用
1、可以作为一种备份机制,相当于热备份
2、可以用来做读写分离,均衡数据库负载
利用Docker搭建主从服务器
拉取docker镜像
docker pull mysql:5.7.13
Master(主):
docker run -p 33066:3306 --name master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
Slave(从):
docker run -p 33067:3306 --name slave1 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
docker ps 查看正在运行的容器
运行中的容器使用数据库管理工具连接mysql
连接docker容器启动的mysql主库.png配置Master
通过docker exec -it 容器id 或者 容器名称 /bin/bash 进入容器
cd /etc/mysql 输入vim my.cnf
如果没有安装vim则安装,否则将提示bash: vim: command not found
1.apt-get update
2.apt-get install vim
3.vim my.cnf
[mysqld]
#同一局域网内注意要唯一
server-id=1
#开启二进制日志功能
log-bin=mysql-bin
配置完成后操作如下两步:
.1 service mysql restart 重启mysql服务使配置生效
.2 docker start master 重启mysql服务时会使得docker容器停止
在Master数据库创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限
配置Slave
my.cnf 不一样
[mysqld]
# 设置server_id,注意要唯一
server-id=2
# 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
# relay_log配置中继日志
relay_log=edu-mysql-relay-bin
其他配置与Master步骤相同
连接Master(主)和Slave(从)
执行 show master status;
image.png
在Slave中执行
CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_USER='slave',
MASTER_PASSWORD='root', MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 609,
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秒
如果SlaveIORunning一直是Connecting
1.网络不通
检查ip,端口
2.密码不对
检查是否创建用于同步的用户和用户密码是否正确
3.Position不对
检查Master的 Position
开启同步功能
mysql>start slave;
停止MySQL服务
stop slave
查看数据库状态
show slave status
参考链接:
https://www.cnblogs.com/songwenjie/p/9371422.html
https://www.cnblogs.com/luckcs/articles/2543607.html
https://blog.csdn.net/mycwq/article/details/17136001
https://juejin.im/entry/5aa620f5f265da238440396a