mysql主従状態異常解決方法


今日新しく挿入されたデータを発見しましたが、読み取ったときはこのデータがありませんでした.私がここで読み書きを分離したので、ライブラリからの問題だと疑っています.
なぜかMysqlのプライマリ・スレーブ・データベースが同期していません.
 
まずMasterライブラリにアクセスします.
 
mysql>show processlist;          Sleep  。     。


show master status;    。

データベースから実行
show slave status \G

    


Slave_IO_Running:  No

問題解析:以上の現象の一方で,ネットワーク通信の問題がログ読み取りエラーの問題である可能性もあるためである.
1.        :

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'


2.           :


Last_Error: Error 'Duplicate entry '11149' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'INSERT INTO

解決策:エラーを無視した後、同期を続行します.この方法は,プライマリ・スレーブ・ライブラリのデータの差が大きくない場合や,データが完全に統一されていない場合,データの要求が厳しくない場合に適用される.
     slave


mysql> stop slave;

masterマシンにmysqlを登録します.
マスターのbinの位置を記録します.たとえば、mysql>show mster status;
mysql> show master status;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB 
|+------------------+----------+--------------+------------------+
| mysql-bin.004661 |  3175267 |              |
|+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

ログはmysql-binです.004661
 
    :mysql> flush logs;

更新ログfileの位置が+1になるので、Fileはmysql-binになります.004662
 
すぐにslaveに実行します
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.004662',MASTER_LOG_POS=3175267;

mysql>start slave;

起動後のステータスリカバリの表示
mysql> show slave status\G;

解決策2
stop slave;
 
#ステップをスキップしたエラーを示し、後の数字は可変です.
set global sql_slave_skip_counter =1;

start slave;

 
その後mysql>show slave statusGで確認します.
 
Slave_IO_Running: Yes

Slave_SQL_Running: Yes

OK、現在主従同期状態は正常です...
解決策3
主従をやり直す、完全に同期する、この方法は主従ライブラリのデータの差が大きい、あるいはデータの完全な統一を要求する場合に適用する.
1.まずメインライブラリに入り、ロックテーブルを行い、データの書き込みを防止する
 
コマンドを使用:
 
mysql> flush tables with read lock;

 
注意:ここでは、大文字と小文字を区別せずにロックされた読み取り専用ステータスです.
 
2.データバックアップ
 
データをmysqlにバックアップします.bak.sqlファイル
#mysqldump -u root -p --all-databases  --lock-tables=false  -- > /tmp/all.sql

ここで注意したいのは、データベースのバックアップは定期的に行う必要があります.shellスクリプトやスクリプトを使用することができます.いずれも便利で、データが万全であることを確保します.
3.マスターステータスの表示
 
mysql> show master status;

4.mysqlバックアップファイルをスレーブマシンに転送し、データ復旧を行う
 
#scpコマンドの使用
[root@server01 tmp]# scp all.sql [email protected]:/tmp/

 
5.ライブラリから停止した状態
mysql> stop slave;

 
6.次に、ライブラリからmysqlコマンドを実行し、データバックアップをインポート
 
mysql> source /tmp/all.sql

 
7.ライブラリからの同期を設定し、そこにある同期点に注意すると、メインライブラリshow master status情報の|File|Positionの2つになります
 
change master to master_host = '192.168.0.100', master_user = 'rsync', master_port=3306, master_password='123456', master_log_file = 'mysql-bin.004661', master_log_pos=3175267;

8.スレーブ同期を再開
mysql> start slave;

 
9.同期ステータスの表示
mysql> show slave status\G    :
 
Slave_IO_Running: Yes

Slave_SQL_Running: Yes

 
はい、同期が完了しました.