ホームページ  >  記事  >  データベース  >  mysqlのマスターとスレーブが同期される理由は何ですか?

mysqlのマスターとスレーブが同期される理由は何ですか?

青灯夜游
青灯夜游オリジナル
2022-01-05 16:09:546214ブラウズ

mysql マスターとスレーブが同期される理由: 1. ネットワーク遅延; 2. マスター マシンとスレーブ マシンの負荷が一致しない; 3. 「max_allowed_pa​​cket」設定が一致しない; 4. キー値の開始キーの増分と自動増分ステップの設定が一致していない; 5. データベースのバージョンが一致していないなど。

mysqlのマスターとスレーブが同期される理由は何ですか?

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

# mysql マスターが同期しない原因の分析

#1. ネットワーク遅延

# #Mysql によるマスター/スレーブ レプリケーションは、binlog に基づく非同期レプリケーションです。binlog ファイルはネットワーク経由で送信されます。もちろん、ネットワーク遅延は、マスター/スレーブ同期の理由のほとんどです。特にコンピューター ルーム間のデータ同期の場合、このようなことが起こる可能性は非常に高いので、読み取りと書き込みを分離し、ビジネス層からの初期の設計に注意を払ってください。

2. マスター マシンとスレーブ マシンの負荷が一貫していない

mysql マスター/スレーブ レプリケーションはマスター データベースで io スレッドを開始し、上から 1 つの SQL を開始するためです。スレッド数と 1 io スレッドの場合、いずれかのマシンの負荷が高くビジーすぎるため、いずれかのスレッドのリソースが不足し、マスターとスレーブの不一致が発生します。

3. Max_allowed_pa​​cket 設定に一貫性がない

マスター データベースに設定された max_allowed_pa​​cket は、スレーブ データベースの max_allowed_pa​​cket よりも大きいです。マスター データベース、スレーブ データベース データベースの設定が小さすぎるため実行できず、マスターとスレーブの不整合が発生します。

4. キー自動インクリメントキーを起点とするキー値と自動インクリメントステップ設定の不一致によるマスタスレーブ不一致。

5. mysql が異常ダウンしたときに、sync_binlog=1 または innodb_flush_log_at_trx_commit=1 が設定されていない場合、binlog またはリレーログ ファイルが破損する可能性が非常に高く、その結果、master-スレーブの不一致。

6. mysql 自体のバグによって引き起こされるマスターとスレーブの同期。

7. データベースのバージョンが一致しない 、特に上位のバージョンがマスターで下位のバージョンがスレーブの場合、マスター データベースでサポートされている機能は、データベースではサポートされません。スレーブデータベースです。

#解決策

方法 1: エラーを無視した後、同期を続行します

この方法は適用可能 マスターとスレーブのデータベースのデータに大きな違いがない場合、データを完全に統合する必要がない場合、またはデータ要件が厳密ではない場合、

解決策:

stop slave;

は、ステップ エラーであり、次の数値が発生する可能性があります。

set global sql_slave_skip_counter =1;
start slave;

を変更した後、mysql>show smile status\G を使用して確認します:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

ok、マスターとスレーブの同期ステータスは正常になりました。 。 。

方法 2: マスターとスレーブを再作成し、完全に同期する

この方法は、マスターとスレーブのデータベース内のデータが大きく異なる状況に適しています。またはデータを完全に統合する必要があります

解決策の手順は次のとおりです:

#1. まずメイン データベースに入り、データが書き込まれないようにテーブルをロックします

コマンドを使用します:

mysql> flush tables with read lock;

注: ここではロックが読み取り専用状態になっており、ステートメントでは大文字と小文字が区別されません

2. データのバックアップ

バックアップデータを mysql.bak.sql ファイルにコピーします

mysqldump -uroot -p -hlocalhost > mysql.bak.sql

ここで注意してください: データベースのバックアップは必ず実行する必要があります。定期的にバックアップするには、シェル スクリプトまたは Python スクリプトを使用できます。これはより便利であり、確実にデータを確実に保存できます

3. マスターのステータスを確認します

mysql> show master status;
+-------------------+----------+--------------+-------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+-------------------------------+
| mysqld-bin.000001 | 3260 | | mysql,test,information_schema |
+-------------------+----------+--------------+-------------------------------+
1 row in set (0.00 sec)

4. mysql バックアップ ファイルをスレーブ マシンに転送し、データ回復を実行します

scp コマンドを使用します

scp mysql.bak.sql root@192.168.128.101:/tmp/

5。スレーブ ライブラリのステータスを停止します

mysql> stop slave;

6。次に、スレーブ ライブラリから mysql コマンドを実行し、データ バックアップをインポートします

mysql>source /tmp/mysql.bak.sql

7. スレーブ ライブラリからの同期を設定します。そこでの同期ポイント、つまり 2 つの項目 | ファイル | マスター ライブラリの show master status 情報の位置

change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;

8 に注目してください。スレーブ同期を再起動します

mysql> start slave;

9。同期ステータスを確認します

mysql> show slave status\G

View:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

[関連する推奨事項:

mysqlビデオチュートリアル

]

以上がmysqlのマスターとスレーブが同期される理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。