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を使用してJenkinsをインストールする方法

目次1. イメージをプルする2. ローカルデータボリュームを作成する3. コンテナを作成する4. J...

スケジュールされた時間に古いジャンクファイルを自動的に削除する Linux 用の Autotrash ツール

Autotrash は、古い削除済みファイルを消去するプロセスを自動化するコマンド ライン プログラ...

MySQL データ挿入最適化メソッドconcurrent_insert

スレッドがテーブルに対して DELAYED ステートメントを実行するときに、そのようなハンドラーが存...

Nginx http を https にアップグレードする手順を完了する

httpとhttpsの違いは一部のウェブサイトでは、http を開くと、安全ではないというメッセージ...

JavaScriptでよく使われる配列重複排除実戦ソースコード

アレイの重複排除は、通常、就職面接中に遭遇し、アレイの重複排除方法のコードを手動で記述することが求め...

HTMLはWEB標準の開発の中心的な基盤です

HTML 中心のフロントエンド開発は、ほぼ Web 標準の意味です。共通しているのは「分離」という考...

Linux の RPM パッケージでインストールされた xinetd ベースのサービスの管理

目次序文1. xinetdサービスに基づく起動管理(1)Telnetサービスのインストール(2)Te...

ネイティブjsは9マスグリッドのドラッグアンドドロップを実現します

ネイティブJSを使用して9つの正方形のグリッドを記述し、9つのグリッドの位置をドラッグして変更する効...

nginx をベースにした Web クラスター プロジェクトをすばやく構築する方法を説明します。

目次1. プロジェクト環境2. プロジェクトの説明3. プロジェクトの手順1. インストール2. 構...

Vue で Alibaba のアイコンフォント ベクター アイコンを使用する方法について

インターネット上には多くのインポート方法があり、公式も3つのインポート方法を提供していますが、インポ...

MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法

アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...

CSS--overflow:hidden のプロジェクト例

以下は、私のプロジェクトでこのプロパティを使用する方法の例です。 (1)激しく透明な浮遊コードをコピ...

Linux での mysql および mysql.sock のインストールに関する問題

最近、Linux に Aphace、mysql、php をインストールするときに多くの問題に遭遇しま...

静的ページと動的ページの実行メカニズムの説明

1. 静的ページとは、Web ページ内に HTML タグのみが含まれるページです。WEB 開発者がこ...

スキニングを実現するネイティブJavaScript

ネイティブJavaScriptでスキニングを実装するための具体的なコードは参考までに。具体的な内容は...