• docker部署mysql主从备份


    docker部署mysql主从备份

    环境准备

    • centos7系统
    • docker环境
    • docker-compose环境

    主从同步原理

    在这里插入图片描述

    MySQL 复制过程分成三步:

    ​ master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;

    ​ slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);

    ​ slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的

    预期目标

    搭建一个一主一从的Mysql环境

    从属关系容器名称服务器端口
    mysql-master192.168.56.1003306
    mysql-slave1192.168.56.1013306

    搭建配置

    开放端口

    主从都需要执行

    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --list-all
    systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4

    主服务器(56.100)

    mkdir -p /home/scsdm/services/mysql
    vi /home/scsdm/services/mysql/docker-compose.yml
    
    • 1
    • 2
    version: '3'
    services:
      node1:
        image: mysql:5.7.23
        hostname: mysql-master
        container_name: mysql-master
        restart: always
        ports:
          - "3306:3306"
        environment:
          - MYSQL_ROOT_PASSWORD=hancloud1234!
          - TZ=Asia/Shanghai
        volumes:
          - /home/scsdm/services/mysql/mysql_master/slowSql:/data/mysql
          - /home/scsdm/services/mysql/mysql_master/data:/var/lib/mysql
          - /home/scsdm/services/mysql/mysql_master/logs:/var/log/mysql
          - /home/scsdm/services/mysql/mysql_master/conf/my.cnf:/etc/mysql/my.cnf
        privileged: true
        command: ['mysqld','--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci','--default-time-zone=+08:00']
      	entrypoint: bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    配置
    mkdir -p /home/scsdm/services/mysql/mysql_master/conf
    vi /home/scsdm/services/mysql/mysql_master/conf/my.cnf
    
    • 1
    • 2
    !includedir /etc/mysql/conf.d/ 
    !includedir /etc/mysql/mysql.conf.d/
    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    default-time-zone=+08:00
    max_connections=1000
    
    # 开启binlog
    log-bin=mysql-bin
    log-bin-index=mysql-bin.index
    # 服务器唯一id,默认值1
    server-id=1
    max_binlog_size=1G
    max_binlog_cache_size=1G
    # 设置日志格式,默认值ROW
    binlog_format=mixed
    expire_logs_days=7
    # 开启慢查询
    slow_query_log=1
    long_query_time=2
    slow_query_log_file=/data/mysql/slow.log
    # 错误日志
    log_error=/var/log/mysql/error.log
    # 设置需要复制的数据库,默认复制全部数据库
    binlog-do-db=mcp_manager
    # 设置不需要复制的数据库
    #binlog-ignore-db=mysql
    #binlog-ignore-db=infomation_schema
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    启动主服务器
    cd /home/scsdm/services/mysql
    # my.cnf 权限不能是777,会被忽略
    chmod 644 /home/scsdm/services/mysql/mysql_master/conf/my.cnf
    docker-compose up -d
    
    • 1
    • 2
    • 3
    • 4
    进入容器
    #进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码
    docker exec -it mysql-master env LANG=C.UTF-8 /bin/bash
    #进入容器内的mysql命令行
    mysql -uroot -p
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    创建用户用于备份
    -- 创建slave用户
    CREATE USER 'slave'@'%';
    -- 设置密码
    ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'hancloud@1234';
    -- 授予复制权限
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
    -- 刷新权限
    FLUSH PRIVILEGES;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    查看创建的用户信息

    select host,user from mysql.user;
    
    • 1

    在这里插入图片描述

    主机中查询master状态

    执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

    SHOW MASTER STATUS;
    
    • 1

    记下FilePosition的值。

    执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。

    在这里插入图片描述

    从服务器(56.101)

    mkdir -p /home/scsdm/services/mysql
    vi /home/scsdm/services/mysql/docker-compose.yml
    
    • 1
    • 2
    version: '3'
    services:
      node1:
        image: mysql:5.7.23
        hostname: mysql-slave1
        container_name: mysql-slave1
        restart: always
        ports:
          - "3306:3306"
        environment:
          - MYSQL_ROOT_PASSWORD=hancloud1234!
          - TZ=Asia/Shanghai
        volumes:
          - /home/scsdm/services/mysql/mysql_slave1/slowSql:/data/mysql
          - /home/scsdm/services/mysql/mysql_slave1/data:/var/lib/mysql
          - /home/scsdm/services/mysql/mysql_slave1/logs:/var/log/mysql
          - /home/scsdm/services/mysql/mysql_slave1/conf/my.cnf:/etc/mysql/my.cnf
        privileged: true
        command: ['mysqld','--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci','--default-time-zone=+08:00']
      	entrypoint: bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    配置
    mkdir -p /home/scsdm/services/mysql/mysql_slave1/conf
    vi /home/scsdm/services/mysql/mysql_slave1/conf/my.cnf
    
    • 1
    • 2
    !includedir /etc/mysql/conf.d/ 
    !includedir /etc/mysql/mysql.conf.d/
    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    default-time-zone=+08:00
    max_connections=1000
    
    # 开启binlog
    log-bin=mysql-bin
    log-bin-index=mysql-bin.index
    # 服务器唯一id,默认值1
    server-id=2
    max_binlog_size=1G
    max_binlog_cache_size=1G
    # 设置日志格式,默认值ROW
    binlog_format=mixed
    expire_logs_days=7
    # 开启慢查询
    slow_query_log=1
    long_query_time=2
    slow_query_log_file=/data/mysql/slow.log
    # 错误日志
    log_error=/var/log/mysql/error.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    启动从服务器
    cd /home/scsdm/services/mysql
    # my.cnf 权限不能是777,会被忽略
    chmod 644 /home/scsdm/services/mysql/mysql_slave1/conf/my.cnf
    docker-compose up -d
    
    • 1
    • 2
    • 3
    • 4
    进入容器
    #进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码
    docker exec -it mysql-slave1 env LANG=C.UTF-8 /bin/bash
    #进入容器内的mysql命令行
    mysql -uroot -p
    
    • 1
    • 2
    • 3
    • 4

    照片。,

    配置主从
    # 配置主Mysql地址
    CHANGE MASTER TO MASTER_HOST='192.168.56.100', 
    # 配置主Mssql创建的用于备份的用户名和密码和端口
    MASTER_USER='slave',MASTER_PASSWORD='hancloud@1234', MASTER_PORT=3306,
    # 配置主Mssql的binlog日志名称和当前所在位置(上面记录的位置)
    MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=939; 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    启动从机复制功能
    START SLAVE;
    
    -- 查看状态(不需要分号)
    SHOW SLAVE STATUS\G
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    关闭主从复制
    -- 在从机上执行。功能说明:停止I/O 线程和SQL线程的操作。
    stop slave; 
    
    -- 在从机上执行。功能说明:用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件。
    reset slave;
    
    -- 在主机上执行。功能说明:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。
    -- 用于第一次进行搭建主从库时,进行主库binlog初始化工作;
    reset master;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    测试同步

    主Mysql中创建数据

    CREATE DATABASE mcp_manager;
    USE mcp_manager;
    CREATE TABLE t_user (
     id BIGINT AUTO_INCREMENT,
     uname VARCHAR(30),
     PRIMARY KEY (id)
    );
    INSERT INTO t_user(uname) VALUES('xiaohong');
    INSERT INTO t_user(uname) VALUES('xiaoming');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    查看数据库

    在这里插入图片描述

    精简版本(离线部署)

    1、拷贝离线文件

    将mysqlPackge分别拷贝到主从服务器下的mkdir -p /home/scsdm/services/mysql

    mkdir -p /home/scsdm/services/mysql
    cd /home/scsdm/services/mysql
    
    • 1
    • 2

    2、开始安装

    主服务器
    启动主节点
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --list-all
    systemctl restart docker
    cd /home/scsdm/services/mysql
    docker load -i /home/scsdm/services/mysql/mysqlPackage/mysql_5_7_23.tar.gz
    cp -r /home/scsdm/services/mysql/mysqlPackage/master/docker-compose.yml /home/scsdm/services/mysql/docker-compose.yml 
    mkdir -p /home/scsdm/services/mysql/mysql_master/conf
    cp -r /home/scsdm/services/mysql/mysqlPackage/master/my.cnf /home/scsdm/services/mysql/mysql_master/conf/my.cnf 
    # my.cnf 权限不能是777,会被忽略
    chmod 644 /home/scsdm/services/mysql/mysql_master/conf/my.cnf
    docker-compose up -d
    docker logs -f mysql-master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    出现一下内容执行下一步

    在这里插入图片描述

    主节点配置用户,记录mysql-bin的位置
    #进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码
    docker exec -it mysql-master env LANG=C.UTF-8 /bin/bash
    #进入容器内的mysql命令行
    mysql -uroot -phancloud1234!
    
    -- 创建slave用户
    CREATE USER 'slave'@'%';
    -- 设置密码
    ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'hancloud@1234';
    -- 授予复制权限
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
    -- 刷新权限
    FLUSH PRIVILEGES;
    
    SHOW MASTER STATUS;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    从服务器
    启动从节点
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --list-all
    systemctl restart docker
    cd /home/scsdm/services/mysql
    docker load -i /home/scsdm/services/mysql/mysqlPackage/mysql_5_7_23.tar.gz
    \cp -r /home/scsdm/services/mysql/mysqlPackage/slave/docker-compose.yml /home/scsdm/services/mysql/docker-compose.yml 
    mkdir -p /home/scsdm/services/mysql/mysql_slave1/conf
    \cp -r /home/scsdm/services/mysql/mysqlPackage/slave/my.cnf /home/scsdm/services/mysql/mysql_slave1/conf/my.cnf 
    # my.cnf 权限不能是777,会被忽略
    chmod 644 /home/scsdm/services/mysql/mysql_slave1/conf/my.cnf
    docker-compose up -d
    docker logs -f mysql-slave1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    出现一下内容执行下一步

    在这里插入图片描述

    从节点配置用户,配置mysql-bin的位置
    #进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码
    docker exec -it mysql-slave1 env LANG=C.UTF-8 /bin/bash
    #进入容器内的mysql命令行
    mysql -uroot -phancloud1234!
    # 配置主Mysql地址
    CHANGE MASTER TO MASTER_HOST='192.168.56.100', 
    # 配置主Mssql创建的用于备份的用户名和密码和端口
    MASTER_USER='slave',MASTER_PASSWORD='hancloud@1234', MASTER_PORT=3306,
    # 配置主Mssql的binlog日志名称和当前所在位置(上面记录的位置)
    MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=939; 
    START SLAVE;
    
    -- 查看状态(不需要分号)
    SHOW SLAVE STATUS\G
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    脚本模式

    tar -zcvf mysqlPackage.tar.gz ./mysqlPackage
    
    • 1

    脚本文件地址 :

    链接:https://pan.baidu.com/s/1ecuOZ1VsTP2ephkGEObfqQ
    提取码:1234

    前提:

    • docker docker-compose 环境
    • 服务器之间免密登录
    1、上传

    将文件mysqlPackage.tar.gz上传到服务器上

    2、解压
    tar -xzvf mysqlPackage.tar.gz
    
    • 1
    3、修改配置

    修改mysqlPackage文件夹里面的install.conf配置

    #安装之前需要配置如下信息
    masterIp="192.168.56.100"
    salveIp="192.168.56.101"
    base_dir="/home/scsdm/services/mysql"
    
    • 1
    • 2
    • 3
    • 4
    • masterIp: 主节点ip
    • salveIp: 从节点ip
    • base_dir: 安装的根目录
    4、开始执行
    cd mysqlPackage
    chmod +x install.sh
    ./install.sh
    
    • 1
    • 2
    • 3

    安装过程中如有停顿等待输入,输入yes即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmQfK62C-1667368038461)(imgs/image-20221101180610369.png)]

    5、检查是否安装是否成功

    (1)查看日志出现下面的代表成功

    Slave_SQL_Running: Yes

    Slave_IO_Running: Yes

    (2)在从服务器执行下面的命令查看

    docker exec -i mysql-slave1 bash -c "mysql -uroot -phancloud1234! -e \"SHOW SLAVE STATUS\G\"" | grep "Slave_SQL_Running:"
    docker exec -i mysql-slave1 bash -c "mysql -uroot -phancloud1234! -e \"SHOW SLAVE STATUS\G\"" | grep "Slave_IO_Running:"
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    蓝海彤翔亮相2023新疆网络文化节重点项目“新疆动漫节”
    深度学习 精选笔记(4)线性神经网络-交叉熵回归与Softmax 回归
    Linux中信号量源码的分析
    springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】
    入门电机系列之2驱动器
    【无标题】
    mybatisplus savebatch 多数据源时候,sqlSessionFactory 不正确踩坑记录。
    Python开发技术—函数设计3
    think-queue安装与使用
    【计算机网络】HTTP 重定向
  • 原文地址:https://blog.csdn.net/qq_36120342/article/details/127650187