zoukankan      html  css  js  c++  java
  • MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】

    生产主主复制(A<--->B),和灾备主从复制(B--->C)。当生产出现问题时,数据写入切换到灾备数据库,待生产恢复后,将灾备回写到生产。步骤如下:

    1、灾备与生产其中一台建立主主复制,这样生产的那台就成了多源复制

    (A<--->B<--->C)

    2、在业务闲时,停止web应用,使用户没有连接,或者锁表

    3、将业务切回生产

    主主复制架构的实现

     
    主主复制架构,可以实现像主从服务器进行写操作,也就是说一个是另一个的主服务器,也是另一个的从服务器。
    由于我们上边已经知道172.16.30.6为172.16.30.5的从服务器了,故我们只需知道172.16.30.5为172.16.30.6的从服务器即可。
     
    172.16.30.5服务器的配置:
    # vim /etc/my.cnf
    在[mysqld]中添加:
    auto-increment-increment = 2
    auto-increment-offset = 1
     
    如果想实现 主-从(主)-从 这样的链条式结构,需要设置:
    log-slave-updates      只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。
     
    以下这步重启是为了是参数生效,MySQL5.7版本已支持在线修改参数,在线修改参数后需要在my.cnf中添加配置即可
     
    重启服务
    # service mysqld restart
     
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000004 |      107 |              |                  |
    +------------------+----------+--------------+------------------+
     
     
    172.16.30.6服务器的配置:
    新建一个用于复制数据的用户:
    mysql> grant replication client,replication slave on *.* to repl@'172.16.30.5' identified by '123456';
     
    # vim /etc/my.cnf   
    在[mysqld]中添加:
    log-bin = mysql-bin
    auto-increment-increment = 2
    auto-increment-offset = 2
     
    重启服务:
    # service mysqld restart
     
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      107 |              |                  |
    +------------------+----------+--------------+------------------+
     
    主从服务器接下来指定对另一台服务器为自己的主服务器即可:
    172.16.30.6服务器的指向:
    mysql> stop slave;
    mysql> change master to master_host='172.16.30.5',master_user='repl',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=107;
    开启从服务进程:
    mysql> start slave;
     
    172.16.30.5服务器的指向:
    mysql> change master to master_host='172.16.30.6',master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=107;
    开启从服务进程:
    mysql> start slave;
     
    在172.16.30.6和172.16.30.5服务器上分别查看从服务进程的运行状态:
    mysql> show slave statusG
    如果出现如下两行,则说明工作正常:
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
     
    如果master status是变的,可以用以下锁表的方法
     
    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |     4136 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
     
    3)执行主张同步操作
    先在slave数据库上做同步master的设置。(确保slave上要同步的数据,提前在master上存在。最好双方数据保持一致)
    mysql> unlock tables;     //先解锁,将对方数据同步到自己的数据库中
    mysql> slave stop;
    mysql> change master to master_host='182.148.15.238',master_user='slave',master_password='slave@123',master_log_file='master-bin.000001',master_log_pos=1970;
     
    mysql> start slave;
    mysql> show slave status G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 182.148.15.238
                      Master_User: slave
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 1970
                   Relay_Log_File: mysql-relay-bin.000003
                    Relay_Log_Pos: 750
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                ..................
     
    这样就实现了slave->master的同步环境。
     
     
    再在master数据库上做同步slave的设置。(确保slave上要同步的数据,提前在master上存在。最好双方数据保持一致)
    mysql> unlock tables;
    mysql> slave stop;
    mysql> change master to master_host='182.148.15.237',master_user='slave',master_password='slave@123',master_log_file='master-bin.000001',master_log_pos=4136;
     
    mysql> start slave;
    mysql> show slave status G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 182.148.15.237
                      Master_User: slave
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 4136
                   Relay_Log_File: mysql-relay-bin.000003
                    Relay_Log_Pos: 750
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                ..................
     
    这样就实现了master->slave的同步环境。至此,主主双向同步环境已经实现!
     
    参考:
    mysql主从复制,半同步,主主复制架构的实现-佳-51CTO博客 http://blog.51cto.com/leejia/831772
    Mysql主从同步(1)-主从/主主环境部署梳理 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/6256603.html
     
    异地灾备为主时,恢复时可以使用先将生产设置为灾备的从,搭建成多源复制
    MySQL 5.7的多源复制 - GoogSQL - 博客园 https://www.cnblogs.com/xuanzhi201111/p/5151666.html
  • 相关阅读:
    Interrupt、Interrupted、IsInterrupted
    ReentrantLock
    tcp粘包、拆包
    jstat 分析应用垃圾回收状况
    CopyOnWriteArrayList
    storm基础概念
    余弦距离
    websocket
    awk
    sed
  • 原文地址:https://www.cnblogs.com/paul8339/p/8397720.html
Copyright © 2011-2022 走看看