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

推薦する

MySQL における KEY、PRIMARY KEY、UNIQUE KEY、INDEX の違い

タイトルで提起された問題は、段階的に分解して解決することができます。 MySQL では KEY と ...

WeChatミニプログラムは同時通訳を利用して音声認識を実装します

私は同時通訳音声認識機能を使用して、WeChatアプレットのホームページの音声検索機能を実現しました...

アイデアをDockerに接続してワンクリックでデプロイする方法

1. docker設定ファイルを変更し、ポート2375を開きます。 [root@s162 docke...

Dockerはクロスプラットフォーム機能を実現するためにnet5プログラムを導入

展開環境: ここでは docker コンテナ、Linux システム、VmWare 仮想マシンが使用さ...

Vueは動的に生成されたコンポーネントをドラッグアンドドロップする要件を実装します

目次製品要件アイデア問題ライブラリ選択をドラッグコンポーネントを生成する方法コンポーネントを生成する...

Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

目次Vue3 カプセル化メッセージプロンプトインスタンス関数スタイルレイアウトカプセル化メッセージ....

CentOS7にsshをインストールして設定する

1. openssh-serverをインストールする yum インストール -y openssl o...

JavaScript における var、let、const の違いの詳細な説明

目次グローバル変数として可変ホイスト一時的なデッドゾーンブロックスコープ重複したステートメント宣言さ...

子要素の margin-top によって親要素が移動する問題の解決方法

問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...

VMware 仮想マシン ubuntu18.04 インストール チュートリアル

インストール手順1. 仮想マシンを作成する 2. [カスタム(詳細)]を選択し、[次へ]をクリックし...

Vue はデータの変更をどのように追跡しますか?

目次背景例誤解 - コールスタックを表示するためにウォッチでブレークポイントを設定する正しいアプロー...

Linux の crw、brw、lrw などのファイル属性は何ですか?

ファイルとは何ですか?すべてのファイルは実際には文字列のストリームですが、適切な解析方法を使用すると...

DockerにELKをインストールしてJSON形式のログ分析を実装する方法

ELKとは何ですか? ELK は、Elastic が提供するログ収集およびフロントエンド表示ソリュー...

MySQL におけるさまざまな一般的な結合テーブルクエリの例の概要

この記事では、例を使用して、MySQL のさまざまな一般的な結合テーブルクエリについて説明します。ご...