MySQL フルバックアップ 1. バイナリログを有効にし、データベースから分離して別々に保存する vim /etc/my.cnf に追加 log_bin=/data/bin/mysql-bin /data/binフォルダを作成し、承認する chown mysql.mysql /data/bin 2. バックアップデータベースを完了する mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz 3. データベースの追加、削除、変更 INSERT hellodb.students(生徒名、名前、性別、年齢) VALUE(27,'Lujunyi','M',30); 4. MySQLを停止する systemctl mariadb.service を停止します 5. バックアップファイルを解凍する unxz /data/all.sql.xz 6. フルバックアップ中にバイナリログの場所を見つける vim /data/all.sql マスターを MASTER_LOG_FILE='mysql-bin.000001'、MASTER_LOG_POS=468 にハングアップします 7. バックアップが完了したらバイナリログをエクスポートします。 mysqlbinlog --start-position=468 /data/bin/mysql-bin.000001 > /data/inc.sql 8. データを復元する mysql -e 'ソース /data/all.sql' mysql -e 'ソース /data/inc.sql' 9. 検証が完了しました。 誤って削除した場合の回復 1. バイナリログを有効にし、データベースとは別に保存する vim /etc/my.cnf に追加 log_bin=/data/bin/mysql-bin /data/binフォルダを作成し、承認する chown mysql.mysql /data/bin 2. データベースの完全バックアップを実行する mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz 3. データベースの追加、削除、変更 mysql -e "hellodb.students テーブルを削除します" mysql -e "hellodb.teachers 値 (5,'wangqi',50,'M') を挿入" 4. サービスを停止する systemctl mariadb.service を停止します 5. データベースを削除する rm -rf /var/lib/mysql/* 6. バックアップファイルを解凍する unxz /data/all.sql.xz 7. バックアップファイルを表示し、バイナリノードを見つける vim /data/all.sql -- MASTER を MASTER_LOG_FILE='mysql-bin.000004'、MASTER_LOG_POS=521902 に変更します。 8. バイナリログノードデータをエクスポートする mysqlbinlog --start-position=521902 /data/bin/mysql-bin.000004 >/data/inc.sql 9. バイナリログノードデータでエラーの原因となったコマンドを削除します。 vim /data/inc.sql DROP TABLE `hellodb`.`students` /* サーバーによって生成されました */ 10. サービスを開始する systemctl mariadb.service を開始します。 11. バイナリログをオフにする mysql -e "SET sql_log_bin=off" 12. バックアップデータをインポートする mysql </data/all.sql mysql </data/inc.sql 13.検証が完了しました。 マスタースレーブレプリケーション # プライマリサーバー 1. マスターサーバーでバイナリログを有効にし、バイナリディレクトリを変更する vim /etc/my.cnf log_bin=/data/bin/mysql-bin binlog 形式 = 行 server-id=1 (マスターサーバーとスレーブサーバーは異なる必要があります) 上記のようにディレクトリを変更します 2. サービスを再起動する サービスmysqlの再起動 3. データをコピーするためのアカウントを作成する mysql -e '"centos" によって識別される "repluser"@"172.22.7.%" に *.* のレプリケーション スレーブを許可します 4. マスターサーバーで使用されているバイナリログを表示する マスターログを表示します。 +------------------+-----------+ | ログ名 | ファイルサイズ | +------------------+-----------+ |mysql-bin.000001 | 14383 | +------------------+-----------+ セット内の 1 行 (0.00 秒) # サーバーから 5. その他の設定 vim /etc/my.cnf サーバーID=2 読み取り専用 #log-bin=/data/bin/mysql-bin 6. サービスを開始する サービスmysqlの再起動 7. メインサービスを関連付ける MariaDB [(なし)]> マスターを MASTER_HOST='172.22.7.70'、MASTER_USER='repluser'、MASTER_PASSWORD='centos'、MASTER_PORT=3306、MASTER_LOG_FILE='mysql-bin.000001'、MASTER_LOG_POS=14383 に変更します。 8. スレーブサーバーのステータスを確認する スレーブステータスを表示\G; 9. スレッドを開始する スレーブを起動します。 #テスト 10. マスター サーバー上のデータを追加、削除、変更し、スレーブ サーバー上のデータが同期されているかどうかを確認します。 マスタースレーブレプリケーションエラーの解決策 - sql_slave_skip_counter #マスターサービス IP=172.22.7.70 1. マスターサーバーでバイナリログを有効にし、バイナリディレクトリを変更する vim /etc/my.cnf log_bin=/data/bin/mysql-bin binlog 形式 = 行 server-id=1 (マスターサーバーとスレーブサーバーは異なる必要があります) 上記のようにディレクトリを変更します 2. サービスを再起動する サービスmysqlの再起動 3. データをコピーするためのアカウントを作成する mysql -e '"centos" によって識別される "repluser"@"172.22.7.%" に *.* のレプリケーション スレーブを許可します 4. マスターサーバーで使用されているバイナリログを表示する mysql -e 'マスターログを表示;' +------------------+-----------+ | ログ名 | ファイルサイズ | +------------------+-----------+ |mysql-bin.000001 | 264 | |mysql-bin.000002 | 245 | +------------------+-----------+ #スレーブサービス IP=172.22.7.71 5. 設定ファイルを変更してサービスを開始する vim /etc/my.cnf [mysqld] サーバーID = 2 読み取り専用 systemctl で mariadb を起動します。 #構成エラー マスター サービス情報 6. 設定、マスターを マスターを変更 MASTER_HOST='172.22.7.77', MASTER_USER='ワン', MASTER_PASSWORD='lodman', マスターポート=3306、 MASTER_LOG_FILE=log-bin.001', マスターログPOS=4、 MASTER_CONNECT_RETRY=10; 7. スレーブステータスを確認する mysql -e 'スレーブステータスを表示\G' スレーブ_IO_状態: マスターホスト: 172.22.7.77 マスターユーザー: wang マスターポート: 3306 接続再試行: 10 マスターログファイル: log-bin.001 読み取りマスターログ位置: 4 リレーログファイル: ct7m1-relay-bin.000001 リレーログ位置: 4 リレーマスターログファイル: log-bin.001 スレーブIO実行中: いいえ スレーブSQL実行中: いいえ ・・・・・・・・・わずかに 8. コピースレッドを開始する mysql -e 'スレーブを起動' 9.スレーブの状態を再度確認する mysql -e 'スレーブステータスを表示\G' スレーブ_IO_状態: マスターホスト: 172.22.7.77 マスターユーザー: wang マスターポート: 3306 接続再試行: 10 マスターログファイル: log-bin.001 読み取りマスターログ位置: 4 リレーログファイル: ct7m1-relay-bin.000001 リレーログ位置: 4 リレーマスターログファイル: log-bin.001 Slave_IO_Running: 接続中 スレーブSQL実行中: はい ・・・・・・・・・わずかに 10.マスターサービスがデータを追加、削除、変更する 11. スレーブ サービスが同期されているかどうかを確認します。失敗しました。 #エラーを解決する 12. スレーブレプリケーションスレッドサービスを停止してリセットする mysql -e 'スレーブを停止' mysql -e 'スレーブをリセット' 13. 正しい変更マスターを情報に設定する マスターをMASTER_HOST='172.22.7.70'に変更します。 MASTER_USER='repluser', MASTER_PASSWORD='centos', マスターポート=3306、 MASTER_LOG_FILE='mysql-bin.000002', マスターログPOS = 245; 14.スレーブステータスを確認する スレーブステータスを表示\G; Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 172.22.7.70 マスターユーザー: repluser マスターポート: 3306 接続再試行: 10 マスターログファイル:mysql-bin.000002 読み取りマスターログ位置: 7382 リレーログファイル: ct7m1-relay-bin.000002 リレーログ位置: 540 リレーマスターログファイル: mysql-bin.000002 スレーブIO実行中: はい スレーブSQL実行中: いいえ 15. スレーブステータスに Slave_SQL_Running: No が見つかりました。次のコマンドを実行して YES に変更します。 MariaDB [(なし)]> スレーブを停止します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) MariaDB [(なし)]> GLOBAL SQL_SLAVE_SKIP_COUNTER=1 を設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) MariaDB [(なし)]> スレーブを起動します。 クエリは正常、影響を受けた行は 0 行 (0.03 秒) MariaDB [(なし)]> スレーブステータスを表示します\G; ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 172.22.7.70 マスターユーザー: repluser マスターポート: 3306 接続再試行: 10 マスターログファイル:mysql-bin.000002 読み取りマスターログ位置: 7382 リレーログファイル: ct7m1-relay-bin.000003 リレーログ位置: 540 リレーマスターログファイル: mysql-bin.000002 スレーブIO実行中: はい スレーブSQL実行中: はい ・・・・・・・・・わずかに 16.スレーブサービスデータが同期されているかどうかを確認する 17. 同期が完了しました。 MySQL カスケードレプリケーション 実稼働環境では、マスター ノードが最初にデータを中間スレーブ ノードに同期し、次にスレーブ ノードがデータを後続のスレーブ ノードにコピーするマスター スレーブ レプリケーション方式が採用されています。このレプリケーション方式は、カスケード レプリケーションと呼ばれます。 カスケード レプリケーションの利点は、プライマリ ノードへの負荷を大幅に軽減できることです。 カスケード レプリケーションでは、構成時に中間ノードで log_slave_updates オプションを有効にする必要があります。 #環境 サーバー マスター スレーブ スレーブ システム centos7 centos7 centos7 172.22.7.70 172.22.7.70 172.22.7.71 #マター 1. マスターサーバーでバイナリログを有効にし、バイナリディレクトリを変更する vim /etc/my.cnf log_bin=/data/bin/mysql-bin binlog 形式 = 行 server-id=1 (マスターサーバーとスレーブサーバーは異なる必要があります) 上記のようにディレクトリを変更します 2. サービスを再起動する サービスmysqlの再起動 3. データをコピーするためのアカウントを作成する mysql -e '"centos" によって識別される "repluser"@"172.22.7.%" に *.* のレプリケーション スレーブを許可します 4. マスターサーバーで使用されているバイナリログを表示する mysql -e 'マスターログを表示;' +------------------+-----------+ | ログ名 | ファイルサイズ | +------------------+-----------+ |mysql-bin.000001 | 264 | |mysql-bin.000002 | 7488 | | mysql-bin.000003 | 402 | +------------------+-----------+ #奴隷 5. 設定ファイルを変更し、バイナリログディレクトリを作成する vim /etc/my.cnf [mysqld] ログ bin = /data/bin/mysql-bin binlog 形式 = 行 読み取り専用 ログスレーブ更新 サーバーID=2 ディレクトリの変更は上記を参照 6. サービスを開始する systemctl で mariadb を再起動します。 7. 変更マスターを情報に設定する マスターを MASTER_HOST='172.22.7.70'、MASTER_USER='repluser'、MASTER_PASSWORD='centos'、MASTER_PORT=3306、MASTER_LOG_FILE='mysql-bin.000003'、MASTER_LOG_POS=402 に変更します。 8. スレーブスレッドを開始する mysql -e 'スレーブを起動' 9. スレーブステータスを確認する スレーブステータスを表示\G; ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 172.22.7.70 マスターユーザー: repluser マスターポート: 3306 接続再試行: 60 マスターログファイル: mysql-bin.000003 読み取りマスターログ位置: 7539 リレーログファイル: ct7m1-relay-bin.000002 リレーログ位置: 7677 リレーマスターログファイル: mysql-bin.000003 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: 10. マスター上のデータを追加、削除、変更してテストし、表示する #奴隷1 11.スレーブ上のデータをスレーブにコピーする mysqldump -A --single-transaction -F --master-data=1 > /data/all.sql scp /data/all.sql 172.22.7.72:/data 12. スレーブはデータをコピーするためのアカウントを作成する mysql -e '"centos" によって識別される "repluser"@"172.22.7.%" に *.* のレプリケーション スレーブを許可します 13. スレーブ1の設定を変更する vim /etc/my.cnf [mysqld] 読み取り専用 サーバーID=3 14. サービスを開始する systemctl で mariadb を起動します。 15. スレーブサーバーのバイナリログを表示する mysql -e 'マスターログを表示' +------------------+-----------+ | ログ名 | ファイルサイズ | +------------------+-----------+ |mysql-bin.000001 | 351 | |mysql-bin.000002 | 351 | |mysql-bin.000003 | 351 | |mysql-bin.000004 | 25552 | |mysql-bin.000005 | 586 | +------------------+-----------+ 16. all.sqlファイルを開き、変更マスターの情報を変更します。 マスターを MASTER_HOST='172.22.7.71'、MASTER_USER='repluser'、MASTER _PASSWORD='centos'、MASTER_PORT=3306、MASTER_LOG_FILE='mysql-bin.000005'、MASTER_LOG_POS=586 に変更します。 17. スレーブデータのインポート mysql < /data/all.sql 18. スレッドを開始する mysql -e "スレーブを開始" 19. スレーブステータスを確認する mysql -e "スレーブステータスを表示\G;" 20. マスターオブジェクトを追加、削除、変更して同期されているかどうかを確認します。 21. 同期が完了しました。 MySQL 半同期 非同期レプリケーションとは、ユーザーがレコードを書き込むときに、データが最初にマスターノードに書き込まれ、次に書き込み成功メッセージがユーザーに返信され、その後データが後ろの他のスレーブノードにゆっくりとコピーされることを意味します。これの利点は、効率が比較的高いことですが、欠点も非常に明白です。マスターサーバーとスレーブサーバー間の遅延が大きすぎると、マスターサーバーが突然故障し、データ損失が発生します。 同期レプリケーションとは、ユーザーがレコードを書き込むと、マスター ノードがデータをデータベースに書き込み、そのデータを背後にある他のスレーブ ノードにコピーすることを意味します。すべてのスレーブ ノードがデータが正常にコピーされたというメッセージを返すと、マスター ノードはデータが正常にアクセスされたことをユーザーに応答します。この方法の利点は、データのセキュリティが確保されることですが、効率性が犠牲になります。 半同期レプリケーションは、同期レプリケーションと非同期レプリケーションの中間のレプリケーション方法です。その動作原理は次のとおりです。ユーザーが書き込み操作を実行すると、マスターノードはデータを背後にある他のスレーブノードに送信します。1 つのスレーブノードがレプリケーション成功のメッセージを返す限り、マスターノードは直接書き込み成功を返します。マスターノードの背後にあるスレーブノードがレプリケーション成功メッセージを返さない場合は、タイムアウト期間が発生します。タイムアウト期間に達すると、マスターノードはまずレプリケーションが成功したことをユーザーに通知するメッセージを返し、その後、スレーブノードへのデータのレプリケーションを続行します。 #マスタースレーブレプリケーションを構成します。手順については上記を参照してください。 #半同期の設定 ##マスター 1. プラグインを有効にするために設定ファイルを変更する vim /etc/my.cnf [mysqld] ログ bin = /data/bin/mariadb-bin binlog 形式 = 行 サーバーID=1 rpl_semi_sync_master_enabled 2. サービスを再起動します。 systemctl で mariadb を再起動します。 3. プラグインが起動しているかどうかを確認する '%semi%' のようなグローバル変数を表示します。 +------------------------------------+-------+ | 変数名 | 値 | +------------------------------------+-------+ | rpl_semi_sync_master_enabled | オン | | rpl_semi_sync_master_timeout | 3000 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_no_slave | オン | +------------------------------------+-------+ セット内の 4 行 (0.00 秒) 4. タイムアウト期間を設定する グローバル rpl_semi_sync_master_timeout=3000 を設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) ##奴隷 5. プラグインを有効にするために設定ファイルを変更する vim /etc/my.cnf [mysqld] ログ bin = /data/bin/mariadb-bin binlog 形式 = 行 サーバーID=2 rpl_semi_sync_master_enabled 6. サービスを再起動します。 systemctl で mariadb を再起動します。 7. プラグインが起動しているかどうかを確認する '%semi%' のようなグローバル変数を表示します。 +------------------------------------+--------------+ | 変数名 | 値 | +------------------------------------+--------------+ | rpl_semi_sync_master_enabled | オン | | rpl_semi_sync_master_timeout | 1000 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_no_slave | オン | | rpl_semi_sync_master_wait_point | AFTER_COMMIT | +------------------------------------+--------------+ セット内の行数は 5 です (0.00 秒) 8. コピースレッドを開始する mysql -e "スレーブを開始"; 9. テストと検査 10. 同期が完了しました 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: VMware に Centos8 をインストールする詳細なチュートリアル
WSLとはBaidu 百科事典からの一節を引用します。 Windows Subsystem for ...
Dockerfile では、run、cmd、entrypoint はすべてコマンドを実行するために使...
背景最近、SQL 文を書くときに、IN と Exists のどちらを選択するか迷ったので、両方の方法...
目次序文グローバルパラメータの永続性最後に要約する参考資料:序文2018 年に MySQL 8.0....
この記事では、参考として MySQL 5.7.23 のインストール チュートリアルを記録します。 1...
目次前面に書かれた双方向暗号化エンコード/デコードAES_ENCRYPT/AES_DECRYPT D...
みなさんこんにちは。私は梁旭です。 Linux を使用するときに、計算を行う必要がある場合があり、そ...
目次1. GTIDの基本概念2. GTIDの利点3. GTIDの仕組み4. 従来のレプリケーションに...
仕事ではリモート サーバーが必要になることが多く、次の 2 つの問題に遭遇することがよくあります。 ...
1. Webプロジェクトを作成したら、Tomcatを例にサーバーを構成する必要があります。 2. 実...
序文Linux カーネルでは、netfilter は、パケット フィルタリング、ネットワーク アドレ...
今日は簡単な3Dルービックキューブを作ってみましょうまずはレンダリングを見てみましょう!これを学んだ...
現在、コンピュータモニターの画面解像度はますます高くなる傾向にありますが、携帯電話などのモバイルデバ...
int(1) の長さ 1 は、許可されたストレージ幅を表していないことはすでにご存知かもしれません...
<br />ウェブサイトのアクセス速度はウェブサイトのトラフィックに直接影響を及ぼし、ウ...