無効なGRANT文により、プライマリ・スレーブの同期が切断されました


当時使用していたMySQLバージョンは5.6.10
次に、MySQL 5.6.10のバージョンでテストを行い、slaveライブラリ情報が同期された状態であることを確認します.
マスターライブラリでstatus情報を表示するには、次の手順に従います.
無効なgrant文をmasterライブラリで実行します.
mysql> grant file on sakila.* to admin@'192.168.10.129';

みんな図を見たでしょうbinlogはmysql-binです.000012はmysql-binになった.000013、それは無効なgrantを実行したときにflush logsのような操作をした可能性があることを意味し、mysql-binを表示する.000012このようなエラーを発見:
RELOAD DATABASE; # Shall generate syntax error

次にslaveライブラリに戻って情報を確認します.
見た、同期が切れた、The incident LOST_EVENTS occured on the master. Message:error writing to the binary logエラー!!!
次のgrantの書き方はbinlogのリフレッシュをトリガーします.
 
テストでは、5.5でも5.6でもライブラリに対して権限を付与ことはできません.5.6ではライブラリに対してfile権限を付与すると、新しいbinlogのリフレッシュがトリガーされます.5.5バージョンではできません.後でMySQL 5をテストします.5バージョン.すべてのライブラリに対してfile権限を許可するのは問題ありません.以下のようにします.
 
 
同期フラクチャの解決方法:1)sql_の使用slave_skip_counterはイベントをスキップするが,この方法はバイナリログ原理に基づくレプリケーションにのみ適用され,GTID原理に基づくレプリケーションには適用されない.2)slave_の使用skip_errorsはエラーをスキップします.3)ライブラリからchange master操作を行い、master_を再切り替えlog_fileとmaster_log_pos.(無効なgrant文が実行されると新しいバイナリログが作成されるので、メインライブラリshow master statusのmaster_log_fileとmaster_log_posを指定できます)
 
次はMySQL 5.5.40でテストします.
slaveライブラリの情報を表示するには、次の手順に従います.
materでstatusを表示し、無効なgrant文を実行します.
binlogは元のbinlogで、MySQL 5のように現れていないことがわかります.6の場合、slaveの状況を見ると、まだ同期状態にあることがわかります.
 
まとめ:MySQL 5を使う会社が増えています.6のバージョンです.確かにMySQL 5です.6のバージョンで、MySQL 5に対して.5バージョンはかなり改善されているので、多くの会社がアップグレードしたり、MySQL 5を直接使用したりしています.6、もしオンラインで使用する中5.6バージョンのMySQLであれば、grantが授権するときは注意しなければならない.無効なgrantはbinlogのリフレッシュをトリガーする可能性がある.特に、そのような主なマルチライブラリのアーキテクチャに対して、slaveが読み取りを提供する場合は、さらに注意しなければならない.これはバグかもしれない.ネット上で材料を探しているとき、5.6.11と5.6.13を見ていると、このような状況が発生している.興味のある方はMariaDBをテストしてください.もし別の見解の方がいたら、一緒に議論して共有してください.ありがとうございます.
 
参考資料:
http://www.psce.com/blog/2013/04/09/granting-privileges-may-break-replication-in-mysql-5-6-10/
https://bugs.mysql.com/bug.php?id=68892(自己準備×××) 
 
 
著者:xuanzhi
出典:Azhiのブログhttp://www.cnblogs.com/xuanzhi201111
あなたの支持はブロガーに対する最大の励ましであり、真剣に読んでくれてありがとう.本文の著作権は作者の所有に帰して、転載を歓迎して、しかしこの声明を保留してください.