Tuesday, May 7, 2013

MySQLは、PerconaおよびMariaDB円形の貫通複製

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










私は最近、 投稿だけプロセスと楽しいのマニアックな種類をテストするためにソースからMySQL&関連フォークの構築について。


これはただのデモおよび評価の目的で、現在すべてです。 あなたが円形のレプリケーションで生産準備が解決のために熱望している場合は、タングステンレプリケータについて以下の最初のリンクをチェックしてください。


今、私は、これらの異なるサーバ環境全体で円形のレプリケーションを設定します。 なぜですか?
  • それを行うことができる場合はそれを行うことができますどのように簡単に確認してください。
    • 最大の問題は、自動インクリメントであり、私は3つのサーバだけでなく、2が欲しい。
  • もちろん、実際のテストでは、5.6とより、将来のリリースである。
  • 私は異なるため機能をエラーを期待しています。
    • 私はこの全体を実行する頻度を好奇心旺盛です。

最初に私はこのサーバーに関連するコンフィギュレーションファイルを編集しました。 私のソースポスト参照はより多くのあなたがより多くの情報が必要な場合。
私は、次の編集:

  • サーバID = 1
  • 更新をログに記録したい場合は、#以下のコメントを外し
  • ログ·ビン=の/ var / libに/ oracle_mysql / oracle_mysqlビン
  • #バイナリログ形式-混合を推奨
  • binlog_format =混合

>
+ ------------ +
| VERSION()|
+ ------------ +
| 5.5.31-ログイン|
+ ------------ +


>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 |
+--------------------------+-------+



  • サーバ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



  • サーバ-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を使用するように円形のレプリケーションは限り動作します。かつて私は、それがOracle_mysql介してMariaDBに複製に失敗Perconaに書き込む。

    ログに掘るので、時間....


    # ./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




    あなたが、この現在のセットで、ログデータからわかるように、あなたは、円形の複製とスレーブを取得しますが、あなたは1つだけマスターに書き込む場合は、有効なスレーブを取得します。 マスターはしかし墜落した場合は、簡単にそのスレーブを移動することができます。 人々は頻繁に答え、それを助けることができることを示しているように、円形の複製に見えるが、すべてを解決していません。 あなたが円形のレプリケーションで生産準備が解決のために熱望している場合、再びタングステンレプリケータについて以下の最初のリンクをチェックしてください。








    すべてのアクションのために周りに何が起こって結果があり、周りに来る。
    カルマは、我々がそれを好きかどうかにかかわらず、私たちのすべての何かをお教えします。