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 のハッシュと暗号化の例の詳細な説明

推薦する

Vueはコンピュータカメラを呼び出して写真機能を実現します

この記事の例では、コンピュータカメラを呼び出して写真機能を実現するためのvueの具体的なコードを参考...

カルーセル効果を実現するjQueryプラグイン

毎日jQueryプラグイン - カルーセルチャートを実装するためのjQueryプラグイン。参考までに...

複数のパッケージソースから同時にパッケージをロードするようにnpmを設定する方法

目次1. ローカルストレージを構築する2. npmパッケージを作成し、プライベートリポジトリにアップ...

Mysqlマスタースレーブ同期の実装原理

1. MySQL マスター/スレーブ同期とは何ですか?マスター データベースのデータが変更されると、...

Linux インストール MySQL5.6.24 使用手順

Linux インストール MySQL ノート1. MySQL データベース サーバーをインストールす...

jQueryはテーブルのシームレスなスクロールを実現します

この記事の例では、テーブルのシームレスなスクロールを実現するためのjQueryの具体的なコードを参考...

mysqldumpデータエクスポートの問題に関する詳細な議論

1. mysqldump の使用時にエラー (1064) が報告されます。これは、mysqldump...

MySQL で削除されたレコードが有効にならない理由のトラブルシューティング

オンライン MySQL トランザクションの問題の記録先週の金曜日、大きなテーブルを削除する操作を実行...

JavaScript マウスイベントのケーススタディ

マウスイベントマウスが特定の操作を実行すると、イベント オブジェクトが生成され、イベントがトリガーさ...

JavaScriptコールバック関数の詳細な理解

目次序文クイックレビュー: JavaScript 関数関数とは何ですか?関数を宣言する関数の呼び出し...

CSS で 3D ブック効果を実装するためのサンプル コード

さっそく、レンダリングを見てみましょうソースコードは以下のとおりです <!DOCTYPE ht...

innerHTML を理解する

<br />関連記事: innerHTML HTML DOM insertRow() メ...

Vue補間式とv-textディレクティブの違い

目次1. プラグイン式を使用する2. プラグイン式でv-cloakを使用してちらつきの問題を解決する...

HiveメタデータをMySQLに設定するプロセス全体

Hiveのインストールディレクトリで、confディレクトリに入り、hive-site.xmlファイル...

Mysql binlog ログファイルが大きすぎる場合の解決策

目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...