mysql5.6 マスタースレーブ設定と非同期の問題の詳細な説明

mysql5.6 マスタースレーブ設定と非同期の問題の詳細な説明

システム: centos6.6

マスター: 192.168.142.129 mysql-5.6.30.tar.gz

送信元: 192.168.142.130 192.168.142.131 mysql-5.6.30.tar.gz

1. MySQL マスタースレーブレプリケーションの原理

mysql5.6 マスタースレーブ設定とマスタースレーブ非同期問題

(1)マスターはバイナリログに変更を記録する。

(2)スレーブはマスターのバイナリログイベントをリレーログにコピーし、スレーブのI/Oスレッドはマスターのバイナリログからイベントを読み取り、リレーログに書き込みます。

(3)スレーブはリレーログ内のイベントをやり直し、データを自身のものに変更します。スレーブの SQL スレッドはリレー ログからイベントを読み取り、それらをローカルで再生してマスターのデータと一致させます。

mysql マスタースレーブを実装する手順:

1. mysqldump コマンドを使用してデータベースをバックアップします。

2. マスターノードバイナリの場所を確認する

3. バックアップユーザーを作成し、承認する(レプリケーションクライアント.レプリケーションスレーブ)

4. サーバーの server-id を変更します。メインの MySQL の server-id とは異なる必要があります。リレー日付を有効にし、バイナリ日付を無効にします。

5. データベースからデータをインポートし、承認されたユーザーを使用してメインのMySQLに接続します。

6. スレーブを起動する

SQL 言語は、クエリ言語 DQL、制御言語 DCL、操作言語 DML、定義言語 DDL のカテゴリに分かれています。トランザクション制御 TCL。

DQL (データ クエリ言語) ステートメント: SELECT 句、FROM 句、WHERE 句で構成されるクエリ ブロックをクエリするために使用されるデータベース定義ステートメント。例: select–from–where–group by–having–order by–limit

DDL (データ定義言語) ステートメント: つまり、データベース定義ステートメント。データベースにテーブル、インデックス、ビュー、ストアド プロシージャ、トリガーなどを作成するために使用されます。よく使用されるステートメント キーワードは、CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME です。追加、削除、変更テーブルの構造

DML (データ操作言語) ステートメント: クエリ、追加、更新、削除などに使用されるデータ操作ステートメント。一般的に使用されるステートメント キーワードは、SELECT、INSERT、UPDATE、DELETE、MERGE、CALL、EXPLAIN PLAN、LOCK TABLE で、一般的な追加、削除、変更、クエリが含まれます。テーブルデータの追加、削除、変更

DCL (データ制御言語) ステートメント: データベースとそのフィールドに対する権限を付与/取り消すために使用されるデータ制御ステートメント (DCL は、GRANT などのコマンドを含み、主にデータベース システムの権限、許可、およびその他の制御に関係するデータ制御言語の短縮名です)。よく使用されるステートメント キーワードは、GRANT、REVOKE です。

TCL (トランザクション制御言語) ステートメント: トランザクションを制御するために使用されるトランザクション制御ステートメント。よく使用されるステートメント キーワードは、COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTION です。

2. MySQLのコンパイルとインストール

#!/bin/bash
yum -y インストール make gcc gcc-c++ openssl openssl-devel pcre-devel gd cmake ncurses ncurses-devel
id -u mysql
[ `echo $?` -ne 0 ]の場合;
それから
グループ追加mysql
ユーザー追加 -M -g mysql -s /sbin/nologin mysql
フィ

[ ! -d "/usr/local/mysql" ] の場合;
それから
    mkdir -p /usr/local/mysql
フィ
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
cd /home/soft/ #ソフトウェア保存ディレクトリ tar zxvf mysql-5.6.30.tar.gz
mysql-5.6.30 をインストールします

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DMYSQL_DATADIR=/data/mysql/data -DINSTALL_MANDIR=/usr/share/man -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1
作成 && インストール

chown -R mysql:mysql 。
chmod +x スクリプト/mysql_install_db

./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig mysqld オン

cat> /etc/rc.d/init.d/mysqld <<'EOF' #mysql 起動スクリプト #!/bin/sh
# 著作権放棄 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
# このファイルはパブリックドメインであり、いかなる種類の保証もありません

# MySQL デーモンの起動/停止スクリプト。

# 通常、これは/etc/init.d(少なくともSYSV R4ベースのマシンでは)に配置されます
# システム) にインストールされ、/etc/rc3.d/S99mysql および /etc/rc0.d/K01mysql にリンクされています。
# これが完了すると、マシンの電源が入ったときにmysqlサーバーが起動します。
# システムがダウンすると起動およびシャットダウンします。

# RedHat Linux で chkconfig をサポートするためのコメント
# chkconfig: 2345 64 36
# 説明: 非常に高速で信頼性の高い SQL データベース エンジン。

# LSB 初期化スクリプトの規則をサポートするためのコメント
### 初期化情報の開始
# 提供: mysql
# 必須開始: $local_fs $network $remote_fs
# 開始すべきもの: ypbind nscd ldap ntpd xntpd
# 必須停止: $local_fs $network $remote_fs
# デフォルト開始: 2 3 4 5
# デフォルト停止: 0 1 6
# 簡単な説明: MySQL の起動と停止
# 説明: MySQL は非常に高速で信頼性の高い SQL データベース エンジンです。
### 初期化情報の終了

# MySQLを/usr/local/mysql以外の場所にインストールする場合は、
# このスクリプトが動作するには、次のいずれかを実行する必要があります。
#
# - MySQLインストールディレクトリ内からこのスクリプトを実行します
# - 次の情報を含む /etc/my.cnf ファイルを作成します。
# [mysqld]
# basedir=<mysql インストールディレクトリへのパス>
# - 上記を他の設定ファイル(例: ~/.my.ini)に追加します。
# そしてmy_print_defaultsを/usr/binにコピーします
# - mysqlインストールディレクトリへのパスをbasedir変数に追加します
# 下に。
#
# 他のMySQL変数に影響を与えたい場合は、変更を加える必要があります
# /etc/my.cnf、~/.my.cnf またはその他の MySQL 構成ファイル内。

# ベースディレクトリを変更する場合は、データディレクトリも変更する必要があります。
# MySQL 構成ファイルの設定によって上書きされます。
ベースディレクトリ=/usr/local/mysql
データディレクトリ=/data/mysql

# スクリプトがタイムアウトするまでのデフォルト値(秒数)。
# サーバーの起動用。 
# ここでの値は my.cnf の値によって上書きされます。 
# 0 は全く待たないことを意味する
# 負の数は無期限に待機することを意味します
サービス起動タイムアウト=900

# RedHat / SuSE のディレクトリをロックします。
ロックディレクトリ='/var/lock/subsys'
lock_file_path="$lockdir/mysql"

# 以下の変数は、mysql.server が検索できるようにするためにのみ設定されます。

# デフォルトを設定する
mysqld_pid_file_path=
if test -z "$basedir"
それから
  ベースディレクトリ=/usr/local/mysql
  バインドディレクトリ=/usr/local/mysql/bin
  テスト -z "$datadir"
  それから
    データディレクトリ=/data/mysql/data
  フィ
  sbindir=/usr/local/mysql/bin
  libexecdir=/usr/local/mysql/bin
それ以外
 bindir="$basedir/bin"
  テスト -z "$datadir"
  それから
    datadir="$basedir/data"
  フィ
  sbindir="$basedir/sbin"
  libexecdir="$basedir/libexec"
フィ

# datadir_setは、datadirが設定されているかどうかを判断するために使用されます(したがって、
# --basedir= ハンドラ内では設定されません。
データディレクトリ設定=
# 可能であれば、メッセージを印刷するために LSB 初期化スクリプト関数を使用する
#
lsb_functions="/lib/lsb/init-functions"
テスト -f $lsb_functions の場合;
  . $lsb_functions
それ以外
  ログ成功メッセージ()
  {
    echo " 成功しました! $@"
  }
  ログ失敗メッセージ()
  {
    echo " エラー! $@"
  }
フィ

PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"
エクスポートPATH
mode=$1 # 開始または停止

[ $# -ge 1 ] && シフト


other_args="$*" # 一般的ではありませんが、RPM アップグレード アクションから呼び出される場合は必要です
           # 期待値: "--skip-networking --skip-grant-tables"
           # 責任は負わないので、ここでは意図的にチェックしません
           # 「spec」ファイルの作成者は正しい引数のみを与える必要があります。

case `echo "testing\c"`,`echo -n testing` の場合
    *c*,-n*) echo_n= echo_c= ;;
    *c*,*) echo_n=-n echo_c= ;;
    *) echo_n= echo_c='\c' ;;
エサック

parse_server_arguments() {
  引数に対して
    ケース「$arg」
      --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
                    bindir="$basedir/bin"
                    テスト -z "$datadir_set" の場合、
                      datadir="$basedir/data"
                    フィ
                    sbindir="$basedir/sbin"
                    libexecdir="$basedir/libexec"
        ;;
      --datadir=*) datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
                    データディレクトリセット=1
        ;;
      --pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
      --service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
    エサック
  終わり
}

wait_for_pid() {
  verb="$1" # 作成 | 削除
  pid="$2" # pidファイルで動作するプログラムのプロセスID
pid_file_path="$3" # PID ファイルへのパス。

  私=0
  競合状態を回避するには、「再度確認する」

  $i -ne $service_startup_timeout をテストしながら実行します。

    case "$verb" の場合
      '作成された')
        # PID ファイルが存在するようになるまで待機します。
        テスト -s "$pid_file_path" && i='' && break
        ;;
      '削除')
        # このPIDファイルが消えるまで待つ
        テスト! -s "$pid_file_path" && i='' && break
        ;;
      *)
        echo "wait_for_pid () の使用法: wait_for_pid が作成されました| pid pid_file_path が削除されました"
        出口1
        ;;
    エサック

    # サーバーが稼働していない場合、pid ファイルは更新されません
    テスト -n "$pid"; の場合
 kill -0 "$pid" 2>/dev/null;の場合
        : # サーバーはまだ稼働しています
      それ以外
        # 最後の pid ファイル チェックと現在の間にサーバーが終了した可能性があります。  
        テスト -n "$avoid_race_condition"; の場合
          競合状態を回避する=""
          続行 # もう一度確認してください。
                                         
        フィ

        # ファイルに影響を与えるものは何もありません。
        log_failure_msg "サーバーは PID ファイル ($pid_file_path) を更新せずに終了しました。"
        return 1 # これ以上待機しません。
      フィ
    フィ

    エコー $echo_n ".$echo_c"
    i=`式 $i + 1`
    睡眠1

  終わり

  テスト -z "$i" の場合;
    ログ成功メッセージ
    0を返す
  それ以外
    ログ失敗メッセージ
    戻り値 1
  フィ
}

# my.cnfファイルから引数を取得し、
# これから読み込まれる唯一のグループは [mysqld] です
テストの場合 -x ./bin/my_print_defaults
それから
  print_defaults="./bin/my_print_defaults"
elif テスト -x $bindir/my_print_defaults
それから
  print_defaults="$bindir/my_print_defaults"
elif テスト -x $bindir/mysql_print_defaults
それから
  print_defaults="$bindir/mysql_print_defaults"
それ以外
  # /etc/my.cnf で basedir を探します
  conf=/etc/my.cnf
  印刷デフォルト=
  テスト -r $conf
  それから
    サブパット='^[^=]*basedir[^=]*=\(.*\)$'
    dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
    $dirs 内の d の場合
    する
      d=`echo $d | sed -e 's/[ ]//g'`
      テスト -x "$d/bin/my_print_defaults"
      それから
        print_defaults="$d/bin/my_print_defaults"
        壊す
      フィ
      テストの場合 -x "$d/bin/mysql_print_defaults"
      それから
      print_defaults="$d/bin/mysql_print_defaults"
        壊す
      フィ
    終わり
  フィ
  # PATH にあるといいのですが...疑わしいです
  テスト -z "$print_defaults" && print_defaults="my_print_defaults"
フィ

#
# 'basedir'からデフォルトファイルを読み込みます。そこにデフォルトファイルがない場合
# 古い(非推奨の)場所(datadir)にあるかどうかを確認し、そこから読み取ります
#

追加引数=""
テスト -r "$basedir/my.cnf"
それから
  extra_args="-e $basedir/my.cnf"
それ以外
  テスト -r "$datadir/my.cnf"
  それから
    extra_args="-e $datadir/my.cnf"
  フィ
フィ

parse_server_arguments `$print_defaults $extra_args mysqld サーバー mysql_server mysql.server`

#
# 指定されていない場合はPIDファイルを設定する
#
テスト -z "$mysqld_pid_file_path" の場合
それから
  mysqld_pid_file_path=$datadir/`ホスト名`.pid
それ以外
  ケース「$mysqld_pid_file_path」
    /* ) ;;
    * )mysqld_pid_file_path="$datadir/$mysqld_pid_file_path" ;;
  エサック
フィ

ケース「$mode」
  '始める')
    # デーモンを起動

    # セーフガード (相対パス、コアダンプなど)
    cd $ベースディレクトリ

    echo $echo_n "MySQL を起動しています"
    テストの場合 -x $bindir/mysqld_safe
    それから
      # my.cnfファイルでmysqldに追加の引数を与えます。このスクリプト
      # 次回のアップグレード時に上書きされる可能性があります。
      $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
      wait_for_pid が "$!" "$mysqld_pid_file_path" を作成しました。 return_value=$?

      # RedHat / SuSE 用のロックを作成する
      テスト -w "$lockdir"
      それから
        「$lock_file_path」をタッチします
      フィ
  終了 $return_value
    それ以外
      log_failure_msg "MySQL サーバーが見つかりませんでした ($bindir/mysqld_safe)"
    フィ
    ;;

  '停止')
    # デーモンを停止します。ここでは、
    # ルートパスワード。

    テスト -s "$mysqld_pid_file_path" の場合
    それから
      mysqld_pid=`cat "$mysqld_pid_file_path"`

      (kill -0 $mysqld_pid 2>/dev/null)の場合
      それから
        echo $echo_n "MySQL をシャットダウンしています"
        $mysqld_pid を強制終了する
        # mysqld は終了時に pid ファイルを削除するはずなので、それを待ちます。
        wait_for_pid が "$mysqld_pid" "$mysqld_pid_file_path" を削除しました。 return_value=$?
      それ以外
        log_failure_msg "MySQL サーバー プロセス #$mysqld_pid が実行されていません!"
        rm "$mysqld_pid_file_path"
      フィ

      # RedHat / SuSE のロックを削除
      テスト -f "$lock_file_path"
      それから
        rm -f "$lock_file_path"
      フィ
      終了 $return_value
 それ以外
      log_failure_msg "MySQL サーバーの PID ファイルが見つかりませんでした!"
    フィ
    ;;

  '再起動')
    # サービスを停止し、
    # 実行中かどうかにかかわらず、もう一度起動してください。
    $0の場合は$other_argsを停止します。
      $0 開始 $other_args
    それ以外
      log_failure_msg 「実行中のサーバーを停止できなかったため、起動を試行しません。」
      出口1
    フィ
    ;;

  'リロード'|'強制リロード')
    テスト -s "$mysqld_pid_file_path" の場合、
      mysqld_pid を読み取り < "$mysqld_pid_file_path"
      kill -HUP $mysqld_pid && log_success_msg "MySQL サービスを再ロードしています"
      "$mysqld_pid_file_path" をタッチします
    それ以外
      log_failure_msg "MySQL PID ファイルが見つかりませんでした!"
      出口1
    フィ
    ;;
  '状態')
    # まず、pidファイルが存在するかどうかを確認します
    テスト -s "$mysqld_pid_file_path" の場合、
      mysqld_pid を読み取り < "$mysqld_pid_file_path"
      kill -0 $mysqld_pid 2>/dev/nullの場合;
  log_success_msg "MySQL が実行中です ($mysqld_pid)"
        終了 0
      それ以外
        log_failure_msg 「MySQL は実行されていませんが、PID ファイルは存在します」
        出口1
      フィ
    それ以外
      # 適切なmysqldプロセスを探します
      mysqld_pid=`pidof $libexecdir/mysqld`
      テスト -z $mysqld_pid の場合、
        テスト -f "$lock_file_path" の場合;
          log_failure_msg "MySQL は実行されていませんが、ロック ファイル ($lock_file_path) が存在します"
          出口2
        フィ
        log_failure_msg 「MySQL が実行されていません」
        出口3
      それ以外
        log_failure_msg 「MySQL は実行されていますが、PID ファイルが見つかりませんでした」
        出口4
      フィ
    フィ
    ;;
    *)
      # 使用法
      ベース名=`ベース名 "$0"`
      echo "使用方法: $basename {start|stop|restart|reload|force-reload|status} [ MySQL サーバー オプション ]"
      出口1
    ;;
                             
エサック

終了 0
終了

cat> /etc/my.cnf <<'EOF' #mysql 設定ファイル [クライアント]
#パスワード = あなたのパスワード
ポート = 3306
ソケット = /tmp/mysql.sock

# 以下に特定のプログラムに関するエントリを示します

# MySQL サーバー
[mysqld]
ポート = 3306
ソケット = /tmp/mysql.sock
外部ロックをスキップ
キーバッファサイズ = 384M
最大許容パケット = 64M
テーブルオープンキャッシュ = 512
ソートバッファサイズ = 2M
読み取りバッファサイズ = 2M
読み取りバッファサイズ = 8M
myisam_sort_buffer_size = 64M
スレッドキャッシュサイズ = 8
クエリキャッシュサイズ = 32M
# thread_concurrency に CPU の数 * 2 を試します
スレッド同時実行性 = 8
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /data/mysql
最大接続数 = 5000
長いクエリ時間 = 1
遅いクエリログ = 1
slow_query_log_file = /var/log/mysql/slow.log

# TCP/IPポートを一切リッスンしない。これはセキュリティ強化につながる可能性がある。
# mysqld に接続する必要があるすべてのプロセスが同じホスト上で実行される場合。
# mysqld とのすべてのやり取りは、Unix ソケットまたは名前付きパイプを介して行う必要があります。
# Windowsで名前付きパイプを有効にせずにこのオプションを使用すると、
# (「enable-named-pipe」オプション経由) により、mysqld が役に立たなくなります。
小文字のテーブル名 = 1
# レプリケーションマスターサーバー(デフォルト)
# レプリケーションにはバイナリログが必要です
#ログ bin = mysql bin
名前解決をスキップ
# 1 から 2^32 - 1 までの一意の ID が必要です
# マスターホストが設定されていない場合はデフォルトで1になります
# 省略するとマスターとして機能しません
#サーバーID = 1
# バイナリログ - スレーブでは必須ではないが、推奨される
#ログ bin = mysql bin
#
# バイナリログ形式 - 混合推奨 
#binlog_format=混合

# InnoDBテーブルを使用している場合は、次のコメントを解除します
#innodb_data_home_dir = /data/mysql/data
#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:自動拡張
#innodb_log_group_home_dir = /data/mysql/data
# .._buffer_pool_size は最大 50 - 80 % に設定できます
RAM の数は多いですが、メモリ使用量を高く設定しすぎないように注意してください
innodb_buffer_pool_size = 4096M
#innodb_additional_mem_pool_size = 20M
# .._log_file_size をバッファプールサイズの 25 % に設定します
innodb_log_file_size = 512M
#innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 0
#innodb_lock_wait_timeout = 50

[mysqlダンプ]
素早い
最大許容パケット = 64M

[mysql]
自動再ハッシュなし
# SQLに慣れていない場合は、次のコメント文字を削除してください
#安全なアップデート
[マイサムチク]
キーバッファサイズ = 256M
ソートバッファサイズ = 256M
読み取りバッファ = 2M
書き込みバッファ = 2M

[mysqlホットコピー]
対話タイムアウト

終了

: := mysqladmin /usr/bin ディレクトリに移動します。
ローカルディレクトリにmysql.iniファイルを保存します。
ローカルディレクトリにmysql.includeというディレクトリを作成します。
mkdir /var/lib/mysql
sock は、mysql.sock の次の行に格納されます。
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
睡眠2
ソース /etc/profile

サービスmysqldの開始

睡眠5
cd /usr/local/mysql/bin && mysqladmin -uroot password 'mysql' #ルートユーザーのパスワードを認証する
ソース /etc/profile

3. マスタースレーブ構成

1. マスターデータベースにデータがあることを確認し、ユーザーにレプリケーション権限を付与します。

mysql> データベース db1 を作成します。
mysql> db1を使用する
mysql> テーブル t1(id int, name varchar(12)) を作成します。
mysql> t1 に値 (1, 'tom')、(2, 'jerry')、(3, 'jack') を挿入します。
mysql> 'mysqll' によって識別される 'backuser'@'192.168.142.130' に、*.* 上のレプリケーション スレーブとレプリケーション クライアントを許可します。
mysql> 'mysql' によって識別される 'backuser'@'192.168.142.131' に、*.* 上のレプリケーション スレーブ、レプリケーション クライアントを許可します。
mysql> 権限をフラッシュします。

2. 各データベースの設定ファイルを変更し、データベースを再起動します。

vi /etc/my.cnf #メインライブラリ設定ファイル server-id=1
ログ bin = mysql bin
binlog-do-db=db1
binlog-ignore-db=mysql 

vi /etc/my.cnf #スレーブライブラリ設定ファイル server-id=2 #スレーブライブラリIDはマスターライブラリと同じにすることはできません。他のスレーブライブラリはlog-bin=relay-binの後ろに配置されます
replicate-do-db=db1 #db1データベースを同期する replicate-ignore-db=mysql #mysqlデータベースを同期しない read_only #読み取り専用サービス mysqld を再起動

3. マスターデータベースはバックアップのためにテーブルをロックし、ファイルをスレーブデータベースに転送します。

mysql> flush tables with read lock; #新しいデータが書き込まれないようにマスターテーブルをロックしますmysql> show master status; #マスターの場所ノードを表示します新しいターミナルバックアップを開きます:
mysqldump -u root -p --default-character-set=utf8 --opt -Q -R --skip-lock-tables db1 > /root/db1.sql  
scp /root/db1.sql ルート@192.168.142.130:/root   
scp /root/db1.sql ルート@192.168.142.130:/root

4. データベースからデータをインポートし、メインデータベースのノードに変更します。

mysql -u ルート -p
mysql> データベース db1 を作成します。
mysql> db1を使用する
mysql> ソース /root/db1.sql
mysql> マスターを master_host='192.168.142.129'、master_user='backuser'、master_password='mysql'、master_log_file='mysql-bin.000001'、master_log_pos=120 に変更します。
mysql> スレーブを起動します。
mysql>スレーブステータスを表示\G 

MySQL5.6 マスタースレーブ設定とマスタースレーブ非同期問題_データベース_02

5. メインデータベースのロックを解除する

mysql> テーブルのロックを解除します。

上記の構成は、マスターとスレーブが同期していない場合にマスターとスレーブを再構成する場合にも適用できます。

4. マスタースレーブ非同期

1. 非同期の原因

ネットワーク遅延マスターとスレーブマシンの負荷の不一致max_allowed_pa​​cket設定の不一致 キー値と自動増分ステップ設定の不一致によりマスターとスレーブの不一致が発生する異常なmysqlダウンタイムの場合、sync_binlog=1またはinnodb_flush_log_at_trx_commit=1が設定されていない場合、次の可能性が非常に高いです。

binlog または relaylog ファイルが破損しているため、マスターとスレーブの間で不整合が生じています。マスターとスレーブは、MySQL 自体のバグにより同期されていません。特に、上位バージョンがマスターで下位バージョンがスレーブの場合、バージョンが不整合です。マスター データベースでサポートされている機能は、スレーブ データベースではサポートされていません。

2. 解決策

(1)エラーを無視して同期を続行する

この方法は、マスター データベースとスレーブ データベースのデータがそれほど変わらない場合、またはデータを完全に統合できない場合、およびデータ要件が厳しくない場合に適しています。

奴隷を停止します。
グローバル sql_slave_skip_counter を 1 に設定します。
スレーブを起動します。
スレーブステータスを表示\G

(2)主人と奴隷の関係の再構築

上記の構成を参照して、マスター データベース テーブルをロックし、再びマスター スレーブにします。

MySQL 5.6 のマスタースレーブ構築と非同期問題に関する詳細な説明はこれで終わりです。MySQL のマスタースレーブ構築と非同期についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションの実装手順
  • MySQL マスタースレーブ同期の原理と応用
  • MySQLデータベースのマスタースレーブレプリケーションの原理と機能の分析

<<:  Vueルータールーティングガードの詳細な説明

>>:  高性能ウェブサイトの最適化ガイド

推薦する

IE6では画像要素imgに余分な空白スペースがある

ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...

MySQLクエリプランでken_lenの値を計算する方法

key_lenの意味MySQL では、次に示すように、explain を使用して SQL ステートメ...

...

WeChatアプレット開発によりホームページポップアップボックスアクティビティガイダンス機能が実現

目次1. 需要2. データベース設計3.Javaバックグラウンド構成の実装4. WeChatアプレッ...

画面なしで無線ネットワークに接続しているときに Raspberry Pi の IP アドレスを見つける方法

あなたがlinuxerだと仮定すると、 windowserだとは想定しません。Windows ユーザ...

Vue でフルスクリーンを実装し、フルスクリーン終了を監視する

目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...

LinuxにMySQLをインストールするための詳細なチュートリアル

すべてのプラットフォーム用の MySQL ダウンロードは、MySQL ダウンロードから入手できます。...

Windows システムに mysql5.7.21 をインストールするための詳細なチュートリアル

MySQL インストーラーは、MySQL ソフトウェアのあらゆるニーズに対応する、使いやすいウィザー...

Centos7 での NFS サービス構築の紹介

目次1. サーバー2. クライアント3. テストサービス1. サーバー1. YUMソースを使用してN...

デュアル VIP を使用した高可用性 MySQL クラスタの構築

目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...

Alibaba Cloud イメージリポジトリを使用して外部 Docker イメージを構築する方法の詳細な説明

Alibaba Cloud Image Repositoryを使用して外部イメージをダウンロードする...

Dockerコンテナの操作手順の概要と詳細説明

1. コンテナを作成して実行するdocker run -it --rm centos:latest ...

Mysql ルートユーザーアカウントのパスワードをリセットする問題を解決する

問題の説明: mysqladmin.exe を使用してコマンドを実行すると、次のエラー メッセージが...

vuexの強制リフレッシュによるデータ損失問題の分析

vuex 永続状態基本原則: すべての vuex データをローカルストレージに保存し、ページが更新さ...

proxy_pass を設定した後に Nginx が 404 を返す問題を解決する

目次1. proxy_pass を設定した後に Nginx が 404 を返す問題のトラブルシューテ...