状況の説明: 今日、MySQL データベースのスレーブ ノード ホストにログインしたところ、/var/lib/mysql に大量の mysql-relay-bin ファイルが格納されているのを発見しました。最も古いファイル作成日は 2018 年でした。スレーブ ライブラリがマスターのログ操作記録を同期した後、これらのファイルは削除されると記憶しています (デフォルト設定では削除されませんでしたが、間違って記憶していました)。そこで、スレーブ ライブラリのステータスを確認したところ、次のエラーが見つかりました。 mysql> スレーブステータスを表示します\G; ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: *.*.*.* マスターユーザー: dbsync マスターポート: 3306 接続再試行: 60 マスターログファイル:mysql-bin.000095 読み取りマスターログ位置: 869242147 リレーログファイル:mysqld-relay-bin.000146 リレーログ位置: 871280529 リレーマスターログファイル: mysql-bin.000075 スレーブIO実行中: はい スレーブSQL実行中: いいえ Replicate_Do_DB: cdb、cdb_admin レプリケート_無視_DB: mysql テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 1594 Last_Error: リレー ログの読み取り失敗: リレー ログ イベント エントリを解析できませんでした。考えられる原因は、マスターのバイナリ ログが破損している (バイナリ ログで 'mysqlbinlog' を実行すると確認できます)、スレーブのリレー ログが破損している (リレー ログで 'mysqlbinlog' を実行すると確認できます)、ネットワークの問題、またはマスターまたはスレーブの MySQL コードのバグです。マスターのバイナリ ログまたはスレーブのリレー ログを確認する場合は、このスレーブで 'SHOW SLAVE STATUS' を発行すると、それらの名前を知ることができます。 スキップカウンタ: 0 実行マスターログポジション: 871280384 リレーログスペース: 19994786573 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: NULL Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 0 最後のIOエラー: 最終SQLエラー番号: 1594 Last_SQL_Error: リレー ログの読み取り失敗: リレー ログ イベント エントリを解析できませんでした。考えられる原因は、マスターのバイナリ ログが破損している (バイナリ ログで 'mysqlbinlog' を実行すると確認できます)、スレーブのリレー ログが破損している (リレー ログで 'mysqlbinlog' を実行すると確認できます)、ネットワークの問題、またはマスターまたはスレーブの MySQL コードのバグです。マスターのバイナリ ログまたはスレーブのリレー ログを確認する場合は、このスレーブで 'SHOW SLAVE STATUS' を発行すると、それらの名前を知ることができます。 セット内の 1 行 (0.00 秒) エラー: クエリが指定されていません 理由: マスターノード上のmysql-bin.00007という形式の名前のファイル(mysql-bin.000075を含む)を削除しました。その結果、スレーブライブラリはファイルを見つけられず、同期できませんでした。 解決: 1. スレーブライブラリの同期位置を再指定します。 (実現不可能) スレーブ停止; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000095',MASTER_LOG_POS=869242147; //mysql マスター ノード スレーブ上の mysql-bin.000095 の既存の位置 start; スレーブ ノードで show slave status を実行すると、依然としてエラー メッセージが報告されます。具体的なエラー メッセージは書き留めていませんが、errno が 1236、Slave_IO_Running プロセスが実行されておらず、Slave_SQL_Running プロセスが実行されていることを覚えています。一般的な説明は、特定のライブラリのテーブルに問題があるということです。 異なる同期場所 (エラーが報告された場所、マスター上の mysql-bin-000095 が書き込まれた場所) を指定するために複数回試行した後も、エラーは引き続き発生しました。 実際、テーブル レコードにはすでに問題があります。説明に記載されているテーブルを例に挙げてみましょう。スレーブ データベースには約 1,200 件のレコードが格納されていますが、マスター データベースには 1,900 件を超えるレコードがあります。このデータを手動で追加しない限り、操作データを記録したログが失われている (私が削除した) ため、最新の一貫したログ操作実行場所を見つけることができません。 2. スレーブライブラリをやり直します。 データの差が大きすぎるため、問題は 1 つのテーブルに限定されないと思われるため、スレーブ データベースをクリーンにしてやり直してください。 2) マスター ノードとスレーブ ノードのトラフィックの状態をチェックし (show processlist)、再実行するスレーブ データベースにビジネス トラフィックが接続されていないことを確認します。 3) マスターノード上のスレーブプロセスを停止します。 (止まってから開けてないので、問題がないかは分かりません。様子見します) 4) マスターノード上のライブラリのログレコードの場所を記録し、データベースをバックアップします。 mysql> マスターステータスを表示します。 +------------------+----------+--------------------------------+------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------------------------+------------------+ | mysql-bin.000095 | 871760173 | cdb、cdb_admin | mysql | +------------------+----------+--------------------------------+------------------+ セット内の1行(0.01秒) mysqldump -u root -p --databases cdb、cdb_admin > bak.master.sql 5) 安全のために、スレーブ ノード ライブラリをバックアップします。 mysqldump -u root -p --databases cdb、cdb_admin > bak.slave.sql 6) 再起動: マスターデータベースのバックアップファイルをスレーブノードにコピーし、バックアップファイルをインポートします。 mysql -u ルート -p < bak.master.sql 7) スレーブ ノードで、マスター ログを読み取る場所を再指定します。 スレーブ停止; MASTER を MASTER_LOG_FILE='mysql-bin.000095'、MASTER_LOG_POS=871760173 に変更します。//POS は、スレーブ開始時に記録されたマスター ノードのログ レコード位置です。 8) スレーブ ノードでスレーブ ステータスを表示します。この時点で、Slave_IO_Running と Slave_SQL_Running は両方とも実行中です。スレーブ ステータスを更新すると、Read_Master_Log_Pos の値も増加し始め、同期が再び開始されます。 要約: ファイルをクリーンアップするときは、マスター ノードとスレーブ ノードのログの読み取りと書き込みにおける mysql-bin ファイルの場所に注意してください。削除する前に、マスターノードとスレーブノードの両方でログ位置が読み取られていることを確認する必要があります。無作為に削除しないでください。そうしないと、スレーブデータベースが同期できなくなります。スレーブノードでマスターログの読み取り位置を強制的に指定したり、エラーをスキップしたりした場合でも、スレーブデータベースでデータが失われる可能性を排除できません。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Nodejs は readline を使用してコンテンツ入力を促すサンプルコード
>>: Linux でシェル スクリプトを使用して jar パッケージ プロジェクトを展開するための完全な手順
画像アクセラレータ中国の Docker Hub からイメージをプルすることが難しい場合があります。こ...
ファイル内の文字列の数を数えることは、実際には砂の中の石を探すようなものです。ある人は、石を見た後に...
目次混合継承の影響: 1. 継承Vue.extend メソッドプロパティを拡張する2. ミックスイ...
目次1. 現在のシステムにMySQLがインストールされているかどうかを確認する2. インストールされ...
目次序文1. gzip圧縮を設定する2. 詳細設定3. nginxサービスを再起動する要約する序文ウ...
時には、Web ページに掲載されているコンテンツが悪意のある人物に盗用されるのを望まないため、Web...
1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...
Linux でパーティションのファイル システム タイプを確認する方法。パーティションのファイル シ...
私はインターネット上で数え切れないほどの my.cnf 構成を読みましたが、言及されている構成のほと...
MySQL_8.0.2のオフラインインストール方法は参考までに。具体的な内容は以下のとおりです。次の...
目次背景1) yumのkeepchche機能を有効にする: 方法1 2) yum-utils ソフト...
ユニアプリコード <テンプレート> <表示> <image v-for...
1. データベースを作成する 2. テーブルを作成する1. deptテーブルを作成する テーブル「d...
Windows 10 に Docker をインストールする場合、コンテナタイプを Linux コンテ...
新しいCSS3プロパティと互換性ありCSS3では、プラグインprefixfree.min.jsを使用...