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 inspect コマンドの使用に関するヒント

説明と紹介Docker inspect は Docker クライアントのネイティブ コマンドであり、...

MySQLのさまざまなロックに関する詳細な理解

目次ロックの概要ロックの分類データベース操作の粒度データ操作の種類MySQL ロックさまざまなストレ...

MySQLキーワードDistinctの詳細な紹介

MySQLキーワードDistinctの使い方の紹介DDL SQLを準備します: テーブルテストを作成...

JavaScript/TypeScript で同時リクエスト制御を実装するためのサンプルコード

シナリオリクエストが 10 件あるが、同時リクエストの最大数は 5 件で、リクエスト結果が必要である...

MySQLで一意のサーバーIDを生成する方法

序文MySQL では、server-id を使用してデータベース インスタンスを一意に識別し、それを...

JavaScriptの記事では、Webフォームの操作方法を説明します。

1. はじめに先ほど、ウェブページの急速な発展について紹介しました。今回は、より深い内容についてお...

要素 UI に基づいてクエリ コンポーネントを段階的にカプセル化する方法

目次関数基本的なクエリ関数クエリ条件の初期化ページのレンダリングクエリと表示の最適化をさらに強化プル...

ウェブページ制作と饅頭の関係(体験の共有)

昨日は遅くまで寝ていて、一日中起きていました。私の年齢では、夜更かしして本を書くのはもう無理のようで...

タブバーのいくつかの実装方法(推奨)

タブ: カテゴリ + 説明タグバー: カテゴリ => ユーザーに現在地と目的地を知らせる1. ...

mysql8.0 パスワードを忘れた場合の修正とネットコマンドのサービス名が無効になる問題

cmdにnet start mysqlと入力すると、プロンプトが表示されます: サービス名が無効です...

HTML フォームタグチュートリアル (2):

このチュートリアルでは、ウェブデザインにおけるFORMフォームタグのさまざまな属性の応用を紹介します...

Dockerを使用してMySQLデータベースをインストールするDeepinの詳細な説明

まずMySQLソースをクエリするdocker 検索 mysql公式ウェブサイトにアクセスしてイメージ...

springcloud alibaba nacos linux 設定の詳細なチュートリアル

まず、github から nacos の圧縮パッケージをダウンロードします: https://git...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...