Docker中实现MySql8.0+主从复制

MySql主从复制:

写在开头的话, docker实现Mysql主从复制还是比较简单的,记录一次踩坑过程

  1. 首先用docker安装两个数据库Master和slave

    docker run -p 3301:3306 --name master-mysql -e MYSQL_ROOT_PASSWORD=XXXXXXXX mysql:latest
    docker run -p 3302:3306 --name slave-mysql -e MYSQL_ROOT_PASSWORD=XXXXXXXX mysql:latest
    
  2. 修改容器内的配置文件,重启两个docker实例

    这里个人觉得最好还是将docker内的配置文件挂载到本地(需要好好研究一下); 目前我使用的方式是直接使用

    docker exec -it  容器Id  /bin/bash
    
    # 然后进入对应的目录
    cd /etc/mysql
    
    apt-get update
    
    apt-get install vim
    
    vim my.cnf
    
    docker restart 容器id
    

    进去之后使用键盘上的Insert键,进入插入模式,然后保存退出。

    具体在容器中修改的内容是

    主数据库:

    server-id=1
    log-bin=mysql-master-bin
    

    从数据库:

    server-id=2
    log-bin=mysql-slave-bin
    relay_log=edu-mysql-relay-bin
    

    这一段配置使用的是https://www.cnblogs.com/songwenjie/p/9371422.html

    之前试过挂在本地文件配置,但是发现一直出现server-id重复的问题,但是配置文件里面又不是一样的,最后确认一遍后还真是相同的。具体使用的命令可以百度去查。

  3. 在Master主数据库中创建一个有对应权限的User

    在这里之后,有多种选择;如果觉得命令行难记,可以选择Navicate等远程连接工具直接可视化操作; 当然也可以选择命令行,但是命令行如果你百度搜索的话可能会遇到一些问题。

    Mysql: 5.7 和 Mysql: 8.0 (因为我使用的是8.0之后的版本),8.0版本必须先创建用户,然后授权。不能像Mysql:5.7一样直接操作。

    这一块我发现对于Mysql整个权限体系还是要有一定了解的,在这个实践过程中,我在CentOS7中使用到一些命令行如下(使用环境均为Mysql8.0版本,不知道之前版本是不是会有坑):

    写法一: mysql -uroot -pXXXXXX
    写法二: mysql -u root -pXXXXXX
    写法三: ->mysql -u root -p
           ->Enter password: XXXXXX
    # % 表示所有类型的IP
    create User '登陆用户名':'%' Identified By '登陆密码'
    # 授权这两个 REPLICATION SLAVE, REPLICATION CLIENT
    grant REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '登陆用户名'@'%';
    
  4. 在slave从数据库中配置链接信息

    这里基本上就是最后一步了。其中最核心的一条设置就是(连成一行):

    a) master_log_file 与 master_log_pos配置值非常容易变化,一旦主数据发生修改,master_log_pos就会更改,所以,最好不要随意修改主数据库相关重要信息。很容易掉进去,不过日志还是挺详细的。

    b) master_host与master_port中还是可以选择公网链接方式也可以是内网链接方式。

    公网链接方式注意开对应端口的防火墙,

    内网链接方式必须通过命令

    docker inspect 容器ID
    

    会返回一段JSON文件,其中会包含对应的IP地址。

    change master to 
    master_host='172.18.0.2', 
    master_port=3306, 
    master_user='root',
    master_password='XXXXXXXX', 
    master_log_file='mysql-master-bin.000001',
    master_log_pos=1574,
    master_connect_retry=30;
    

    完成配置后,然后将使用下面三个方式启动,修改,查看对应的主从状态:

    # 停止从服务器
    STOP SLAVE;
    # 启动从服务器
    START SLAVE;
    # 查看从服务器状态
    show slave status;
    

    最后如果Slave_IO_Running , Slave_SQL_Runnin 均为Yes,成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值