2011-11-29 5 views
0

私はマスターとスレーブを持っており、スレーブの次のエラーログでスレーブを停止させました。私はこれを修正したいと同期上の2つのサーバーを取得し、再び行く。mysqlレプリケーションデッドロックスレーブが停止しました

111128 8:42:24 [Note] Slave I/O thread: connected to master '[email protected]:3306', replication started in log 'mysql-bin.000006' at position 169 

111128 15:46:50 [ERROR] Slave: Query caused different errors on master and slave. Error on master: 'Deadlock found when trying to get lock; try restarting transaction' (1213), Error on slave: 'no error' (0). Default database: 'Dbase'. Query: 'insert into archieved(eid,at,rtime,scode) select id,at,avg(rtime),scode from tstatus where date(at)="2011-10-29" group by id', Error_code: 0 111128 15:46:50 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000006' position 1277768 

私は次の操作を行いますするかどうかはわかりません。

try restarting transaction' (1213) 

注:私は奴隷に次のように持っているが、IOの実行とSQLが停止しました。私はちょうどを再同期して、これもまた将来避けたいと思う。

Slave_IO_State: Waiting for master to send event 
      Master_Host: masterIp 
      Master_User: repl 
      Master_Port: 3306 
      Connect_Retry: 60 
     Master_Log_File: mysql-bin.000006 
    Read_Master_Log_Pos: 3156089 
     Relay_Log_File: mysql-relay-bin.000002 
      Relay_Log_Pos: 1277834 
    Relay_Master_Log_File: mysql-bin.000006 
     Slave_IO_Running: Yes 
     Slave_SQL_Running: No 
     Replicate_Do_DB: 

ありがとう。

+0

私はあなたのマスターサーバーの状態を確認する必要があると思います。このようなエラー(デッドロック)は、レプリケーションなしでチェックする必要があります。私はあなたがこのエラーを起こす時は、あなたのサーバーが重いと思っています。 –

+0

これはまたケース – itsraja

答えて

1

アプリケーションからトランザクションを再起動する必要があります。mysqlは既にそれを忘れています。

Mysqlがデッドロックに遭遇すると、「勝者」が1つ選ばれてそのスレッドが続行され、もう1つのスレッドはロールバックを行い、ロックを解除して「トランザクションを再開しようとする」エラーを取得します。

アプリケーションは、これを検出して同じクエリをもう一度試行してください。うまくいけば、あなたは再びデッドロックを取得しません。

あなたのスレーブに関しては、私はこのエラーを以前に見たことがなく、ちょっと混乱していますが、失敗したマスターのクエリは決してビンログに書き込まれないため、 「マスタとスレーブの異なるエラー」

いずれにしても。この問題を解決するには、

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE; 

このビンログの最初の文を無視し、サーバーを再起動します実行する必要があります。そのステートメントはスレーブ上では実行されませんので、後でマスターとスレーブでテーブルが同じであることを手動で確認する必要があります。

幸運。

+0

私の質問に追加された参照してください参照してください。私はまだデータを再同期させることはできませんが、今はSKIP_COUNTERを実行する必要がありますか? – itsraja

+0

'sql running:no'は、エラー時にレプリケーションが停止したことを意味します。エラーを修正し、スレーブを再起動する必要があります。レプリケーションを壊したステートメントを実行することができない限り、単にスレーブを開始することも、停止することもできません。 'show slave status'のどこかに' last replication error'などと呼ばれる行があります。なぜこの声明が奴隷ではなく、主人で働いたのかを調べてください。それは将来どのようにこれを避けることができますか。 –

+0

ありがとうございました。それは同期しています。 – itsraja

関連する問題