Docker学习一-MySQL主从热备

Docker学习二-MySQL双主互备 https://blog.csdn.net/rajayu/article/details/88840234

主从复制原理

  主从复制原理图:
在这里插入图片描述
执行主从复制三步:

      ①master将改变记录到二进制日志(Binary log)

      ②Slave访问IO Thread将Master的Bibary log 记录拷贝到Slave的中继日志(Relay log)
      
      ③Slave的SQL thread线程执行Relay log的事件,将改变执行一遍,同步到Slave的数据库中

环境要求

  • win10系统,或者Linux系统做参考
  • docker for windows, win10以上电脑才可使用
  • mysql5.7,可以只安装MySQL Server,也不是必需品
  • Navicat

  一直知道docker是个神奇的东西,想要学习下使用,去年的时候,安装windows版本的docker还是会有一大堆问题,启动的时候就会出一大堆问题,而现在新版本的docker已经完全没有问题,可以正常使用,安装过程我在这里不做赘述,大家可以度娘。

下载镜像

  1. 搜索官方镜像 ,命令:
docker search mysql

在这里插入图片描述

  1. 下载镜像,命令:
docker pull mysql:5.7.21

在这里插入图片描述
3. 常用命令:

 - docker images |grep “*”  #本地镜像列表中查找对应REPOSITORY为*的镜像
 - docker run [OPTIONS] IMAGE [COMMAND] [ARG...] #创建一个本地容器,并启动容器中实例
 - docker start/stop/restart #启动/停止/重启实例
 - docker exec [OPTIONS] CONTAINER COMMAND [ARG...] #在运行的容器中执行命令
 - docker exec -i -t  mysql01 /bin/bash #在容器mysql01 中开启一个交互模式的终端
 - docker ps #查看正在运行的容器
 - docker logs --tail="100" mysql01 #查看mysql01容器中的日志,倒数100行

启动mysql容器

  1. 启动主库,容器名:mysql01
docker run -p 3308:3306 --name mysql01 -v D:\Docker\mysql\mysql01:/docker 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

字段解释:
-p 3308:3306:将容器的 3306 端口映射到主机(本地电脑)的 3308 端口。
–name mysql01:容器名配置为mysql01
-v D:\Docker\mysql\mysql01:/docker:将主机的D:\Docker\mysql\mysql01目录挂载到容器的/docker
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d mysql:5.6:使用的镜像
注: 如果要目录挂载,必须在docker中做这样的配置,用于共享驱动器,我们共享的是D盘的文件夹,这里共享的驱动器就是D盘。
在这里插入图片描述
2. 启动从库,容器名:mysql02

docker run -p 3309:3306 --name mysql02 -v D:\Docker\mysql\mysql02:/docker 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

和主库一样。

配置

主库配置
  1. 修改mysql配置
      mysql镜像中的默认的配置文件为/etc/mysql/mysql.conf.d/mysqld.cnf,根据需要配置其参数即可。这里我们主要配置主从复制相关参数。
    第一步,在容器mysql01中实例启动的时候操作,先将/etc/mysql/mysql.conf.d/mysqld.cnf复制到挂载的D:\Docker\mysql\mysql02下面;
    第二步,修改配置文件,添加如下内容:
server-id=1 #采用自然数,保持唯一即可
read-only=0 #0代表读写均可
binlog-do-db=test-copy #代表需要进行同步的数据库
binlog-ignore-db=mysql #不同步的数据库
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
log-bin=mysql-bin #二进制日志
##不加binlog-do-db和binlog_ignore_db,那就表示备份全部数据库。

第三步,将修改好的配置文件,复制到/etc/mysql/mysql.conf.d/mysqld.cnf,覆盖原有的文件

docker exec -it mysql01 cp /docker/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

第四步,重启容器中实例。
在这里插入图片描述
2. 配置同步的从库,在主服务器新建一个用户赋予“REPLICATION SLAVE”的权限

grant replication slave on *.* to slave@10.238.64.31 identified by '123456';

在这里插入图片描述
3. 查看主库状态

show master status; 

在这里插入图片描述
  需记住File、Position,配置从库时会用到

从库配置
  1. 修改mysql配置
      mysql镜像中的默认的配置文件为/etc/mysql/mysql.conf.d/mysqld.cnf,根据需要配置其参数即可。这里我们主要配置主从复制相关参数。
    第一步,在容器mysql01中实例启动的时候操作,先将/etc/mysql/mysql.conf.d/mysqld.cnf复制到挂载的D:\Docker\mysql\mysql02下面;
    第二步,修改配置文件,添加如下内容:
server-id=2 #从库,所以不能和主库一致
read-only=1
replicate-do-db=test-copy
replicate-ignore-db=mysql 
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

第三步,将修改好的配置文件,复制到/etc/mysql/mysql.conf.d/mysqld.cnf,覆盖原有的文件

docker exec -it mysql01 cp /docker/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

第四步,重启容器中实例。
在这里插入图片描述
2. 配置主库信息

change master to master_host='10.238.64.31',master_port=3308,master_user='root',master_password='123456',
master_log_file='mysql-bin.000001',master_log_pos=329;
  1. 启动并查看从库状态
start slave; 
show slave status \G;

在这里插入图片描述
其中Slave_IO_Running、Slave_SQL_Running均为Yes代表配置成功

测试主从复制

主库新建test-copy(与前面配置文件中要同步的数据库名一致)数据库
在这里插入图片描述
新建完成后,刷新从库,从库也会存在test-copy数据库,代表主从复制配置成功,之后主库的读写操作均会同步至从库
在这里插入图片描述

注意事项

  1. 如果出现Slave_IO_Running:Yes,Slave_SQL_Running:No的情况,可能是因为删了主库的数据库,同步到从库的时候没有库导致的,错误日志:
    在这里插入图片描述
    这样修改就可以了:
    在这里插入图片描述
  2. 如果Slave_IO_Running: Connecting,一直处于这种状态,并且看日志,Error_code是1045。
    错误日志:
    在这里插入图片描述
    目前的解决方案:
    修改主库中这个用户的权限
    grant replication slave on . to slave@’%’ identified by ‘123456’;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值