MySQLの - relay_log_recoveryのテストパラメータ

I.概要

官方文档中对relay_log_recovery参数的解释
すぐにサーバの起動を、次の自動リレーログの回復をイネーブルにします。回復プロセスは、新しいリレーログファイルを作成し、この新しいリレーログにSQLスレッド位置を初期化し、SQLスレッド位置にI / Oスレッドを初期化します。マスターからのリレーログの読み取りは、その後続けています。

上記の英語を理解していない、それは、実験的な方言の翻訳に続いて、あなたが理解していない恐れて問題ではありません。
図書館でのリレーログからもダメージを受けながら、私たちは今、時にライブラリー計画外のダウンタイムからと仮定し、質問を考慮し、メインライブラリログは、ライブラリから広がっているが、ライブラリは、ライブラリから、これらのログを使用する時間がありませんでしたどのように対処するには?


結論

1が提供またはライブラリにオフに設定relay_log_recoveryから、ロギングアプリケーションなしでライブラリから失われます上記の場合、場合に遭遇されていない、マスターは一貫性がなくなります。
relay_log_recoveryから、ライブラリ内の2セットは、上記のような状況が発生した場合、ライブラリからのすべてのリレーログの実装をあきらめリレーログを再構築し、ライブラリから糸IO新しい位置にリダイレクトされないだろう偽、上にありますリレーログ。SQLスレッド位置と復帰は、スレッドのIO位置と一致するトランザクションがライブラリから失われないように、再び同期を開始します。このパラメータを使用すると、有効にすることをお勧めします。それが周りにいないで、それは実験を見て、問題ではありません。


第三に、実験

1.はじめに実験環境

MySQLのバージョン:5.7.25、オペレーティングシステムのバージョン:centos6.10
メインライブラリIP:10.40.16.61、ライブラリーからIP:10.40.16.62は、
追加パラメータスキップ・スレーブ・スタート・ライブラリーからパラメータファイルを、自動起動のスレーブを防止するためのライブラリーから。

 

2. relay_log_recoveryはオフに設定しました

デフォルトでは、このパラメータはオフになって、設定する必要はありません

メインライブラリのステータスを確認
画像

ライブラリの状態からの眺め
画像

現在のマスターから上記の出力からわかるように同期され、およびライブラリからのパラメータはrelay_log_recovery OFFです

SQLスレッドライブラリ閉じ
ストップスレーブSQL_THREAD(ルート@ localhostのを) [ハロー]>。

マスターにいくつかの変更なされるべきライブラリー
;(ルート@ localhostの)[ハロー]> T1値(20)。INSERT INTO
[ハロー]> T1値(30)。INSERT INTO(ルート@ localhostの);

メインライブラリで表示さt1テーブル
画像

ライブラリテーブルt1からビューで
画像

メインライブラリのステータスを確認
画像

ライブラリの状態からの眺め
画像

リレーライブラリからのログの表示
[ルート@のmysqlbのrelaybin]#mysqlbinlogは -vvスレーブリレー-bin.000010

画像

あなたは、メインのライブラリがログにリレーログに転送されている見ることができますが、ライブラリからそれを実行しませんでした。今、図書館計画外のダウンタイムからシミュレーション。
[ルート@ mysqlbのrelaybin]#のリブート

一度、最後のリレーライブラリからログを削除するには、ライブラリのノードからの起動終了
[ルート@のmysqlbのrelaybin]#rmを -fスレーブリレー-bin.000010

然后启动从库
[root@mysqlb relaybin]# service mysql start

查看relay log目录,发现又生成了一个slave-relay-bin.000010
画像

去看看这个重新生成的slave-relay-bin.000010内容
[root@mysqlb relaybin]# mysqlbinlog -vv slave-relay-bin.000010
画像
可以看到啥都没有,这是因为数据库在重启的时候,会自动重新生成一个relay log,但是这个特性跟上面提到的参数relay_log_recovery没有任何关系

再去从库看看当前的从库状态
画像
发现与重启前的状态信息是的一致的

启动从库的slave线程,再去从库看看当前的从库状态
画像
可以看到从库又开始同步了,而且Exec_Master_Log_Pos=Read_Master_Log_Pos,还重新生成了一个slave-relay-bin.000011

再去从库看当前的slave log
画像

[root@mysqlb relaybin]# mysqlbinlog -vv slave-relay-bin.000010
画像

[root@mysqlb relaybin]# mysqlbinlog -vv slave-relay-bin.000011
画像

可以看到都是些空事务,也就是从库对于那些还没有执行的语句,全部抛弃了。强制将Exec_Master_Log_Pos移到了Read_Master_Log_Pos。

主库
画像

从库
画像

看到了吧,t1表中的20和30这两条记录就丢失了。

 

2. 将relay_log_recovery设置为on

在从库参数文件中设置参数(relay_log_recovery = 1)并重启从库
画像

查看主库状态
画像

查看从库状态
画像

停掉重库的sql线程
(root@localhost)[hello]> stop slave sql_thread;

主库做点改动,这次选用t2表
画像

从库查看t2表
画像

从库查看状态
画像

从库查看slave log
[root@mysqlb relaybin]# mysqlbinlog -vv slave-relay-bin.000013

画像

可以看到日志已经进入到slave log中了

现在模拟从库意外宕机,等启动后删除从库最新的relay log,跟第一个实验步骤一致
[root@mysqlb relaybin]# reboot
[root@mysqlb relaybin]# rm -f slave-relay-bin.000013
[root@mysqlb relaybin]# service mysql start

查看从库的状态
画像
可以看到Read_Master_Log_Pos已经由重启前的5429退回到了5124,跟Exec_Master_Log_Pos保持一致。

查看从库的relay log
画像

[root@mysqlb relaybin]# mysqlbinlog -vv slave-relay-bin.000013
画像
从库照例又生成了一个slave-relay-bin.000013,不过这个依然是个空日志

启动从库的slave线程
(root@localhost)[hello]> start slave;

ライブラリの状態からExec_Master_Log_Posは、Read_Master_Log_Posの成長を変更していない、と私はなぜ、SQLスレッドの実行がそれをログに記録しますが、スレッドシステムロックよりも、よりここに理解していない見ることができますか?
画像

リレーログをチェックしてください

画像

[ルート@ mysqlbのrelaybin]#mysqlbinlogは-vvスレーブリレー-bin.000014
画像

あなたは、スタートスレーブスレッドを参照してください、だけでなく、新しいリレーログを生成し、そして以前に実行し、実際に新たなリレーログにないログエントリを中継することができた後。モーメントSQLスレッドがリレーログを実行していない時でも、あるべきシステムロックは遊びです。

ズームトリックは、ロック解除の目的を達成するために、ライブラリから再起動し、スレーブスレッドを開始します
画像

Slave_SQL_Running_Stateは今見ることができるロックアップシステムではありません。

リポジトリデータからテーブルt2が参照してくださいので、ONに設定し、ライブラリrelay_log_recoveryからそれを確認し、メインリレーログが矛盾からライブラリーから生じた損傷を避けることができ、見やデータの損失なしにすることができます。
画像


IVの概要

それは、好ましくは、ライブラリからONにrelay_log_recoveryで提供されています。状況が何であるかを知っている任意のエキスパートシステムロックがあれば、我々はあなたのメッセージをお待ちしております。あなたが助け場合の書き込みは、容易ではない、私はあなたが賞賛、激励のブロガーを指して願っています。

おすすめ

転載: www.cnblogs.com/ddzj01/p/11592148.html