zoukankan      html  css  js  c++  java
  • Mysql双向同步热备份设置

    1、环境描述。
    主机:103.241.49.137(A)
    主机:103.240.182.191(B)
    MYSQL 版本为5.1.11
    2、授权用户。(本人比较懒,直接用的root 跳过这一步)
    A:
    mysql> grant replication slave,file on *.* to 'backup_251'@'103.240.182.191' identified
    by '123456';
    Query OK, 0 rows affected (0.00 sec)

    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

    B:
    mysql> grant replication slave,file on *.* to 'backup_167'@'103.241.49.137' identified
    by '123456';
    Query OK, 0 rows affected (0.00 sec)

    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    然后都停止MYSQL 服务器。

    3、配置文件。
    在两个机器上的my.cnf,在windows下面就是my.ini文件了 里面都开启二进制日志 。

    找到[mysqld]这个结点,在下面增加以下内容

    vi /etc/my.cnf
    A:
    user = mysql
    log-bin=mysql-bin
    server-id = 1
    binlog-do-db=test (需要同步的库,如果要同步整个数据库,就把这句去掉)
    binlog-ignore-db=mysql (不需要同步的库)
    replicate-do-db=test
    //log-slave-updates 为了让slave也能充当master,写relay-log的时候也会写到bin-log
    replicate-ignore-db=mysql
    slave-skip-errors=all #出现错误后忽略,如果不加这个,出现任何错误,同步进程会终止
    //master-connect-retry=60 断点重新连接时间
    sync_binlog=1
    auto_increment_increment=2 (因为是双向,自动增加的id会有冲突,把步长改为2 初始设为1)
    auto_increment_offset=1


    ///////////////////////////////////////////
    server-id = 1
    log-bin=/tmp/logbin/mysql-bin
    binlog-do-db =sixfj
    binlog-ignore-db=mysql
    replicate-do-db=sixfj
    replicate-ignore-db=mysql
    slave-skip-errors=all
    sync_binlog=1
    auto_increment_increment=2
    auto_increment_offset=1


    // linux关闭MySQL的命令
    /usr/local/mysql/bin/mysqladmin -uroot -p shutdown
      // linux启动MySQL的命令
    /usr/local/mysql/bin/mysqld_safe &


    /usr/local/mysql/bin/mysql -uroot -pgdczxw2008


    grant replication slave on *.* to czxync@'103.240.182.191' identified by 'aa12345q';

    B:
    user = mysql
    log-bin=mysql-bin
    server-id = 2
    binlog-do-db=test (需要同步的库,如果要同步整个数据库,就把这句去掉)
    binlog-ignore-db=mysql (不需要同步的库)
    replicate-do-db=test
    replicate-ignore-db=mysql


    slave-skip-errors=all
    sync_binlog=1
    auto_increment_increment=2 (因为是双向,自动增加的id会有冲突,把步长改为2 初始设为2)
    auto_increment_offset=2

    ///////////////////////////////////

    server-id = 3
    log-bin=/tmp/logbin/mysql-bin
    binlog-do-db =sixfj
    binlog-ignore-db=mysql
    replicate-do-db=sixfj
    replicate-ignore-db=mysql
    slave-skip-errors=all
    sync_binlog=1
    auto_increment_increment=2
    auto_increment_offset=2

    至于这些参数的说明具体看手册。

    4、重新启动MYSQL服务器。

    mysql>grant replication slave on *.* to czxync@'103.241.49.137' identified by 'aa12345q';

    5、进入MYSQL的SHELL。


    A:
    mysql> flush tables with read lock/G
    Query OK, 0 rows affected (0.00 sec)

    mysql> show master status/G
    *************************** 1. row ***************************
    File: mysql-bin.000007
    Position: 528
    Binlog_Do_DB: test
    Binlog_Ignore_DB: mysql
    1 row in set (0.00 sec)

    B:
    mysql> flush tables with read lock;
    Query OK, 0 rows affected (0.00 sec)

    mysql> show master status/G
    *************************** 1. row ***************************
    File: mysql-bin.000004
    Position: 595
    Binlog_Do_DB: test
    Binlog_Ignore_DB: mysql
    1 row in set (0.00 sec)
    然后备份自己的数据,保持两个机器的数据一致。
    方法很多。完了后看下一步。


    6、在各自机器上执行CHANGE MASTER TO命令。
    A:
    mysql> change master to
    -> master_host='103.240.182.191',
    -> master_user='backup_251',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000004',
    -> master_log_pos=595;
    Query OK, 0 rows affected (0.01 sec)
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)


    B:
    mysql> change master to
    -> master_host='103.241.49.137',
    -> master_user='backup_167',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000007',
    -> master_log_pos=528;
    Query OK, 0 rows affected (0.01 sec)
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)

    7、查看各自机器上的IO进程和 SLAVE进程是否都开启。
    A:

    mysql> show processlist/G;
    *************************** 1. row ***************************
    Id: 2
    User: repl
    Host: 103.240.182.191:54475
    db: NULL
    Command: Binlog Dump
    Time: 1590
    State: Has sent all binlog to slave; waiting for binlog to be updated
    Info: NULL
    *************************** 2. row ***************************
    Id: 3
    User: system user
    Host:
    db: NULL
    Command: Connect
    Time: 1350
    State: Waiting for master to send event
    Info: NULL
    *************************** 3. row ***************************
    Id: 4
    User: system user
    Host:
    db: NULL
    Command: Connect
    Time: 1149
    State: Has read all relay log; waiting for the slave I/O thread to update it
    Info: NULL
    *************************** 4. row ***************************
    Id: 5
    User: root
    Host: localhost
    db: test
    Command: Query
    Time: 0
    State: NULL
    Info: show processlist
    4 rows in set (0.00 sec)

    B:

    mysql> show processlist/G
    *************************** 1. row ***************************
    Id: 1
    User: system user
    Host:
    db: NULL
    Command: Connect
    Time: 2130
    State: Waiting for master to send event
    Info: NULL
    *************************** 2. row ***************************
    Id: 2
    User: system user
    Host:
    db: NULL
    Command: Connect
    Time: 1223
    State: Has read all relay log; waiting for the slave I/O thread to update it
    Info: NULL
    *************************** 3. row ***************************
    Id: 4
    User: root
    Host: localhost
    db: test
    Command: Query
    Time: 0
    State: NULL
    Info: show processlist
    *************************** 4. row ***************************
    Id: 5
    User: repl2
    Host: 103.241.49.137:50718
    db: NULL
    Command: Binlog Dump
    Time: 1398
    State: Has sent all binlog to slave; waiting for binlog to be updated
    Info: NULL
    4 rows in set (0.00 sec)

    8、释放掉各自的锁,然后进行插数据测试。
    mysql> unlock tables;
    Query OK, 0 rows affected (0.00 sec)

    插入之前两个机器表的对比:
    A:

    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | t11_innodb |
    | t22 |
    +----------------+
    B:

    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | t11_innodb |
    | t22 |
    +----------------+
    从A机器上进行插入
    A:
    mysql> create table t11_replicas
    -> (id int not null auto_increment primary key,
    -> str varchar(255) not null) engine myisam;
    Query OK, 0 rows affected (0.01 sec)

    mysql> insert into t11_replicas(str) values
    -> ('This is a master to master test table');
    Query OK, 1 row affected (0.01 sec)

    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | t11_innodb |
    | t11_replicas |
    | t22 |
    +----------------+
    3 rows in set (0.00 sec)

    mysql> select * from t11_replicas;
    +----+---------------------------------------+
    | id | str |
    +----+---------------------------------------+
    | 1 | This is a master to master test table |
    +----+---------------------------------------+
    1 row in set (0.00 sec)


    现在来看B机器:

    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | t11_innodb |
    | t11_replicas |
    | t22 |
    +----------------+
    3 rows in set (0.00 sec)

    mysql> select * from t11_replicas;
    +----+---------------------------------------+
    | id | str |
    +----+---------------------------------------+
    | 1 | This is a master to master test table |
    +----+---------------------------------------+
    1 row in set (0.00 sec)

    现在反过来从B机器上插入数据:
    B:

    mysql> insert into t11_replicas(str) values('This is a test 2');
    Query OK, 1 row affected (0.00 sec)

    mysql> select * from t11_replicas;
    +----+---------------------------------------+
    | id | str |
    +----+---------------------------------------+
    | 1 | This is a master to master test table |
    | 2 | This is a test 2 |
    +----+---------------------------------------+
    2 rows in set (0.00 sec)
    我们来看A
    A:
    mysql> select * from t11_replicas;
    +----+---------------------------------------+
    | id | str |
    +----+---------------------------------------+
    | 1 | This is a master to master test table |
    | 2 | This is a test 2 |
    +----+---------------------------------------+
    2 rows in set (0.00 sec)

    好了。现在两个表互相为MASTER。

  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第4章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第3章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第1,2章 读书笔记(待更新)
    Tkinter的Message组件
    Git 实操/配置/实践
    mysq5.7.32-win安装步骤
    行为型模式之模板方法
    结构型模式之组合模式
    结构型模式之享元模式
    结构型模式之外观模式
  • 原文地址:https://www.cnblogs.com/ahmm/p/9026431.html
Copyright © 2011-2022 走看看