MySQL 5.6 マスタースレーブエラー報告の実践記録

MySQL 5.6 マスタースレーブエラー報告の実践記録

1. 問題の症状

バージョン: MySQL 5.6、従来の binlog ファイルと pos 方式を使用して構成されたマスター/スレーブ レプリケーション構造を使用します。

インスタンスが再起動されると、マスター-スレーブ レプリケーション エラーが上図のように表示されます。

2. エラーの意味

エラーは2つの部分に分かれています。

パート1

  • クライアントは、ファイル サイズより大きい位置からレプリケーションを開始するようにマスターに要求しました。
  • 最初のイベント 'mysql-bin.000398' は 163800795 で、最後のイベントは './mysql-binlog.000398' から 4 で読み取られ、最後のバイトは './mysql-bin.000398' から 4 で読み取られました。

パート1

この部分はメインライブラリのDUMPスレッド関数から来ています

mysql_binlog_send
 ->送信者.run()
  ->Binlog_sender::init
    ->Binlog_sender::check_start_file

 ((ファイル = open_binlog_file(&cache, m_linfo.log_file_name, &errmsg)) < 0)の場合 
 {
  致命的なエラーを設定します。
  1 を返します。
 }

 サイズ = my_b_filelength(&cache);
 end_io_cache(&cache);
 mysql_file_close(ファイル、MYF(MY_WME));

 (m_start_pos > サイズ)の場合
 {
  set_fatal_error("クライアントがマスターにレプリケーションの開始を要求しました"
          "位置 > ファイルサイズ");
  1 を返します。
 }

キーとなるのは 2 つの値 m_start_pos と size です。m_start_pos はライブラリから読み取る必要がある位置から取得されます。そして、size はこの binlog ファイルのサイズなので、IO スレッドに必要な POS ポイントがこの binlog ファイルのサイズより大きい場合は当然間違っていることが容易に理解できます。

パート2

この部分もDUMPスレッドから来ています

mysql_binlog_send
 ->送信者.run()
   ->Binlog_sender::init
   ->while (!has_error() && !m_thd->killed)
   #正常であれば、ここでループを開始し、binlog イベントを読み取ります。エラーがある場合は、次のロジックを続行します。#読み取りエラーがある場合は、エラーを報告します my_snprintf(error_text, sizeof(error_text),
         "%s; %lld の最初のイベント '%s'、"
         "%lld に '%s' から読み取られた最後のイベント"
         "%lld で '%s' から読み取られた最後のバイト。",
         m_errmsg、
         m_start_file、m_start_pos、m_last_file、m_last_pos、
         log_file、my_b_tell(&log_cache));

ここでは主に m_start_pos と m_last_pos に注目します。実際、m_start_pos はスレーブ ライブラリから読み取る必要のある位置情報であり、これは以前のエラー レポートと一致しています。また、m_last_pos はダンプ スレッドから取得され、最後に読み取られた位置です。明らかに、ここでは一度も読み取られていないため、位置は初期位置 4 です。

3. 考えられる原因

分析の結果、最も可能性の高い理由は sync_binlog に関連していると思われます。

1 に設定しないと、OS キャッシュがディスクにフラッシュされない可能性があります。メイン ライブラリ サーバーがクラッシュして直接再起動すると、この問題が簡単に発生する可能性があります。

簡単に Google 検索してみたところ、これらのエラーのほとんどは、サーバーのクラッシュと sync_binlog が 1 に設定されていないことが原因であることがわかりました。

これも私たちの主張を証明しています。

最後に、問題のあるデータベースのメイン データベースが実際に double 1 に設定されていないことを確認しました。

この小さな事例を通じて、ダブル 1 を設定することの重要性をより深く認識しました。

要約する

これで、MySQL 5.6 マスター スレーブ エラー レポートに関するこの記事は終了です。MySQL 5.6 マスター スレーブ エラー レポートに関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL5.6 マスタースレーブレプリケーション同期詳細設定(画像とテキスト)
  • MySQL5.6 データベースのマスタースレーブ同期のインストールと構成の詳細 (マスター/スレーブ)
  • MySQL5.6 レプリケーション マスタースレーブレプリケーション(読み書き分離)構成 完全版
  • MySQL5.6 マスタースレーブレプリケーション (mysql データ同期構成)
  • MySQL 5.6.14 マスタースレーブレプリケーション(MySQL ABレプリケーションとも呼ばれる)環境設定方法
  • MYSQL5.6.33 データベース マスター/スレーブ (マスター/スレーブ) 同期のインストールと構成の詳細 (マスター-Linux スレーブ-windows7)

<<:  jQuery キャンバスで画像検証コード例を描画する

>>:  CSS @font-face パフォーマンス最適化の詳細な理解

推薦する

Hタグの定義と注意事項について簡単に説明します

結果から判断すると、タイトルを定義するための固定パターンはなく、すべてむしろランダムな感じがします。...

Dockerコンテナとホスト間のデータ相互作用の概要

序文実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共...

dockerを使用してdubboプロジェクトをデプロイする方法

1. まず、Springbootを使用して簡単なDubboテストプログラムを構築し、関連する依存関係...

Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法

同じサーバーで、Docker を使用して Mysql のマスター スレーブ同期設定をシミュレートしま...

MySQLでTEXT/BLOB型を使用する際の注意点を詳しく説明します

1. TEXTとBLOBの違いTEXT ファミリと BLOB ファミリの唯一の違いは、BLOB 型は...

Vue 3 で Vue Router リンクを拡張する方法

序文<router-link> タグは、Vue アプリ内のさまざまなページ間を移動するた...

Docker に Kong ゲートウェイをインストールする方法の例

1. Dockerネットワークを作成する docker ネットワーク作成 kong-net 2. デ...

虫眼鏡コンポーネントのネイティブ js 実装

この記事の例では、参考までに虫眼鏡コンポーネントを開発するためのjsの具体的なコードを共有しています...

ウェブページの背景色を制御する CSS コード

誰もが自分の Web ページの背景にふさわしい画像を見つけることに悩むことが多いと思います。これは事...

MySQL 4G メモリ サーバー構成の最適化

会社のウェブサイトのアクセス数が増えてくると(1日10万PV以上)、当然MySQLがボトルネックにな...

MySQL における楽観的ロック、悲観的ロック、MVCC の包括的な分析

序文データベースの実際の使用では、データの書き込みや読み取りを同時に行わないことが必要な状況によく遭...

Vue3 の使用 (パート 1) Vue CLI プロジェクトの作成

目次1. 公式ドキュメント2. Vue CLIプロジェクトを作成する1. Vue CLIをインストー...

TypeScript 開発のための 6 つの実用的なヒント

目次1. 開発前にエンティティの種類を決定する2. インターフェースをリクエストするときは、使用する...

XHTMLコードの一般的なアプリケーション問題をまとめる

時間が経つにつれて、多くの人が XHTML の使い方を知らないことに気づきました。普通の初心者だけで...

Linux における nohup と & の使い方と違いの詳細な説明

例:例として、Python コード loop_hello.py を使用します。このコードは、ループ回...