zoukankan      html  css  js  c++  java
  • MySQL主从复制配置

    环境

    • CentOS 7.5
    • Docker 1.13.1
    • MySQL 8.0.16

    基于以上环境启动三个mysql容器,一个为master,二个为slave

    master和slave使用的mysql版本是完全一致的,未测试不同版本的mysql

    配置master

    编辑配置文件

    编辑master的配置文件my.cnf

    $ vim /usr/mysql/conf/my.cnf
    

    [mysqld]下添加如下内容:

    ## 同一局域网内要注意唯一(一般设置为ip地址最后一位)
    
    server-id=100
    
    ## 开启二进制日志功能,名字可以随便取
    
    log-bin=mysql-bin
    

    重启master容器

    保存配置文件后,重新启动master容器

    $ docker restart 容器名称/容器ID
    

    创建同步用户并授权

    • 进入master容器
    $ docker exec -it mysql-master bash
    
    • 创建同步用户并授权
    $ mysql > CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    
    $ mysql> ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    
    $ mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    
    $ mysql> flush privileges;
    
    

    配置slave

    修改配置文件

    与master一样,修改slave的配置文件my.cnf,在[mysqld]下添加以下内容

    server-id = 102
    
    log-bin=mysql-slave-bin
    
    ## relay_log配置中继日志,日志名字可以随便取
    
    relay_log=edu-mysql-relay-bin
    

    重启slave容器

    $ docker restart 容器名称/容器ID
    

    按照以上步骤操作另外一个slave容器

    链接master和slave

    • 查询master状态,并记录必要参数

    进入master容器

    $ docker exec -it mysql-master bash
    

    进入mysql

    $ mysql -uroot -p
    

    查询master状态

    # mysql > show master status;
    

    查询结果如下所示

    记录File字段和Position字段的值,后面会使用到。

    • 连接master和slave

    进入slave容器中,进入mysql后,执行下面所述的命令

    mysql > change master to master_host='master Ip地址', master_user='slave', master_password='1234', master_port=3306, 
    master_log_file='mysql-bin.000001', master_log_pos= 720, master_connect_retry=30;
    

    参数解释:

    master_host : master容器所在的宿主机ip地址

    master_user :同步用户,前面在master中创建的用户

    master_password : 同步用户密码,前面在master中创建的用户密码

    master_port : master数据库端口号

    master_log_file : master数据库日志文件,前面查询master状态时记录的参数值

    master_log_pos : master日志文件位置,前面查询master状态时记录的参数值

    master_connect_retry : master和slave连接重试时间

    • 启动slave

    在slave节点上执行以下命令启动slave

    $ mysql > start slave;
    
    • 在slave上查看主从状态
    $ mysql > show slave status G;
    

    查询结果如下所示:

    如上述图中所示,如果Slave_IO_RunningSlave_SQL_Running的值都是Yes,那么说明主从配置成功。

    异常情况处理

    如果查询slave状态时,Slave_IO_RunningSlave_SQL_Running的值出现不是Yes的情况,可以通过查看下图所示的参数的值来确认异常原因

    正常情况下Slave_SQL_Running_State的值如上图所示,异常情况下,该参数的值会显示异常原因,此时只需要根据异常提示去处理问题即可。

    在处理异常问题时,需要先停止主从,在从节点上执行下面的命令

    $ mysql > stop slave;
    

    问题处理完后,重新启动主从

    $ mysql > start slave;
    

    验证

    主从配置成功后,此时去操作主库,例如创建表,新增删除数据等,可以看到从库中进行了同样的操作。

  • 相关阅读:
    Extjs的学习及MIS系统实践应用(系列文章)
    Extjs的js函数
    【VS Code】使用技巧
    【算法技巧】算法技巧记录
    【踩坑记录】vs2017 git 版本控制问题
    【IDE】解决国内下载安装vs 过慢问题
    【c#基础】.Net编译器平台
    【查看IIS站点日志】
    【项目管理】人月神话
    【c#基础】反射、元数据和动态编程
  • 原文地址:https://www.cnblogs.com/ybyn/p/13698220.html
Copyright © 2011-2022 走看看