MySQLマスタースレーブレプリケーション
1.マスタースレーブレプリケーションが必要なのはなぜですか?
-
複雑なビジネスのシステムでは、そのようなシナリオがあります。SQLステートメントが必要な場合
锁表
、一時的な不能使用读
サービスが発生し、実行中のビジネスに大きな影響を与えます。マスタースレーブレプリケーションを使用すると、マスターライブラリが書き込みを担当し、スレーブライブラリが読み取りを担当します。このように、マスターライブラリがテーブルをロックしている場合でも、スレーブライブラリを読み取ることでビジネスの正常な動作を保証できます。 -
データ用
热备
-
業務量が増加し、I / Oアクセスの頻度が高すぎて、1台のマシンでは対応できない場合、ディスクI / Oアクセスの頻度を減らして改善するために、マルチデータベースストレージが実行されます。単一のマシンのI/Oパフォーマンス。
2.マスター/スレーブレプリケーションとは何ですか?
MySQLマスタースレーブレプリケーションとは、 MySQLデータベースサーバーのマスターノードからスレーブノードにデータをレプリケートできることを意味します。
一个
多个
MySQLは异步复制
デフォルトでこの方法を採用しているため、スレーブノードはマスターサーバーにアクセスして自身のデータを更新する必要がなく、データの更新はリモート接続で実行でき、スレーブノードはマスターデータベース内のすべてのデータベースをコピーできます。または特定のデータベース、または特定のテーブル。
3.原則
master服务器
データの変更はバイナリbinlog日志
に記録され、マスター上のデータが発生する改变
と、変更はバイナリログに書き込まれます。slave服务器
マスターバイナリログは、変更されたかどうかを確認するために特定の時間間隔で検出され、変更がある場合は、I/OThread
マスターバイナリの要求イベントが開始されます。- 同時に、マスターノードは各I / Oスレッドのダンプスレッドを開始して、バイナリイベントを送信し、スレーブノードのローカルリレーログに保存します。
- スレーブノード
启动SQL线程
は、リレーログからバイナリログを読み取り、ローカルで再生して、データがマスターノードと一致するようにします。 - 最後に、I / OThreadとSQLThreadはスリープ状態になり、次のウェイクアップを待ちます。
要約:
从库
2つのスレッド、1つのI / Oスレッドと1つのSQLスレッドを生成し、これら2つが状態になっていることを確認してください开启
。I/O线程
メインライブラリのbinlogを要求し、取得したbinlogをローカルrelay-log(リレーログ)ファイルに書き込みます。- メインライブラリは、binlog
log dump线程
をスレーブライブラリのI/Oスレッドに渡すために生成します。 - SQLスレッドは、ファイル内のログを読み取り
relay log
、それをSQLステートメントに解析して、1つずつ実行します。
4.構成
4.1 2台のサーバーを準備します(MySQLがインストールされています)
master:xxx
slave:xxx
4.2構成を変更する
2台のマシンが同時に同じ名前のデータベースを作成します。
create database test_db charset=utf8mb4;
4.2.1マスターマスターサーバー
- 現れる
my.cnf
sudo vim /etc/mysql/my.cnf
- この情報を追加する
#在mysqld模块中添加如下配置信息
[mysqld]
log-bin=master-bin #二进制文件名称
binlog-format=ROW #二进制日志格式,有row、statement、mixed三种格式,row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍,statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
server-id=1 # 要求各个服务器的id必须不一样
binlog-do-db=test_db # 同步的数据库名称
- マスターサーバーにログインするためのスレーブサーバーのアカウント認証を構成します
grant replication slave on *.* to 'root'@'%' identified by 'root';
- 権限の更新
flush privileges;
- マスターサーバーを再起動します
service mysql restart
- mysql
master
で表示status
show master stataus
4.2.2スレーブスレーブサーバー
my.cnf
ファイルを探す
- 構成情報
これserver-id
はメインサーバーで覚えておく必要があります不一样
!
mysql
サービスを再起動します
service mysqld restart
- メインサーバーに接続します
change master to master_host='主服务地址',master_user='root',master_password='root',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154;
これmaster_log_file
はshow master stataus
上記の情報です。
これmaster_log_pos
はshow master stataus
上記の情報です。
- スレーブを開始
start slave
- スレーブを表示
show slave status \G(注意没有分号)
これらの2つを見るとき、それはYES
大丈夫です、他にならないように注意してくださいCONNECTING
- 奴隷を止めろ
stop slave
4.2.3検証
-
master
メインサーバー
-
slave
サブサーバー
両方のサーバー空
の状態
まず、master节点
ステートメントを挿入できます
次に、slave节点
それ
を見て、実装されていることを確認します主从复制
。