Mysql 主从同步配置

Mysql本身支持同步方案,使得数据在备份,恢复,容灾和负载均衡方面都有一些自带的能力;

  1. 同步模式: mysql的同步支持主主同步,主从同步,原理大同小异,只是主主同步适应场景更广,但也会引发更多的安全问题(比如同时修改时,主键自增的问题),官网推荐的同步架构方式(示例):
    Mysql 主从同步配置
  2. 执行方式: (数据变化记录在binlog中,使用binlog增量同步,每种方式的特点在这不展开聊)
    1. 基于语句同步,记录所有修改的语句(一些函数,触发器等不会生效)
    2. 基于行同步,记录所有变化
    3. 混合模式:语句+行
  3. 主从具体配置
    先上配置图
    Mysql 主从同步配置
    假设
    主机IP:1.2.3.4
    从机IP:5.6.7.8

    1. Master修改访问地址限制,注释下面一句
      bind-address = 127.0.0.1

    2. Master增加上图配置:

      1. server-id: mysql的id,确保整个架构中唯一;
      2. log_bin:binlog记录的位置;
      3. binlog_do_db:记录哪个数据库到binlog(也就是以该主机为master时能往外部同步的数据范围);
      4. 其他配置自行查找,不是必须
    3. Slave配置:
      1. server-id:mysql的id,确保整个架构中唯一;
      2. relay-log:中继日志地址
      3. log_bin:binlog记录的位置;
      4. binlog_do_db:记录哪个数据库到binlog
      5. replicate_do_db:同步的数据库(拉取的数据库)
      6. replicate_ignore_db:忽略的数据库
    4. Master 配置好以后,重启:
      sudo service mysql restart
    5. Master生成同步用户,生效
      GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
      FLUSH PRIVILEGES;
    6. Master 锁表,记录状态,导数据,释放锁(如果有镜像操作,可以替代该步骤,记录重启后的mysqlbin就可以了):
      锁表:FLUSH TABLES WITH READ LOCK;
      记录状态:SHOW MASTER STATUS;
      返回状态类似:

      mysql> SHOW MASTER STATUS;
      +——————+———-+————–+——————+
      | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +——————+———-+————–+——————+
      | mysql-bin.000001 | 12121 | test_mysql_replication | |
      +——————+———-+————–+——————+
      1 row in set (0.00 sec)
      记录下文件和位置(后面需要配置到从机)

      文件导出:mysqldump -u root -p --opt test_mysql_replication > test_mysql_replication.sql
      解锁:UNLOCK TABLES;QUIT;

    7. Slave导入数据(至此,开始操作Slave机器):
      建库:CREATE DATABASE test_mysql_replication;
      导数据:mysql -u root -p test_mysql_replication < /path/to/test_mysql_replication.sql

    8. Slave重启:
      sudo service mysql restart
    9. Slave开启同步(开始拉取数据):
      配置:主机地址,同步用户,开始同步的log日志位置:CHANGE MASTER TO MASTER_HOST='1.2.3.4', MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=12121;
      开启slave:START SLAVE;
    10. Slave检测:
      正常情况下,slave已经开始正常运行了,可是用命令查看状态:
      SHOW SLAVE STATUS\G