zoukankan      html  css  js  c++  java
  • mysql数据库互为主从配置

    mysql主从配置小记:

    共有四台机器:A(10.1.10.28),B(10.1.10.29),C(10.1.10.30),D(10.1.10.31)。
    配置后结果:A-C互为主从,B为A的slave,D为C的slave。


    0)准备工作

    在四台机器上面安装好mysql后,创建用于同步的账号。

    添加账户:

    INSERT INTO user (Host,User, Password,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES('%','test',password('test'),'Y','Y','Y','Y','Y','Y');
    

     
    刷新数据库:

    FLUSH PRIVILEGES;
    


    1)配置A-C互为主从

    修改A配置文件为:

    server-id   = 1
    replicate-do-db=test
    replicate-do-db=test_admin
    log-bin=mysql-bin
    log-slave-updates
    replicate-wild-do-table=test.%
    replicate-wild-do-table=test_admin.%
    binlog-ignore-db=mysql
    slave-skip-errors=all
    


    修改C配置文件为:

    server-id   = 3
    binlog-do-db=test
    binlog-do-db=test_admin
    log-bin=mysql-bin
    log-slave-updates
    replicate-wild-do-table=test.%
    replicate-wild-do-table=test_admin.%
    binlog-ignore-db=mysql
    slave-skip-errors=all
    


    重启mysql是配置生效

    将A设置为主:
    停止同步:

    slave stop;

    清空服务器master日志:

    reset master;
    


    授权同步账号:

    GRANT REPLICATION SLAVE ON *.* TO 'test'@'%' IDENTIFIED BY 'test';
    


    刷新授权:

    flush privileges;
    

     
    锁定数据库:

    flush tables with read lock;
    

     
    将C设置为从:
    停止同步:

    slave stop;
    

     
    配置同步信息:

    CHANGE MASTER TO MASTER_HOST='10.1.10.28', MASTER_USER='test', MASTER_PASSWORD='test', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
    

     
    将C设置为主:
    停止同步:

    slave stop;
    


    清空服务器master日志:

    reset master;
    

     
    授权同步账号:

    GRANT REPLICATION SLAVE ON *.* TO 'test'@'%' IDENTIFIED BY 'test';
    

     
    刷新授权:

    flush privileges;
    


    锁定数据库:

    flush tables with read lock;
    

     
    将A设置为从:
    停止同步:

    slave stop;
    

     
    配置同步信息:

    CHANGE MASTER TO MASTER_HOST='10.1.10.30', MASTER_USER='test', MASTER_PASSWORD='test', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
    

     
    2)将B设置为A的从

    server-id   = 2
    replicate-do-db=test
    replicate-do-db=test_admin
    log-bin=mysql-bin
    log-slave-updates
    replicate-wild-do-table=test.%
    replicate-wild-do-table=test_admin.%
    binlog-ignore-db=mysql
    slave-skip-errors=all
    

     

    重启mysql服务

    停止同步:

    slave stop;
    

     
    配置同步信息:

    CHANGE MASTER TO MASTER_HOST='10.1.10.28', MASTER_USER='test', MASTER_PASSWORD='test', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
    

     
    启动同步:

    slave start;
    

     
    3)将D设置为C的从

    server-id   = 4
    replicate-do-db=test
    replicate-do-db=test_admin
    log-bin=mysql-bin
    log-slave-updates
    replicate-wild-do-table=test.%
    replicate-wild-do-table=test_admin.%
    binlog-ignore-db=mysql
    slave-skip-errors=all
    

     
    重启mysql服务

    停止同步:

    slave stop;
    

     
    配置同步信息:

    CHANGE MASTER TO MASTER_HOST='10.1.10.30', MASTER_USER='test', MASTER_PASSWORD='test', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
    

     
    启动同步:

    slave start;
    

     完成之后可以创建添加数据测试一下是否可以。

    下面是常见错误处理:

    1)
    change master导致的:
                  Last_IO_Error: error connecting to master 'repl1@IP:3306' - retry-time: 60  retries
    
    2)    
    在没有解锁的情况下停止slave进程:
         mysql> stop slave;
    ERROR 1192 (HY000): Can't execute the given command because you have active locked tables or an active transaction
    
    3)
    change master语法错误,落下逗号
    mysql> change master to
        -> master_host='IP'
        -> master_user='USER',
        -> master_password='PASSWD',
        -> master_log_file='mysql-bin.000002',
        -> master_log_pos=106;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'master_user='USER',
    master_password='PASSWD',
    master_log_file='mysql-bin.000002' at line 3
    
     
    4)
    在没有停止slave进程的情况下change master
    mysql> change master to master_host=‘IP', master_user='USER', master_password='PASSWD', master_log_file='mysql-bin.000001',master_log_pos=106;
    ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first
    
    
    5)
    A B的server-id相同:
    Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;
    these ids must be different for replication to work (or the --replicate-same-server-id option must be used on
    slave but this does not always make sense; please check the manual before using it).
    查看server-id
    mysql> show variables like 'server_id';
    手动修改server-id
    mysql> set global server_id=2; #此处的数值和my.cnf里设置的一样就行
    mysql> slave start;
    
    6)change master之后,查看slave的状态,发现slave_IO_running 为NO
    
  • 相关阅读:
    第三次随笔作业
    第二次随笔作业
    第一次随笔
    第四次随笔作业
    第三次随笔作业
    第二次随笔作业
    第一次博客
    第四次作业
    第三次作业(2)
    第二次随笔(修改版3)
  • 原文地址:https://www.cnblogs.com/ximu/p/2387521.html
Copyright © 2011-2022 走看看