mysql主従状態異常解決方法
今日新しく挿入されたデータを発見しましたが、読み取ったときはこのデータがありませんでした.私がここで読み書きを分離したので、ライブラリからの問題だと疑っています.
なぜかMysqlのプライマリ・スレーブ・データベースが同期していません.
まずMasterライブラリにアクセスします.
データベースから実行
問題解析:以上の現象の一方で,ネットワーク通信の問題がログ読み取りエラーの問題である可能性もあるためである.
解決策:エラーを無視した後、同期を続行します.この方法は,プライマリ・スレーブ・ライブラリのデータの差が大きくない場合や,データが完全に統一されていない場合,データの要求が厳しくない場合に適用される.
masterマシンにmysqlを登録します.
マスターのbinの位置を記録します.たとえば、mysql>show mster status;
ログはmysql-binです.004661
更新ログfileの位置が+1になるので、Fileはmysql-binになります.004662
すぐにslaveに実行します
起動後のステータスリカバリの表示
解決策2
stop slave;
#ステップをスキップしたエラーを示し、後の数字は可変です.
その後mysql>show slave statusGで確認します.
OK、現在主従同期状態は正常です...
解決策3
主従をやり直す、完全に同期する、この方法は主従ライブラリのデータの差が大きい、あるいはデータの完全な統一を要求する場合に適用する.
1.まずメインライブラリに入り、ロックテーブルを行い、データの書き込みを防止する
コマンドを使用:
注意:ここでは、大文字と小文字を区別せずにロックされた読み取り専用ステータスです.
2.データバックアップ
データをmysqlにバックアップします.bak.sqlファイル
ここで注意したいのは、データベースのバックアップは定期的に行う必要があります.shellスクリプトやスクリプトを使用することができます.いずれも便利で、データが万全であることを確保します.
3.マスターステータスの表示
4.mysqlバックアップファイルをスレーブマシンに転送し、データ復旧を行う
#scpコマンドの使用
5.ライブラリから停止した状態
6.次に、ライブラリからmysqlコマンドを実行し、データバックアップをインポート
7.ライブラリからの同期を設定し、そこにある同期点に注意すると、メインライブラリshow master status情報の|File|Positionの2つになります
8.スレーブ同期を再開
9.同期ステータスの表示
はい、同期が完了しました.
なぜか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
はい、同期が完了しました.