美文网首页Mysql数据库
Docker方式搭建MySQL 5.7主从复制(一主一从),附带

Docker方式搭建MySQL 5.7主从复制(一主一从),附带

作者: 天不生我小金 | 来源:发表于2021-11-22 23:30 被阅读0次

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

    说明

    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主从复制(一主一从),附带

        本文链接:https://www.haomeiwen.com/subject/bypitrtx.html