栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

基于docker配置MySQL主从复制

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于docker配置MySQL主从复制

主从复制 工作原理

主从复制是MySQL提供的一种高可用高性能的解决方案。

工作原理分为以下3个步骤:

1、主库(master)把数据更改记录到**二进制日志(binlog)**中。

2、从库(slave)的I/O线程把主库的二进制日志读取保存到自己的**中继日志(relay log)**中。

3、从库的SQL线程执行中继日志,重做中继日志中的日志,即再执行一遍SQL,更新自己的数据库,以达到数据的一致性。

注意要点:

主从复制不是完全实时地进行同步,而是异步实时。从库同步主库数据的过程是串行化的,也就是说主库上并行的操作,在从库上会串行执行。由于从库从主库拷贝日志以及串行执行 SQL 的特点,会有主从同步时延,在高并发的情况下,该问题就越明显。


作用

使用主从复制能够预防MySQ的单点故障,对数据进行备份。

在高并发下,需要对应用进行读写分离,配置多数据源,即写操作走主库,读操作则走从库,以减少锁的争用,此时也需要进行主从复制。


部署数据库实例

1、拉取镜像

docker pull mysql:5.7

2、运行容器

# 主库(端口3306)
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name master_mysql mysql:5.7
# 从库(端口3307)
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name slave_mysql mysql:5.7

3、查看状态

docker ps	#查看是否运行成功

4、使用Navicat等数据库管理工具进行连接


主从复制配置

一、配置主库

  • 进入容器修改配置文件
docker exec -it master_mysql /bin/bash

#由于容器内没有vim工具,需进行安装
apt-get update
apt-get install vim

vim /etc/mysql/my.cnf
  • 在 my.cnf 配置文件中添加如下代码
[mysqld]
server-id=10
log-bin=mysql-bin
innodb_flush_log_at_trx_commit=1
sync_binlog=1
  • 进入主库为从库创建一个用户用来复制数据,从库通过这个用户连接至主库
# 登录mysql
mysql -u root -p

# 创建用户
mysql> CREATE user 'slave'@'%' identified by 'slave';
# 赋予权限
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
  • 查看主库状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     617  |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
  • 重启生效
docker restart master_mysql

二、从库配置

  • 同样的进入容器修改配置文件
docker exec -it slave_mysql /bin/bash

#由于容器内没有vim工具,需进行安装
apt-get update
apt-get install vim

vim /etc/mysql/my.cnf
  • 在 my.cnf 配置文件中添加如下代码
[mysqld]
server_id=11
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
  • 重启生效
docker restart slave_mysql

三、绑定主库

  • docker查看主mysql容器的ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' master_mysql
  • 进入从库
docker exec -it slave_mysql /bin/bash
mysql -u root -p
  • 绑定主库
mysql> 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

  • 查看从库的状态
show slave status G;
# 发现IO线程和SQL线程运行状态都为No,默认是没有开启,需要手动开启
Slave_IO_Running: No
Slave_SQL_Running: No
  • 开启主从复制
start slave;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/612516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号