• mysql5.7.33主从复制


    mysql5.7.33主从复制

    1. 在两台数据库中分别创建数据库

     mysql>create database khtdb;
    建立binlog目录,mkdir binlog
    

    2. 在主服务器master进行如下配置:

    vim my.cnf
    #mysql的服务器分配id,在启用主从和集群的时候必须指定,每个节点必须不同
    server-id = 11
    #开启Binlog日志
    log_bin=mysql-bin
    #日志自动过期清理天数
    expire_logs_days = 90
    #binlog保存路径
    log-bin=/kht/mysql5.7/binlog/logbin
    #STATEMENT模式(SBR)
    #在主服务器上执行的SQL语句,在从服务器上执行同样的语句,MySQL默认采用基于语句的复制,效率比较高。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)。
    #ROW模式(RBR)
    #row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍,不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
    #MIXED模式(MBR)
    #以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
    binlog_format=ROW
    #同步的数据库名称,指定mysql的binlog日志记录哪个db
    binlog-do-db=khtdb
    

    2.2 重启主服务器master并查看状态

    systemctl restart mysql

    #查看master的状态
    mysql> show master status;
    +---------------+----------+--------------+------------------+------------------                                                                                           -+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                                                                                            |
    +---------------+----------+--------------+------------------+------------------                                                                                           -+
    | logbin.000001 |      154 | khtdb        |                  |                                                                                                              |
    +---------------+----------+--------------+------------------+------------------
    

    3. 从服务器slave的配置

    vim my.cnf
    #mysql的服务器分配id,在启用主从和集群的时候必须指定,每个节点必须不同
    server-id=12
    #开启Binlog日志
    log_bin=mysql-bin
    #日志自动过期清理天数
    expire_logs_days = 90
    log-bin=/kht/mysql5.7/binlog/logbin
    binlog_format=ROW
    #启用中继日志
    relay-log=/kht/mysql5.7/log/mysql-relay
    

    3.1 主主复制(先创建用户)

    #参数是在slave上配置,指定slave要复制哪个库
    replicate-do-db=khtdb
    log-slave-updates
    #提高效率,将不必要的资源不写入二进制文件
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    #防止主键冲突,数据的id号从1开始,每次+2,即1,3,5....
    auto-increment-increment=2
    auto-increment-offset=1
    

    3.2 配置从服务器slave登录主服务器的账号授权(master上执行)

    --授权操作
    create user 'slave'@'host' identified by 'kht123';
    grant replication slave on *.* to 'slave'@'%' identified by 'kht123';
    --刷新权限
    flush privileges;
    

    4. 重启从服务器slave并连接主服务器master

    systemctl restart mysql

    mysql> change master to master_host='192.168.2.129',master_user='slave',master_password='kht123',master_port=3306,master_log_file='logbin.000001',master_log_pos=154;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    #启动slave
    mysql>start slave;
    #查看slave的状态
    mysql>show slave statusG(注意没有分号)
    #注意Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
    

    5. 若虚拟机是克隆的,则同一个克隆的mysql会产生UUID冲突,可以从日志中查看,
    此时会造成Slave_IO_Running: NO

    查找auto.cnf修改uuid即可:find -name auto.cnf
    #重启mysql
    service mysql restart
    #停止链路
    mysql>stop slave;
    #重置链路
    mysql>reset slave;
    #启动链路
    mysql>start slave;
    #查看链路
    mysql>show slave status G
    
  • 相关阅读:
    HDU 4393 Throw nails(贪心加模拟,追及问题)
    【Add Two Numbers】
    【Single Num II】cpp
    【Single Number】cpp
    【Candy】cpp
    【Gas Station】cpp
    【Set Matrix Zeros】cpp
    【Gray Code】cpp
    【Climbing Stairs】cpp
    【Plus One】cpp
  • 原文地址:https://www.cnblogs.com/khtt/p/15211739.html
Copyright © 2020-2023  润新知