MySQL データベースのマスター スレーブ分離のサンプル コード

MySQL データベースのマスター スレーブ分離のサンプル コード

導入

MySQL データベースの読み取りと書き込みの分離を設定すると、データベースに対する書き込み操作と読み取り操作を異なるサーバー上で実行できるようになり、同時実行性と応答速度が向上します。

現在、ほとんどの大規模ウェブサイトは、データベースのマスターとスレーブの分離と読み取りと書き込みの分離を採用しており、バックアップの役割を果たすだけでなく、データベースの読み取りと書き込みの負荷を軽減することもできます。私はいつもこれについて聞いていましたが、自分で実践したことはありませんでした。今日はそれを実践し、プロセスを記録する時間があります。

実験環境

2 台のサーバーを準備しました。1 台はローカル コンピューター、もう 1 台はリモート VPS で、データベースは両方のマシンにインストールされています。
MySQL のインストールについては説明しません。ここで注意する必要があるのは、インストールされている MySQL のバージョンが一貫している必要があるということです。一貫性がない場合、下位バージョンから上位バージョンに読み込むときに問題が発生する可能性があります。一貫性を保つことが最善です。

マスター

45.78.57.4 CentOS 7 Linux システム、MySQL バージョン 5.1.73

奴隷

ローカルマシン 127.0.0.1 macOS システム、mysql バージョン 5.1.73

構成

ユーザーを作成

マスター データベースにユーザーを作成し、スレーブ データベースからマスター データベースの実行ログを読み取ります。

mysqlコマンドラインで実行する必要があり、まずコマンドラインにログインする必要があります。

次のようにコードをコピーします

'test'@'45.78.57.4' ('test' によって識別) に *.* のレプリケーション スレーブを許可します。

my.cnf を変更する

Linux システムは /etc/my.cnf にあり、Mac システムは MySQL がインストールされているディレクトリにあり、Windows システムも同様です。

my.cnfファイルに次のコードを追加します。

server-id = 1 //データベースID番号 log-bin=master-bin //バイナリログを有効にする log-bin-index=master-bin.index //バイナリログ名

ファイルの最後ではなく、[mysqld]の後ろの先頭に置くように注意してください。これが私のmy.cnfの内容です。

[mysqld]
サーバーID=1
ログビン=マスタービン
ログ bin インデックス = マスター bin.index

データディレクトリ=/var/lib/mysql
ソケット=/var/lib/mysql/mysql.sock
ユーザー=mysql
シンボリックリンク=0
最大許容パケット数=100M

[mysqld_safe]
ログエラー=/var/log/mysqld.log
pidファイル=/var/run/mysqld/mysqld.pid

ステータスを表示

MySQL コマンドラインにログイン後、show master status と入力します。以下の情報が表示されれば、マスターデータベースの設定は完了です。

mysql> マスターステータスを表示します。
+-------------------+----------+--------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| マスターbin.000001 | 672675 | | |
+-------------------+----------+--------------+------------------+
セット内の 1 行 (0.00 秒)

スレーブ ライブラリを構成するときに使用する、ファイルと位置の 2 つの内容を記録します。

ライブラリからの設定

ローカル コンピューター (スレーブ ライブラリ) 上の my.cnf ファイルを見つけて、次の内容を追加します。この構成は、マスター ライブラリの構成と同じ意味を持ちます。

サーバーID=2
リレーログ=スレーブリレービン
リレーログインデックス=スレーブリレービンインデックス

メインデータベースと同じ場所にあることを確認してください。最後に配置したため関連付けることができませんでした。

マスターライブラリとスレーブライブラリの関連付け

最後のステップは非常に重要です。スレーブ データベースの MySQL コマンドラインにログインし、次のコードを実行します。これは主に、マスター データベースのいくつかの情報を関連付けるためのものです。

マスターをmaster_host='45.78.57.4'、#マスターサーバーIPに変更します
マスターポート=3306、
マスターユーザー='テスト'、
マスターパスワード='テスト'、 
master_log_file='master-bin.000001'、#マスターログファイル名 master_log_pos=672675; #マスターログ同期開始位置

実行が成功したかどうかに注意してください。実行が失敗した場合は、コードを注意深くチェックして、エラーがどこにあるかを確認します。

実行が正常であれば、スレーブを起動し、接続状態を確認します。

//mysql コマンドラインで start slave を実行する必要があります。 
show slave status\G; //スレーブ接続ステータスを表示

ステータス情報

        Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: 45.78.57.4
         マスターユーザー: テスト
         マスターポート: 3306
        接続再試行: 60
       マスターログファイル: master-bin.000001
     読み取りマスターログ位置: 672913
        リレーログファイル: スレーブリレーbin.000044
        リレーログ位置: 504
    リレーマスターログファイル: master-bin.000001
       スレーブIO実行中: はい
      スレーブSQL実行中: はい

知らせ!

これら 2 つの状態が「はい」であれば、成功とみなされます。そうでない場合は、上記の手順のどのステップに構成エラーがあるかを確認してください。

スレーブIO実行中: はい
スレーブSQL実行中: はい

テスト

ここで、マスター データベースにデータを追加して、スレーブ データベースに同一のデータが存在するかどうかを確認します。存在する場合、構成は正常であり、機能は適切に動作しています。

マスタースレーブ分離の原理は主に、マスターデータベースの実行ログ機能をオンにし、スレーブデータベースからマスターデータベースのログ情報を読み取り、マスターデータベースによって実行された SQL ステートメントをスレーブデータベースで実行して、マスタースレーブ分離を実現し、マスタースレーブデータの一貫性を維持し、データをバックアップすることです。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブ同期、読み取り書き込み分離構成手順
  • MySQL マスタースレーブレプリケーション、読み取り/書き込み分離、バックアップとリカバリの詳細な説明
  • MySQL マスタースレーブレプリケーション 読み書き分離の設定方法の詳細説明
  • MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明
  • Linux システムで MySQL マスター/スレーブ分離を構成する手順

<<:  テキストまたはJSONを返すようにnginxを設定する方法

>>:  Nest.js のハッシュと暗号化の例の詳細な説明

推薦する

docker runコンテナの自動終了の解決策

今日、Dockerfile を使用してイメージを作成したときに問題が発生し、イメージの実行後にコンテ...

CentOS7 構成 Alibaba Cloud yum ソースメソッドコード

Centos yumフォルダを開くコマンドcd /etc/yum.repos.d/を入力します。 w...

Linuxホスト名変更コマンドの詳しい説明

Linux ホスト名変更コマンド1. ホスト名を一時的に変更するだけの場合は、hostname コマ...

MySQLが間違ったインデックスを選択する理由と解決策

MySQL では、テーブルに複数のインデックスを指定できますが、ステートメントの実行時に、使用するイ...

IE5.0以降のHTCコンポーネントの定義の概要

Microsoft IE 5.0 がリリースされる前は、Web プログラミングにおける最大の課題は、...

Ubuntuで顔認識ログインを実装するための完全な手順

1. Howdyをインストール: howdyプロジェクトアドレス sudo add-apt-repo...

MySQL のデバッグと最適化に関する 101 のヒントを共有する

MySQL は強力なオープンソース データベースです。データベース駆動型アプリケーションの数が増える...

Node.js コード実行をバイパスするためのヒントのまとめ

目次1. 子プロセス2. nodejsでのコマンド実行2.1 16進数エンコード2.2 ユニコードエ...

...

CSSレイアウトにおけるフロート属性と位置属性の違い

CSS レイアウト - position プロパティposition 属性は、要素に適用する配置方法...

MySQL 5.7.17 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.17 winx64解凍版のインストールと設定方法を紹介します。具体...

Vue の計算プロパティの詳細な説明

目次補間式方法計算された要約する今日は、Vue の計算プロパティについてお話ししましょう。計算プロパ...

jQueryはドロップダウンメニューのスライド効果を実現します

Web ページを作成するときに、クールでスムーズなドロップダウン メニューが必要になることがあります...

Linux カーネル デバイス ドライバー カーネル デバッグ テクニカル ノート集

/****************** * カーネルデバッグ技術 ****************...

MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介

非準拠データがデータベースに入るのを防ぐために、ユーザーがデータを挿入、変更、削除、その他の操作を行...