2013年5月6日星期一

通過MySQL,Percona的MariaDB的通函複製

Original Post: http://anothermysqldba.blogspot.com/2013/05/circular-replication-through-mysql.html









我最近發表的關於建立MySQL和相關叉子從源只是為了測試的過程和一個令人討厭的一種樂趣。


這是目前所有只是為了演示和評估目的。 如果你是渴望為生產準備的圓形複製檢查下面的鏈接先關於鎢複製的解決方案。


現在,我將設立循環複製,在這些不同的服務器環境。 為什麼呢?
  • 確認是多麼容易可以做,如果是可以做到的。
    • 最大的問題是,我想自動遞增3服務器不只是2。
  • 當然,真正的考驗是5.6和未來版本。
  • 我預計錯誤,因為不同的特點。
    • 我很好奇,我經常遇到。

首先,我編輯此服務器的相關配置文件。 我的源文章引用更多,如果你需要更多的信息。
我編輯了以下內容:

  • 的server-id = 1
  • #如果你想取消對以下更新記錄
  • 日誌斌=的/ var / lib中/ oracle_mysql / oracle_mysql斌
  • #二進制日誌格式-混合推薦
  • binlog_format =混合

>
+ ------------ +
| VERSION()
+ ------------ +
| 31年5月5日登錄|
+ ------------ +


>show master status\G
*************************** 1. row ***************************
File: oracle_mysql-bin.000001
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

SET GLOBAL auto_increment_offset=1;
SET GLOBAL auto_increment_increment=2;

> show global variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 2 |
| auto_increment_offset | 1 |
+--------------------------+-------+



  • 的server-id = 2
  • 日誌斌= percona_mysql斌
  • binlog_format =混合

>

+------------+
| VERSION() |
+------------+
| 5.5.30-log |
+------------+


> show master status\G
*************************** 1. row ***************************
File: percona_mysql-bin.000001
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.01 sec)

> show global variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 2 |
| auto_increment_offset | 2 |
+--------------------------+-------+

CHANGE
MASTER TO MASTER_HOST='localhost',
MASTER_USER='root',
MASTER_PASSWORD='',
MASTER_PORT=3309,
MASTER_LOG_FILE='oracle_mysql-bin.000001',
MASTER_LOG_POS=107,
MASTER_CONNECT_RETRY=10;
mysql_yoda> start slave;

> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 3309
Connect_Retry: 10
Master_Log_File: oracle_mysql-bin.000001
Read_Master_Log_Pos: 107
Relay_Log_File: percona-relay-bin.000002
Relay_Log_Pos: 260
Relay_Master_Log_File: oracle_mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes



  • 的server-id = 3
  • 日誌斌= maria_mysql斌
  • binlog_format =混合
    >

    +--------------------+
    | VERSION() |
    +--------------------+
    | 5.5.30-MariaDB-log |
    +--------------------+

    > show master status\G
    *************************** 1. row ***************************
    File: maria_mysql-bin.000001
    Position: 245
    Binlog_Do_DB:
    Binlog_Ignore_DB:
    1 row in set (0.00 sec)

    CHANGE
    MASTER TO MASTER_HOST='localhost',
    MASTER_USER='root',
    MASTER_PASSWORD='',
    MASTER_PORT=3307,
    MASTER_LOG_FILE='percona_mysql-bin.000001',
    MASTER_LOG_POS=107,
    MASTER_CONNECT_RETRY=10;

    > show slave status\G
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: localhost
    Master_User: root
    Master_Port: 3307
    Connect_Retry: 10
    Master_Log_File: percona_mysql-bin.000001
    Read_Master_Log_Pos: 107
    Relay_Log_File: mariadb-relay.000002
    Relay_Log_Pos: 399
    Relay_Master_Log_File: percona_mysql-bin.000001
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    show global variables like '%auto_increment%';
    +--------------------------+-------+
    | Variable_name | Value |
    +--------------------------+-------+
    | auto_increment_increment | 1 |
    | auto_increment_offset | 1 |
    +--------------------------+-------+ 

    所以這是一個中繼複製鏈的時刻,我希望做一個圓形的複製。
    現在如果你還沒有意識到,抵銷跨3台服務器的AUTO_INCREMENT值並沒有太大的意義。


    要完成我要第一個MySQL和Percona的只是創建一個圓的圓。 Percona的數據庫也將複製到MariaDB的。

    CHANGE
    MASTER TO MASTER_HOST='localhost',
    MASTER_USER='root',
    MASTER_PASSWORD='',
    MASTER_PORT=3307,
    MASTER_LOG_FILE='percona_mysql-bin.000001',
    MASTER_LOG_POS=107,
    MASTER_CONNECT_RETRY=10;

    > show slave status\G

    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: localhost
    Master_User: root
    Master_Port: 3307
    Connect_Retry: 10
    Master_Log_File: percona_mysql-bin.000001
    Read_Master_Log_Pos: 107
    Relay_Log_File: oracle_mysql-relay.000002
    Relay_Log_Pos: 261
    Relay_Master_Log_File: percona_mysql-bin.000001
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes


    複製是容易建立與服務器有沒有交通。 所以開始,我想確認的一切實際工作中,即使狀態呈陽性的結果。








    oracle_mysql>create database teamwork ;
    oracle_mysql>show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    teamwork |
    | test |
    +--------------------+ 





    percona>show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    teamwork |
    | test |
    +--------------------+ 



    MariaDB>show databases; 
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | test |
    +--------------------+

    遇到麻煩了。 我們可以看到,Oracle MySQL版本複製就好了Percona的實例中。
    因此,讓我們再次測試此。


    percona>create database community ;








    MariaDB>show databases; 

    +--------------------+

    | Database |
    + -------------------- +
    INFORMATION_SCHEMA |
    社區 |
    | MYSQL |
    | PERFORMANCE_SCHEMA |
    |測試|
    + -------------------- +




    oracle_mysql>show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    community |
    | mysql |
    | performance_schema |
    | teamwork |
    | test |
    +--------------------+ 

    因此,具有諷刺意味的,MariaDB的工作以及與Percona的,並接受社會,當它沒有接受團隊精神,通過 Oracle_mysql 起源。 應該指出的是,也沒有接受Oracle_mysql Percona的社區工作。

    因此,我們可以修復它,問題是什麼?

    好吧,我可能只是等待和測試MariaDB的10.0版本,並允許它使用多主 。
    這可能是一個解決辦法,因為我可以有循環的複製與Oracle_mysql Percona的,然後使用MariDB的,讓他們無論是在檢查的數據複製到它,然後使用報告。 然而,這可能會導致一些問題。

    那麼,什麼可以做,以使一切開心他們當中?


     所以首先作為一個測試,我會移動瑪麗亞的主從Percona的MySQL的。


    CHANGE
    MASTER TO MASTER_HOST='localhost',
    MASTER_USER='root',
    MASTER_PASSWORD='',
    MASTER_PORT=3309,
    MASTER_LOG_FILE='oracle_mysql-bin.000001',
    MASTER_LOG_POS=708,
    MASTER_CONNECT_RETRY=10;



    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes 





    oracle_mysql>use community;
    oracle_mysql>CREATE TABLE `tab1` (
    -> `col1` int(11)
    -> ) ;

    .... After the percona insert below...


    oracle_mysql>select * from tab1;
    +------+
    | col1 |
    +------+
    | 2 |
    | 3 |
    | NULL |
    | 2 |
    | 3 |
    | 1 |
    +------+
    6 rows 




    percona>use community;

    percona>INSERT INTO tab1 VALUE (2),(3),(NULL),(2),(3),(1);
    Query OK, 6 rows affected (0.06 sec)


     


    MariaDB>use community;
    MariaDB>select * from tab1;
    Empty set (0.00 sec) 



    所以循環複製的工作原理,只要我使用MySQL所有寫入。 有一次,我寫Percona的,它無法複製到通過Oracle_mysql MariaDB的。

    所以時間挖成日誌....


    # ./mysqlbinlog /var/lib/percona/percona-relay-bin.000008

    SET @@session.collation_database=DEFAULT/*!*/;
    CREATE TABLE `tab1` (
    `col1` int(11)
    )
    /*!*/;
    DELIMITER ;
    # End of log file

    # ./mysqlbinlog /var/lib/percona/percona_mysql-bin.000001

    use `community`/*!*/;
    SET TIMESTAMP=1367775597/*!*/;
    INSERT INTO tab1 VALUE (2),(3),(NULL),(2),(3),(1)
    /*!*/;
    # at 619
    #130505 17:39:57 server id 2 end_log_pos 646 Xid = 111
    COMMIT/*!*/;
    DELIMITER ;
    # End of log file

    # ./mysqlbinlog /var/lib/oracle_mysql/oracle_mysql-relay.000002

    use `community`/*!*/;
    SET TIMESTAMP=1367775597/*!*/;
    INSERT INTO tab1 VALUE (2),(3),(NULL),(2),(3),(1)
    /*!*/;
    # at 461
    #130505 17:39:57 server id 2 end_log_pos 646 Xid = 111
    COMMIT/*!*/;
    DELIMITER ;
    # End of log file
    # ./mysqlbinlog /var/lib/oracle_mysql/oracle_mysql-bin.000003

    SET @@session.collation_database=DEFAULT/*!*/;
    CREATE TABLE `tab1` (
    `col1` int(11)
    )
    /*!*/;
    DELIMITER ;
    # End of log file 

    # ./mysqlbinlog /var/lib/mariadb/mariadb-relay.000002

    SET @@session.collation_database=DEFAULT/*!*/;
    CREATE TABLE `tab1` (
    `col1` int(11)
    )
    /*!*/;
    DELIMITER ;
    # End of log file




    正如你可以看到從日誌數據,這種電流設置,你會得到循環複製和奴隸,但你會得到一個有效的奴隸,如果你只寫一個主。 您可以移動,從容易,如果主人雖然墜毀。 人們經常尋找答案,這表明它可以幫助循環複製,但並不能解決一切。 同樣,如果你​​渴望與循環複製檢查下面的鏈接先關於鎢複製的生產就緒解決方案。








    對於每一個動作有一個後果,善有善報,惡有惡報。
    噶教我們所有的東西,不管我們喜歡還是不喜歡。