• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    docker实现mysql主从复制的示例代码

    一、概述

    1、原理

    主从流程图

    2、实现

    主库:192.168.3.13:3310从库:192.168.3.14:3310二、创建master主库进入服务器192.168.3.13

    1、安装镜像

    docker pull mysql:8.0.26

    2、新建目录

    mkdir -p /home/apps/mysql-master/{config,log,data}

    3、创建并启动

    docker run -d --name mysql-master \
    
    --restart=always \
    
    --privileged=true \
    
    -p 3310:3306 \
    
    -v /home/apps/mysql-master/config:/etc/mysql/conf.d \
    
    -v /home/apps/mysql-master/log:/var/log/mysql \
    
    -v /home/apps/mysql-master/data:/var/lib/mysql \
    
    -e MYSQL_ROOT_PASSWORD=123456 \
    
    mysql:8.0.26

    4、新增/修改master基本配置

    vim /home/apps/mysql-master/config/my.cnf

    添加以下内容

    [client]
    default-character-set=utf8
     
    [mysql]
    default-character-set=utf8
     
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve

    三、创建Slave实例

    进入服务器192.168.3.14

    1、同上面操作一样

    # 创建目录
    mkdir -p /home/apps/mysql-slave-01/{config,log,data}
    
    # 启动容器
    docker run -d --name mysql-slave-01 \
    
    --restart=always \
    
    --privileged=true \
    
    -p 3310:3306 \
    
    -v /home/apps/mysql-slave-01/config:/etc/mysql/conf.d \
    
    -v /home/apps/mysql-slave-01/log:/var/log/mysql \
    
    -v /home/apps/mysql-slave-01/data:/var/lib/mysql \
    
    -e MYSQL_ROOT_PASSWORD=123456 \
    
    mysql:8.0.26
    
    
    # 修改Slave基本配置
    vim /home/apps/mysql-slave-01/config/my.cnf
    
    # 添加以下内容
    [client]
    default-character-set=utf8
     
    [mysql]
    default-character-set=utf8
     
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve

    四、主从配置

    1、添加master配置

    vim /home/apps/mysql-master/config/my.cnf
    server_id=1
    
    # 开启二进制日志
    log-bin=mysql-bin
    read-only=0
    
    # 需要同步的数据库
    binlog-do-db=rapid-cloud
    binlog-do-db=rapid-cloud-test
    
    # 需要忽略的数据库
    replicate-ignore-db=mysql
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema

    2、重启容器

    docker restart mysql-master

    3、添加Slave配置

    vim /home/apps/mysql-slave-01/config/my.cnf
    
    server_id=2
    log-bin=mysql-bin
    read-only=1
    binlog-do-db=rapid-cloud
    binlog-do-db=rapid-cloud-test
    
    replicate-ignore-db=mysql
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema

    4、重启容器

    docker restart mysql-slave-01

    5、master添加帐号,用来同步的用户

    # 进入容器
    docker exec -it mysql-master /bin/bash
    
    # 进入主库mysql数据库
    mysql -u root -p
    
    # 授权root可以远程访问( 主从无关,为了方便我们远程连接mysql)
    
    # 授权远程
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    
    # 刷新
    flush privileges;
    
    
    # 创建backup用户
    
    # 应先创建新用户
    create user 'backup'@'%' identified by '123456';
    
    # 执行授权
    grant all privileges on *.* to 'backup'@'%';
    
    # 刷新
    flush privileges;
    
    # 授权远程
    ALTER USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    
    # 刷新
    flush privileges;
    
    # 查看主库状态
    show master status;

    6、在从库里设置主库连接

    # 进入容器
    docker exec -it mysql-slave-01 /bin/bash
    
    # 进入主库mysql数据库
    mysql -u root -p
    
    change master to master_host='192.168.3.13',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3310;

    7、启动从库同步

    先将主库的数据复制一份到从库,包含表结构及数据

    将主库binlog清除一下,这样它的位置就从0开始了

    purge master logs to'mysql-bin.000001';

    开启同步

    # 开始同步
    start slave;
    
    # 停止同步
    # stop slave;
    
    # 查看同步状态
    show slave status\G;

    8、错误排查

    如果无法实现主从同步,可以通过以下排查

    总结:

    主从数据库在自己配置文件中声明需要同步哪个数据库,忽略哪个数据库等信息。并且server-id不能一样主库授权某个账号密码来同步自己的数据从库使用这个账号密码连接主库来同步数据

    五、参考

    https://www.cnblogs.com/heian99/p/12104189.html

    https://blog.csdn.net/lilygg/article/details/98187015

    binlog清除:https://www.cnblogs.com/kiko2014551511/p/11532426.html

    到此这篇关于docker实现mysql主从复制的示例代码的文章就介绍到这了,更多相关docker mysql主从复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    上一篇:基于Docker+Selenium Grid的测试技术应用示例代码
    下一篇:docker容器详细讲解如何精简镜像减小体积
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    docker实现mysql主从复制的示例代码 docker,实现,mysql,主从,复制,