2016-07-15 2 views
2

を使用している場合、私はGTIDと私のPercona Serverにレプリカを作成したいが有効になっていますが、私は、スレーブのステータスを表示したときに、このエラーを得た:MySQLエラー1236 GTID

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.' 

通常、私はそれをリセットし、私の奴隷を停止しますマスターを(スレーブ上で)リセットし、マスターから新しいGTID_PURGED値を取得します。しかし今回は、マスターは非常に珍しい値(複数可)を持っていると私は、使用するかを決定する方法がわからないです:

mysql> show master status\G 
*************************** 1. row *************************** 
      File: mysqld-bin.000283 
     Position: 316137263 
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
Executed_Gtid_Set: 1570dee1-165b-11e6-a4a2-00e081e93212:1-3537, 
c73f3ee7-e8d4-ee19-6507-f898a9930ccd:1-18609, 
cdb70eaa-f753-ee1b-5c95-ecb8024ae729:1-2357789559:2357789561-2357790104:2357790106-2514115701:2514115703-2514115705:2514115707-2546512667 
1 row in set (0.00 sec) 

新しいバックアップ・コピーとスレーブから、私はこれを取得します

[email protected]:/var/lib/mysql# cat xtrabackup_binlog_info 
mysqld-bin.000283  294922064  1570dee1-165b-11e6-a4a2-00e081e93212:1-3537, 
c73f3ee7-e8d4-ee19-6507-f898a9930ccd:1-18609, 
cdb70eaa-f753-ee1b-5c95-ecb8024ae729:1-2357789559:2357789561-2357790104:2357790106-2514115701:2514115703-2514115705:2514115707-2546400960 

さらにもう1つ、私はバックアップを作成する前にマスター上のバイナリログをパージしました。自動binlogパージは7日間に設定されています。だから私は、エラーが示唆されているので、binのログがパージされているので、そのことを知りません。

私はUbuntu 14:04とPerconaサーバーバージョン5.6.31-77を実行しています。

どうすればこの問題を解決できますか?マスターのGTID_PURGEDの正しい値は何ですか?

答えて

1

mysql 5.6 GTIDの複製エラーと修正 GTIDとは何ですか? 

4c2ad77f-697e-11E3-b2c3-c80aa9f17dc4

  • これは、サーバの128ビットの識別番号(SERVER_UUID)です。トランザクションが発生した場所を示します。すべてのサーバーには独自のSERVER_UUIDがあります。 GTIDはどのような問題を解決しますか?

  • レプリケーションサーバー間でトランザクションを一意に識別することができます。フェールオーバープロセスの自動化をはるかに容易にします。計算をしたり、バイナリログを調べたりする必要はありません。ちょうどMASTER_AUTO_POSITION = 1。

  • アプリケーションレベルでは、WRITE/READ分割を行う方が簡単です。 MASTERの書き込み後、GTIDがあるので、読み取りに使用するSLAVEでそのGTIDが実行されたかどうかを確認するだけです。
  • 新しい自動化ツールの開発は苦労していません。 どうすれば実装できますか?

三つの変数は、複製連鎖

  • gtid_modeのすべてのサーバーで必要とされる:それはONであるかOFF(ない1または0)することができます。サーバー上のGTIDを有効にします。
  • log_bin:バイナリログを有効にします。レプリケーション環境を作成するためには必須です。
  • log-slave-updates:スレーブサーバは、マスターからの変更を独自のバイナリログに記録する必要があります。
  • enforce-gtid-consistency:トランザクションで安全にログインできないステートメントは、サーバーによって拒否されます。 REF:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids-howto.html

複製エラーおよび修正:

「'バイナリログからデータを読み出す際にマスタから致命的なエラー1236得た:」スレーブ= 1 MASTER_AUTO_POSITIONに変更マスターを使用して接続されているが、マスタスレーブが必要とするGTIDを含むバイナリログをパージしました。 "slave_ioスレッドが停止しています。

解像度:考慮すると、以下をマスターしている - スレーブのUUIDの

MASTERのUUID:4c2ad77f-697e-11E3-b2c3-c80aa9f17dc4

SLAVEのUUID:5b37def1-6189-11e3-bee0-e89a8f22a444

ステップ:

slave> stop slave;

スレーブ>読取りロック付きフラッシュテーブル;

slave> show master status;

「4c2ad77f-697e-11E3-b2c3-c80aa9f17dc4:1-83345127,5b37def1-6189-11e3-bee0-e89a8f22a444:13322から13325:13032から13317:1から13030 13328から653183:654128:653185から654126 -1400817:1400820-3423394:3423401-5779965「

(HERE 83345127最終GTIDがマスター上で実行され、マスタおよび5779965最後のスレーブGTID上で実行される)

スレーブ>マスターをリセットします。

スレーブ>設定グローバルGTID_PURGED =」4c2ad77f-697e-11E3-b2c3-c80aa9f17dc4:1-83345127,5b37def1-6189-11e3-bee0-e89a8f22a444:1から5779965 ';

slave> start slave;

slave> unlock tables;

slave> show slave status;

注:他のチェーンスレーブが複製を停止した場合は、スレーブを再起動してください。

エラー: 'エラー "テーブル...'がクエリに存在しません。デフォルトのデータベース:...クエリ:「INSERT INTO OR Last_SQL_Error:... .ERROR 『重複したエントリが』スレーブ(slave_sqlスレッドストップランニング)にトランザクションをスキップ注:

  • SQL_SLAVE_SKIP_COUNTERはGTIDでもう動作しません。
  • レプリケーションの失敗原因となっているトランザクションを特定する必要があります。
    • から
    • バイナリログから - (実行対取り出さ)のSHOW SLAVE状態からのエラーの タイプ:(ショースレーブの状態で最後のSQLエラーを確認してください)

解像度:以下の考慮マスターです - スレーブのUUIDの

MASTERのUUID:4c2ad77f-697e-11E3-b2c3-c80aa9f17dc4

SLAVE UUID:5b37def1-6189-11e3-bee0-e89a8f22a444

slave> show slave status;

は「Executed_Gtid_Set」の値をコピーします。 '4c2ad77f-697e-11E3-b2c3-c80aa9f17dc4:1-659731804,5b37def1-6189-11e3-bee0-e89a8f22a444:1-70734947-80436012:80436021から80437839' UUID 5b37def1-6189-と

-Seemsスレーブ( 11e3-bee0-e89a8f22a444)トランザクション '80437840'はここで問題を引き起こしています。

slave> STOP SLAVE;

スレーブ> SET GTID_NEXT =」5b37def1-6189-11e3-bee0-e89a8f22a444:80437840“ 。 (last_executed_slave_gtid_on_master + 1)

スレーブ> BEGIN。コミット;

スレーブ> SET GTID_NEXT =」AUTOMATIC」;

slave> START SLAVE;

slave> show slave status;

これはすべてセットです!