目录

mysql 主从同步实战

主从同步

1. Master配置

  • vim /etc/my.cnf 添加以下bin_log配置

    #bin_log配置 
    log_bin=mysql-bin 
    server-id=1 
    sync-binlog=1 
    binlog-ignore-db=information_schema 
    binlog-ignore-db=mysql 
    binlog-ignore-db=performance_schema 
    binlog-ignore-db=sys
    #relay_log配置 
    relay_log=mysql-relay-bin 
    log_slave_updates=1 
    relay_log_purge=0
  • 重启服务 systemctl restart mysqld

  • 主库给从库授权

    grant replication slave on *.* to root@'%' identified by '123456'; 
    grant all privileges on *.* to root@'%' identified by '123456';
    flush privileges;
    
    //查看主库状态信息,例如master_log_file='mysql-bin.000007',master_log_pos=154 
    show master status;

2. Slave配置

  • 修改Slave的MySQL配置文件my.cnf,两台Slave的server-id分别设置为2和3

    #bin_log配置 
    log_bin=mysql-bin 
    #服务器ID,从库1是2,从库2是3 
    server-id=2 
    sync-binlog=1 
    binlog-ignore-db=information_schema 
    binlog-ignore-db=mysql 
    binlog-ignore-db=performance_schema 
    binlog-ignore-db=sys 
    #relay_log配置 
    relay_log=mysql-relay-bin 
    log_slave_updates=1 
    relay_log_purge=0 
    read_only=1
  • 重启服务 systemctl restart mysqld

  • 开启同步

    登录MySQL,在Slave节点的MySQL命令行执行同步操作,例如下面命令(注意参数与上面show master status操作显示的参数一致)

    change master to master_host='192.168.31.199',master_port=3306,master_user='root',master_password ='123456',master_log_file='mysql-bin.000007',master_log_pos=154; 
    # master_log_file 和 master_log_pos都是从 show master status取
    
    start slave; // 开启同步

接下来就可以测试了

半同步复制配置

1. master节点

  • 登录mysql 安装插件

    install plugin rpl_semi_sync_master soname 'semisync_master.so'; 
    show variables like '%semi%';
  • vim /etc/my.cnf

    # 自动开启半同步复制 
    set global rpl_semi_sync_master_enabled = ON;
    
    # 开启以后在配置文件中添加 每次重启就默认开启
    rpl_semi_sync_master_enabled=ON 
    rpl_semi_sync_master_timeout=1000
  • 重启服务 systemctl restart mysqld

2. Slave配置

  • 登录mysql, 执行以下命令

    install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
  • vim /etc/my.cnf

    # 自动开启半同步复制 
    rpl_semi_sync_slave_enabled=ON 
  • 重启服务

3. 测试半同步

  • show variables like ‘%semi%’;

  • cat /var/log/mysqld.log

  • 可以看到日志中已经启动半同步

    Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000005, 154)

并行复制配置

1. Master

  • show variables like ‘%binlog_group%’;

  • 设置参数

    set global binlog_group_commit_sync_delay=1000;
    set global binlog_group_commit_sync_no_delay_count=10;

2. Slave

  • 设置参数1

    show variables like '%slave_parallel%';
    
    #先停止
    stop slave;
    
    set global slave_parallel_type='LOGICAL_CLOCK';
    set global slave_parallel_workers=8;
    
    start slave;
    
    #最好写到配置文件, 因为重启后就失效了, 配置完要重启
    slave_parallel_type=LOGICAL_CLOCK
    slave_parallel_workers=8
    relay_log_info_repository=TABLE
  • 设置参数2

    show variables like '%relay_log%';
    
    #以下需要到my.cnf配置
    relay_log_recovery=1
  • 查看

    select * from performance_schema.replication_applier_status_by_worker;
    #可以查看到worker_id等

注意: 参数生效最好配置到my.conf中, 这样在重启的时候,可以继续生效