Mysql データベースのマスタースレーブ同期構成

Mysql データベースのマスタースレーブ同期構成

Mysql マスタースレーブ同期構成

構成の準備:

  • 2つのデータベースが必要です
  • mysql可視化ツール、もちろんコマンドラインも使用できます
  • ここでは、docker を使用して 2 つの mysql コンテナを起動する方法を説明します。バージョンが同じであれば、2 つの mysql コンテナをインストールすることもできます。

1. 2つのmysqlをインストールする

  • msyqlマウントディレクトリを作成する
[root@localhost /]# mkdir -p /opt/docker/mysql1/conf/
[root@localhost /]# mkdir -p /opt/docker/mysql1/logs/
[root@localhost /]# mkdir -p /opt/docker/mysql1/data/
  • 最初のmysqlを起動し、対応するファイルディレクトリポートをマウントします: 6894
[root@localhost /]# docker run -d -p 6894:3306 --name mysql1 \
                    ディレクトリは/etc/mysql/ です。
                    -v /opt/docker/mysql1/logs:/logs \
                    -v /opt/docker/mysql1/data:/var/lib/mysql \
                    --privileged=true \
                    -e MYSQL_ROOT_PASSWORD=qtykGhC29eP4Smpmysql:5.7
  • 2番目のmysqlをコピーすることで

コピーした mysql の /opt/docker/mysql2/data/auto.cnf ディレクトリに、削除する必要がある auth.cnf ファイルがあることに注意してください。

[root@localhost docker]# cp -r /opt/docker/mysql1/ /opt/docker/mysql2/
  • auth.cnfファイルを削除する
[root@localhost docker]# rm -f /opt/docker/mysql2/data/auto.cnf
  • 2番目のmysqlを起動する
[root@localhost docker]# docker run -d -p 6895:3306 --name mysql2 \
                    ディレクトリは/etc/mysql/ です。
                    -v /opt/docker/mysql2/logs:/logs \
                    -v /opt/docker/mysql2/data:/var/lib/mysql \
                    --privileged=true \
                    -e MYSQL_ROOT_PASSWORD=qtykGhC29eP4Smpmysql:5.7

2. MySQL設定ファイルを書く

  • メインライブラリのmy.cnfファイル
[root@localhost docker]# vim /opt/docker/mysql1/conf/my.cnf
  • my.cnfファイルの内容
[mysqld]
# マスターデータベースの構成 server-id=1 # サービス ID の一意性 log-bin=mysql1-log # バイナリログを有効にする binlog-format=ROW # ログモード replicate-do-db=db_docker # 複製するデータの名前 # replicate-ignore-db=db_docker # 複製する必要のないデータの名前
  • ライブラリのmy.cnfファイルから
[root@localhost docker]# vim /opt/docker/mysql2/conf/my.cnf
  • my.cnfファイルの内容
[mysqld]
# ライブラリから設定 server-id=2 # サービス ID の一意性 log-bin=mysql2-log # バイナリ ログを有効にする binlog-format=ROW # ログ モード binlog-do-db=db_docker # コピーするデータの名前 # binlog-ignore-db=db_docker # コピーする必要のないデータの名前
  • docker mysqlコンテナを再起動します
[root@localhost docker]# docker を再起動してmysql1
[root@localhost docker]# docker を再起動してmysql2を実行します

3. データを初期化する

  • 2つのmysqlは次のSQL文を実行してデータベースとテーブルを作成します。
-- データベースを作成します CREATE DATABASE `db_docker`;
db_docker を使用します。
-- テーブルを作成する CREATE TABLE `t_docker` (
    `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) デフォルト NULL,
     主キー ( `id` )
) エンジン = INNODB AUTO_INCREMENT = 0 デフォルト文字セット = utf8;

メインライブラリのバイナリログを表示します。

  • メインライブラリは次のコマンドを実行してバイナリログファイルのステータス情報を出力します。
mysql> マスターステータスを表示します。
+------------------+----------+--------------+------------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------+
| mysql-bin.000001 | 2223 | | | |
+------------------+----------+--------------+------------------+------------------+

スレーブバイナリログを構成する

  • スレーブは、レプリケーション マスターへの接続、マスターのバイナリ ログの読み取り、スレーブのリレー ログの読み取りに使用されるパラメータを変更します。
マスターを変更
MASTER_HOST="192.168.101.59", # ホストアドレス メインサーバーのIP
Master_Port=6894、# ポート MASTER_USER="root", # アカウント MASTER_PASSWORD="qtykGhC29eP4Smp", # パスワード MASTER_LOG_FILE="mysql-bin.000001", # メインライブラリバイナリファイル名は実際の状況に応じて記入されます MASTER_LOG_POS=377; # メインライブラリバイナリファイルの位置は実際の状況に応じて記入されます
  • ライブラリから実行してレプリケーションを開始します
mysql>スレーブを起動します。

スレーブ ライブラリ スレッドの基本パラメータのステータス情報。 MySQL 8.0.22 以降では、非推奨となった SHOW SLAVE STATUS の代わりに SHOW REPLICA STATUS を使用してください。 MySQL 8.0.22 より前のバージョンでは、 SHOW SLAVE STATUS を使用します。このステートメントには、 REPLICATION CLIENT 権限 (または非推奨の SUPER 権限) が必要です。

次の 2 つのパラメータが yes の場合、構成は成功したことを意味します。それ以外の場合は、構成に問題があります。 Slave_IO_Running: はい Slave_SQL_Running: はい

上記の2つのパラメータのいずれかがNoでない場合は、エラーが発生していることを意味します。次の2つのフィールドを確認してください。Last_Errno Last_Error

エラーの内容は Last_Error フィールドに記録され、エラーの内容に応じて変更されます。

mysql> スレーブステータスを表示 \G;
************************** 1. 行 ****************************
               Slave_IO_State: マスターがイベントを送信するのを待機中
                  マスターホスト: 192.168.101.59
                  マスターユーザー: ルート
                  マスターポート: 6894
                接続再試行: 60
              マスターログファイル:mysql-bin.000001
          読み取りマスターログ位置: 2223
               リレー ログ ファイル: 98394ee2fb48-relay-bin.000004
                リレーログ位置: 320
        リレーマスターログファイル: mysql-bin.000001
             スレーブIO実行中: はい
            スレーブSQL実行中: はい
              レプリケート_Do_DB: 
          レプリケート_無視_DB: 
           テーブルの複製: 
       無視テーブルを複製: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   最終エラー番号: 0
                   最終エラー: 
                 スキップカウンタ: 0
          実行マスターログ位置: 2223
              リレーログスペース: 534
              Until_Condition: なし
               ログファイルまで: 
                ログ位置まで: 0
           マスターSSL許可: いいえ
           マスターSSLCAファイル: 
           マスターSSLCAパス: 
              マスターSSL証明書: 
            マスターSSL暗号: 
               マスターSSLキー: 
        マスターより遅れている秒数: 0
Master_SSL_Verify_Server_Cert: いいえ
                最終IOエラー番号: 0
                最後のIOエラー: 
               最終SQLエラー番号: 0
               最後のSQLエラー: 
  Replicate_Ignore_Server_Ids: 
             マスターサーバーID: 1
                  マスター_UUID: aa58ab20-f500-11eb-aa65-0242ac110002
             マスター情報ファイル: /var/lib/mysql/master.info
                    SQL_遅延: 0
          SQL_残り遅延: NULL
      Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。
           マスター再試行回数: 86400
                  マスターバインド: 
      最終IOエラータイムスタンプ: 
     最終SQLエラータイムスタンプ: 
               マスターSSL証明書: 
           マスターSSLCrlパス: 
           取得済み_Gtid_Set: 
            実行されたGtidセット: 
                自動位置: 0
         Replicate_Rewrite_DB: 
                 チャンネル名: 
           マスター TLS バージョン:

4. その他のMySQL関連コマンド

  • メインデータベースのデータ更新操作を停止する
mysql>読み取りロック付きのテーブルをフラッシュします。
  • メインデータベースのロックを解除する
mysql>テーブルのロックを解除します。
  • データベースから実行し、レプリケーションを停止します。スレーブデータベース構成バイナリログが失敗した場合は、レプリケーションを停止するか、リセットして再構成してからレプリケーションを開始する必要があります。
mysql> スレーブを停止します。
  • ライブラリから実行してレプリケーションをリセットする
mysql> スレーブをリセットします。

MySQL ノート

  • 異なるバージョンに対応するコマンドと設定ファイルは異なる場合があります
  • デモではMySQL 5.7を使用します
  • コマンドや設定が機能しない場合は、公式ウェブサイトをご覧ください。
  • 実際のアプリケーションでは、攻撃に対して脆弱であるため、デフォルトのポート 3306 を使用しないようにしてください。

mysql コンテナ:

コンテナに入る

docker exec -it mysql2 /bin/sh
#mysql2 コンテナ名はコンテナ ID にもできます

mysqlにログイン

mysql -u ルート -pqtykGhC29eP4Smp
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは9です
サーバーバージョン: 5.7.35-log MySQL コミュニティサーバー (GPL)

Copyright (c) 2000、2021、Oracle およびその関連会社。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。
マイSQL>

my.cnf 設定の説明

[mysqld]
# メイン データベース構成 # 一意のサーバー ID を指定します。0 にすることもできますが、サーバーによって拒否されるため、有効な値は 1 ~ 4294967295 です。デフォルト値 1
# 公式サイト https://dev.mysql.com/doc/refman/5.7/en/replication-options.html
サーバーID=1
# バイナリ ログを有効にします。バイナリ ファイル名はパスにすることができます (例: /logs/mysql/log)。ただし、ディレクトリ ファイルに権限を付与する必要があります。付与しないと、MySQL に書き込み権限がないため、エラーが発生します。
ログ bin = mysql1 ログ
# ログ記録モードは 3 つあります # STATEMENT では、ログ記録はステートメントベースになります。
# ROW は行ベースでログ記録を行います。これがデフォルト設定です。
# MIXED を指定すると、ログ記録に混合形式が使用されます。最初の 2 つのモードの間# 公式ウェブサイト https://dev.mysql.com/doc/refman/5.7/en/binary-log-setting.html
binlog 形式 = ROW 
# コピーするデータベースの名前。複数のデータベースを指定するには、このオプションの複数のインスタンスを使用する必要があります。
# データベース名にはカンマを含めることができるため、カンマ区切りのリストを指定すると、そのリストは単一のデータベースの名前として扱われます。
# 複数のインスタンス:
# レプリケートするdb=db_docker1 
# レプリケートするdb = db_docker2 
レプリケートするdb=db_docker 
#複製する必要のないデータ名。上記と同じ設定 # replicate-ignore-db=db_docker #複製する必要のないデータ名

[mysqld]
# スレーブデータベースの構成は上記と同じです。 server-id=2 # サービス ID の一意性 log-bin=mysql2-log # バイナリログを開く binlog-format=ROW # ログモード binlog-do-db=db_docker # コピーするデータの名前 # binlog-ignore-db=db_docker # コピーする必要のないデータの名前

auth.cnf ファイル

ファイル内容サーバUUID

  • ここでの UUID も一意である必要があり、起動時に自動的に生成されます。 mysqlデータディレクトリをコピーしてデータベースを作成した場合は、ファイルを削除する必要があります。
[自動]
サーバーUUID=aa58ab20-f500-11eb-aa65-0242ac110002
  • UUIDが同じ場合は、次のエラーが報告されます。
致命的なエラー: マスターとスレーブの MySQL サーバー UUID が同じであるため、スレーブ I/O スレッドが停止します。レプリケーションが機能するには、これらの UUID が異なる必要があります。

公式サイトのバイナリログ設定: https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html

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

以下もご興味があるかもしれません:
  • MYSQLデータベースのマスタースレーブ同期設定の実装手順
  • MySQL マスタースレーブレプリケーション 準同期レプリケーション
  • MySQL マスタースレーブ同期の原理と応用
  • この記事では、MySQLのマスタースレーブ同期の原理を説明します。
  • MySQLはマスタースレーブ同期を構築して操作を実装します

<<:  JavaScript プロトタイプの詳細

>>:  docker compose helloworld を使い始めるための詳細なプロセス

推薦する

MySQL DDL による同期遅延を解決する方法

目次序文解決ツールの紹介仕組み使用制限使用上の注意使用例いくつかのパラメータの説明出力例Tencen...

Vue の高度なコンポーネント機能コンポーネントの使用シナリオとソースコード分析

目次導入使用シナリオソースコード分析要約する導入Vue は、コンポーネントをステートレスかつインスタ...

JS ES6コーディング標準の詳細な説明

目次1. ブロックスコープ1.1. let は var を置き換える1.2. グローバル定数とスレッ...

データ型の判断における js typeof と instanceof の違いと、その開発と使用について

目次1. typeof演算子2. インスタンスオブ演算子3. typeof と instanceof...

CentOS 7 で rpm パッケージを使用して MySQL 5.7.18 をインストールする

最近、MySQL を使っています。Linux での mysql-installation という記事...

不規則な絵の滝の流れ原理の分析と応用

プロジェクトで発生した不規則な絵画壁のレイアウト問題は、次のように分析されます。 1.img dis...

オンデマンドで Vue コンポーネントを自動的にインポートする方法

目次グローバル登録部分登録ローカル自動登録さまざまなソリューションの比較コンポーネント名について参照...

vuex ベースのショッピングカート機能の実装

この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...

win10 での mysql 8.0.16 winx64 インストールの最新グラフィック チュートリアル

このデータベースをダウンロードするには、多くの時間とトラフィックがかかります。踏み込んだ落とし穴で時...

MySQL 5.7.10 インストール ドキュメント チュートリアル

1. 依存パッケージをインストールする yum -y インストール gcc-c++ ncurses-...

Linux カーネル デバイス ドライバー キャラクタ デバイス ドライバー ノート

/******************** * キャラクターデバイスドライバー**********...

Tomcat でよく使われるフィルターの詳細な説明

目次1. クロスドメインフィルタ CorsFilter 1.1 設定例1.2 パラメータの説明2. ...

Linux システムでの nginx サーバーのインストールと負荷分散構成の詳細な説明

nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...

MySQLテーブル内の重複データをクエリする方法

hk_test(ユーザー名、パスワード) に値を挿入 ('qmf1', '...

MySQL で制限を使用するとパフォーマンスに影響するのはなぜですか?

まず、MySQL のバージョンについて説明します。 mysql> バージョンを選択します();...