天天看点

MySQL 基于 binlog 的主从复制

从服务器读取 主服务器的 binlog 日志,进行解析后写入到从服务器的 relay log 中继日志中,再被 sql线程执行命令到数据库中

  • Log Dump Thead : master 生成binlog日志的线程
  • I/O Thread : 同步master 的binlog日志到slave 的中继日志中
  • SQL Thread: 解析SQL入库

默认异步复制:存在问题是多个slave进行复制时,会存在延迟的问题

半同步复制: 当一个slave 将binlog日志写入到 relay log 中继日志中时,就返回给master

全同步复制:存在问题是master 的事务操作慢。

Master

  1. 连接MySQL 并创建主从复制的用户
    create user masterSync;
               
  2. 给新建用户赋权
    GRANT REPLICATION SLAVE,FILE ON *.* TO 'masterSync'@'%' IDENTIFIED BY 'masterSync';
               
  3. 指定服务ID,开启binlog日志记录,在 /etc/my.cnf 中加入如下配置
    [mysqld]
    # 通常设置为ip
    server-id=135
    # 记录到 mysql-bin 文件中
    log-bin=mysql-bin
    # 同步的指定db 与binlog_ignore_db(指定不同步的db) 互斥,
    binlog-do-db=demo
    binlog-do-db=db_store
               
    重启MySQL
    service mysqld restart
               
  4. 通过命令查看Master db状态.
    SHOW MASTER STATUS;
               

Slave

  1. 指定服务器ID,指定同步的binlog存储位置,在 my.cnf中加入如下配置
    server-id=134
    relay-log=slave-relay-bin
    relay-log-index=slave-relay-bin.index
    read_only=1
    # 复制的db
    replicate_do_db=demo
    replicate_do_db=db_store
               
  2. 重启MySQL
service mysqld restart
           
  1. 接入slave的mysql服务,开始复制
    change master to master_host='192.168.45.135',master_port=3306,master_user='masterSync',master_password='masterSync',master_log_file='mysql-bin.000006',master_log_pos=462; 
    start slave;
               
  2. 查看slave服务器状态
    show slave status\G