この記事では、Mysqlデータベースのマスターとスレーブの分離のサンプルコードを主に紹介します。MySQLデータベースの読み取り/書き込み分離設定により、データベースの書き込み操作と読み取り操作が異なるサーバーで実行され、同時実行性と対応する速度が向上します。
はじめに
MySQL データベース設定の読み取りと書き込みを分離することで、データベースに対する書き込み操作と読み取り操作を異なるサーバーで実行できるようになり、同時実行性と応答速度が向上します。
現在、ほとんどの Web サイトは一般に大規模になり、データベースのマスターとスレーブの分離と読み書きの分離を採用しています。これは、バックアップとして機能するだけでなく、データベースの読み書きの負荷を軽減します。自分ではやったことがないので、今日は練習してその過程を記録します。
実験環境
ローカルコンピューターとリモートvpsの2台のサーバーを用意しました。2台のマシンにデータベースがインストールされています。
ここでは MySQL のインストールについては説明しません。MySQL のバージョンが一致していない場合、下位バージョンから上位バージョンへの読み取り時に問題が発生する可能性があるため、同じバージョンをインストールすることが最善です。一貫性を保つことが最善です。
マスターマスター
45.78.57.4 centos 7Linuxシステム、mysqlバージョン5.1.73
スレーブスレーブ
ネイティブ127.0.0.1 macOSシステム、バージョン 5.1.73
構成
ユーザーの作成
メインライブラリの実行ログをライブラリから読み取るためのユーザーをメインライブラリに作成します。
mysqlコマンドラインで実行する必要があります。最初にコマンドラインにログインする必要があります
コードは次のとおりです:
GRANT REPLICATION SLAVE ON *.* TO 'test'@'45.78.57.4' IDENTIFIED BY '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] server-id=1 log-bin=master-bin log-bin-index=master-bin.index datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0 max_allowed_packet=100M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
ステータスを確認します
mysqlコマンドラインにログインした後、show master statusを入力します。次の情報が表示されたら、メインデータベースの設定が完了したことを意味します
mysql> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000001 | 672675 | | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
FileとPositionの2つの内容を記録します。 、スレーブ データベースを構成するときに使用されます。
スレーブライブラリの設定
ローカルコンピュータ(スレーブライブラリ)上のmy.cnfファイルを見つけて、次の内容を追加します。この設定はメインライブラリの設定と同じ意味です
server-id=2 relay-log=slave-relay-bin relay-log-index=slave-relay-bin.index
注意してください。メインライブラリの場所を決定する 同じことですが、最後に配置されていたため接続できませんでした。
マスターとスレーブ データベースの関連付け
最後のステップは非常に重要です。スレーブ データベースの MySQL コマンド ラインにログインし、次のコードを実行します。これは主にマスター データベースの一部の情報を関連付けることです。
change master to master_host='45.78.57.4', #Master 服务器Ip master_port=3306, master_user='test', master_password='test', master_log_file='master-bin.000001', #Master日志文件名 master_log_pos=672675; #Master日志同步开始位置
実行が成功したかどうかに注意してください。実行が失敗した場合は、コードを注意深くチェックして、どこに間違いがあるかを確認してください。
正常に実行された場合は、スレーブを起動し、接続状態を確認してください。
//需要再mysql命令行执行 start slave; show slave status\G; //查看slave连接状态
ステータスメッセージ
Slave_IO_State: Waiting for master to send event Master_Host: 45.78.57.4 Master_User: test Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 672913 Relay_Log_File: slave-relay-bin.000044 Relay_Log_Pos: 504 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes
注意!
成功したとみなされるには、これら 2 つのステータスが [はい] である必要があります。そうでない場合は、上記の手順で構成エラーを確認してください。
Slave_IO_Running: Yes Slave_SQL_Running: Yes
テスト
次に、メインデータベースにデータを追加して、スレーブデータベースに同じデータがあるかどうかを確認します。存在する場合、構成は正常であり、機能は正常に使用されます。
マスター/スレーブ分離の主な原理は、メインライブラリの実行ログ機能を有効にして、メインライブラリのログ情報をスレーブライブラリから読み取り、メインライブラリで実行されたSQLステートメントをスレーブで実行することです。マスタとスレーブの分離を実現するためのライブラリを使用すると、マスタとスレーブのデータが常に維持され、データのバックアップ機能が維持されます。
以上がMysqlデータベースのマスター・スレーブ分離サンプルコードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。