Docker方式搭建MySQL 5.7主从复制(一主一从),附带备份主库恢复到从库教程

前言:该博客主要是记录自己学习的过程,方便以后查看,当然也希望能够帮到大家。

说明

MySQL使用的是5.7版本,其实用Docker装数据库就是图个方便,生产环境还是不建议哈!

本文重点在主从复制,需要部署单机版请查看另外一个教程,CentOS 7 使用Docker方式安装部署MySQL 5.7

第一步,分别在机器上装好docker并启动(不会使用docker的话请先百度了解一下)

第二步,分别在机器上创建挂载目录,如下

主库机器
mkdir -p /usr/local/docker/mysql/data/  
从库机器
mkdir -p /usr/local/docker/mysql/data/

第三步,分别以docker方式部署mysql,如下

主库
docker run -dit --name mysql-5.7-master -p 3306:3306 -v /etc/localtime:/etc/localtime:ro -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my1234 mysql:5.7 --lower_case_table_names=1 --server-id=100 --log-bin=mysql-bin
从库
docker run -dit --name mysql-5.7-slave -p 3306:3306 -v /etc/localtime:/etc/localtime:ro -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my1234 mysql:5.7 --lower_case_table_names=1 --server-id=101 --log-bin=mysql-slave-bin --relay_log=edu-mysql-relay-bin --log_slave_updates=1
image.png
说明
  1. lower_case_table_names设置不区分大小写。
  2. MYSQL_ROOT_PASSWORD设置root用户密码,本例子中账号密码都设置为my1234,连接请用该账号密码。
  3. /etc/localtime:/etc/localtime:ro设置时区跟随宿主机。
  4. 端口随自己修改,修改后注意docker容器的映射端口要跟着改。
  5. server_id注意要唯一。
  6. log-bin开启二进制日志功能。
  7. relay_log配置中继日志。
  8. log_slave_updates复制的数据写入日志中。

第四步,主库创建数据同步的用户slave,如下

并授予slave用户REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据

# 进入容器
docker exec -it mysql-5.7-master /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
# 授予用户
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
image.png

第五步,备份主库数据到从库(如果是新建数据库,跳过这一步),如下

1. 在主库上加锁,使只有只读权限,防止新数据的写入
# 进入容器
docker exec -it mysql-5.7-master /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 加锁
flush table with read lock;
image.png
2. 查看当前主库状态,记下这个数值,后面要用
show master status;
image.png
3. 备份数据
# 进入容器
docker exec -it mysql-5.7-master /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 备份数据
mysqldump -uroot -pmy1234 --all-databases|gzip > dump.sql.gz
# 释放锁
unlock tables;
image.png
4. 将文件传到从库所在机器,ip,路径自行替换
# 复制数据到宿主机
docker cp mysql-5.7-master:/dump.sql.gz /usr/local/docker/mysql
# 服务器传输
scp /usr/local/docker/mysql/dump.sql.gz root@从库机器ip:/usr/local/docker/mysql
5. 恢复数据到从库,路径自行替换
# 解压文件
gzip -d /usr/local/docker/mysql/dump.sql.gz
# 移动文件到挂载目录下
mv /usr/local/docker/mysql/dump.sql /usr/local/docker/mysql/data/dump.sql
# 进入容器
docker exec -it mysql-5.7-slave /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 恢复数据,慢慢等吧,比较耗时
source /var/lib/mysql/dump.sql

第六步,配置从库进行同步,如下

1. 配置同步
# 进入容器
docker exec -it mysql-5.7-slave /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 配置同步
change master to master_host='主库机器ip', master_user='slave', master_password='my1234', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=46781778;
说明
  1. master_user和master_password为第四步在主库创建的用户和密码
  2. master_log_file和master_log_pos均为第五步第2点查看的主库状态(新创建的库直接用"show master status;"命令查看主库状态即可得到)
2. 开启同步
# 开启同步
start slave;
# 查看从库同步状态
show slave status;
image.png
说明
  1. Slave_IO_Running为读取master的binaryLog的线程
  2. Slave_SQL_Running为执行SQL的线程
  3. 如图,Slave_IO_Running和Slave_SQL_Running都为YES即配置成功

后记:本次分享到此结束,本人水平有限,难免有错误或遗漏之处,望大家指正和谅解,欢迎评论留言。

你可能感兴趣的:(Docker方式搭建MySQL 5.7主从复制(一主一从),附带备份主库恢复到从库教程)