mysql主从同步

  • 主数据库mysql配置

    1
    2
    3
    4
    5
    6
    7
    8
    # 日志文件名
    log-bin = mysql-bin

    # 主数据库端ID号
    server-id = 1

    # 日志格式,建议mixed
    binlog-format = mixed
  • 创建同步账号

    1
    2
    3
    4
    5
    6
    7
    -- 创建slave帐号slave_account,密码123456
    grant replication slave on *.* to 'slave_account'@'192.168.1.%' identified by '123456';
    -- 更新数据库权限
    flush privileges;

    -- 查询master的状态
    show master status;
  • 从数据库mysql配置

    1
    2
    3
    4
    5
    # 日志文件名
    log-bin = mysql-bin

    # 从数据库端ID号
    server-id =2
  • 导入数据到从库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -- 在主库中导出数据
    -- 锁表
    flush tables with read lock;
    -- 导出数据
    mysqldump --all-databases -h192.168.1.27 -uroot -p > full.sql

    -- 查看master状态和记录需要同步的位置(执行同步是需要参考的数据)
    show master status;
    -- 不锁表
    UNLOCK TABLES;
  • 执行同步命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    -- 在从库中导入数据
    source full.sql

    -- 执行同步命令,设置主数据库ip,同步帐号密码,同步位置(参考`show master status`的结果进行填入)
    change master to master_host='192.168.1.27',master_user='slave_account',master_password='123456',master_log_file='mysql-bin.000023',master_log_pos=68034;

    -- 开启同步功能
    start slave;

    -- 检查从数据库状态
    show slave status\G;

    -- 设普通用户为只读权限
    set global read_only=1;
  • 其它命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- 停止主从同步(slave端)
    stop slave;

    -- 连接断开时,重新连接超时时间(slave端)
    change master to master_connect_retry=50;

    -- 开启主从同步(slave端)
    start slave;

    -- 取消普通用户只读权限(slave端)
    set global read_only=0;