基于docker实现MySQL主从复制
主从复制
工作原理
主从复制是MySQL提供的一种高可用高性能的解决方案。
工作原理分为以下3个步骤:
1、主库(master)把数据更改记录到二进制日志(binlog)中。
2、从库(slave)的I/O线程把主库的二进制日志读取保存到自己的中继日志(relay log)中。
3、从库的SQL线程执行中继日志,重做中继日志中的日志,即再执行一遍SQL,更新自己的数据库,以达到数据的一致性。
注意要点:
主从复制不是完全实时地进行同步,而是异步实时。从库同步主库数据的过程是串行化的,也就是说主库上并行的操作,在从库上会串行执行。由于从库从主库拷贝日志以及串行执行 SQL 的特点,会有主从同步时延,在高并发的情况下,该问题就越明显。
作用
使用主从复制能够预防MySQ的单点故障,对数据进行备份。
在高并发下,需要对应用进行读写分离,配置多数据源,即写操作走主库,读操作则走从库,以减少锁的争用,此时也需要进行主从复制。
部署数据库实例
1、拉取镜像
1 | docker pull mysql:5.7 |
2、运行容器
1 | 主库(端口3306) |
3、查看状态
1 | docker ps #查看是否运行成功 |
4、使用Navicat等数据库管理工具进行连接
主从复制配置
一、配置主库
- 进入容器修改配置文件
1 | docker exec -it master_mysql /bin/bash |
- 在 my.cnf 配置文件中添加如下代码
1 | [mysqld] |
- 进入主库为从库创建一个用户用来复制数据,从库通过这个用户连接至主库
1 | 登录mysql |
- 查看主库状态
1 | show master status; |
- 重启生效
1 | docker restart master_mysql |
二、从库配置
- 同样的进入容器修改配置文件
1 | docker exec -it slave_mysql /bin/bash |
- 在 my.cnf 配置文件中添加如下代码
1 | [mysqld] |
- 重启生效
1 | docker restart slave_mysql |
三、绑定主库
- docker查看主mysql容器的ip
1 | docker inspect --format='{{.NetworkSettings.IPAddress}}' master_mysql |
- 进入从库
1 | docker exec -it slave_mysql /bin/bash |
- 绑定主库
1 | change master to master_host='172.17.0.2', master_user='slave', master_password='slave', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=617, master_connect_retry=30; |
这里的master_host为刚刚查到的主mysql容器的ip,是容器独立的ip
- 查看从库的状态
1 | show slave status \G; |
- 开启主从复制
1 | start slave; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 KimTou!
评论