4

DNSサーバーがマスターのレコードを取得し、すべてのレコードがマスターからスレーブに複製され、スレーブが解決に使用されている状況があります。mysql サーバーのアップグレード後にレプリケーションが壊れました。mysql サーバーが停止し、mysql が復旧するまでの間、ログ ファイルの名前とログの位置が変更されました。ログの位置とログ ファイル名を変更すると、レプリケーションが開始されますが、多くの更新が失われ、望ましくないことがわかりました。マスターの更新を失わずにマスター スレーブ レプリケーションを再開するにはどうすればよいですか。ひとつひとつの更新が重要です。スレーブ ステータスからの情報を次に示します。

 Slave_IO_Running: No
 Slave_SQL_Running: Yes

Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

ありがとう

4

2 に答える 2

7

あなたは素晴らしい驚きを感じるかもしれませんが、ここに行きます:

実行しますSHOW SLAVE STATUS\G。例として、次のようになったとします。

             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.64.68.253
                Master_User: replusername
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.003202
        Read_Master_Log_Pos: 577991837
             Relay_Log_File: relay-bin.010449
              Relay_Log_Pos: 306229695
      Relay_Master_Log_File: mysql-bin.003202
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table: 
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: 
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 577991837
            Relay_Log_Space: 306229695
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 0

表示から次の項目を選択します。

  • Relay_Master_Log_File( mysql-bin.003202)
  • Exec_Master_Log_Pos( 577991837)

理由は次のとおりです。そして、スレーブに到達し、正常に実行されたマスターからの binlog エントリRelay_Master_Log_Fileを表します。Exec_Master_Log_Posそこからピックアップするだけです。

次のコードを実行するだけです。Exec_Master_Log_Pos

STOP SLAVE;
CHANGE MASTER TO
MASTER_LOG_FILE='mysql-bin.003202',
MASTER_LOG_POS=577991837;
START SLAVE;

試してみる !!!

警告

Relay_Master_Log_Fileマスターに存在しない場合は、ダメージ コントロールを実行する必要があります。前にSHOW SLAVE STATUS\G述べたように、次のようにマスターの次のバイナリ ログにスキップする必要がある場合があります。

STOP SLAVE;
CHANGE MASTER TO
MASTER_LOG_FILE='mysql-bin.003203',
MASTER_LOG_POS=4;
START SLAVE;

レプリケーションが追いついたとしても、あなたは森の外にいるわけではありません。Percona Toolkit をダウンロードし、pt-table-checksumpt-table-syncを実行して、スレーブで失われたデータを修復する必要がある場合があります。

レプリケーションがうまくいかない場合は、デューデリジェンスを実行してスレーブをリロードする必要があります。

レプリケーションが元の提案で機能する場合、この警告で何もする必要がないことを願っています。

于 2013-05-05T22:24:01.163 に答える
4

与えられた答えは私にはうまくいきませんでした。実際には、取得して master_log_file として設定する適切なファイルを別の場所からコピーする必要があります。私のために働いた指示をあなたに与える:

Slave Server: stop slave;


In Master Server: flush logs


In Master Server: show master status; — take note of the master log file and master log position (on my end is 'peer-bin.000264' and pos=120)

Slave Server : CHANGE MASTER TO MASTER_LOG_FILE=’peer-bin.000264′, MASTER_LOG_POS=120;


Slave Server: start slave;
于 2013-11-06T09:08:32.950 に答える