マスタースレーブレプリケーションの原則の概要:
- マスターサーバーのデータが送信されると、データはバイナリログに書き込まれます
- スレーブサーバーは、IOスレッドを介してバイナリログログを監視し、ログが変更されると、内容をリレーログ(リレーログ)に読み書きします。
- リレースレッドはリレーログを監視し、ログが変更されると、ログの増分書き込み操作が1回実行され、データファイルに書き込まれます。
ハードウェア計画(仮想マシン)
CPU名 |
ザS |
IP |
使用する |
備考 |
Cent OS 7_107 |
Cent OS7 |
1 92.168.1.107 |
MのASTER / 書き込み |
Mysql 8 |
Cent OS 7_108 |
Cent OS7 |
1 92.168.1.108 |
スレーブ/読み取り |
Mysql 8 |
Cent OS 7_109 |
Cent OS7 |
1 92.168.1.109 |
スレーブ/読み取り |
Mysql 8 |
1つのマスターと2つのスレーブの3つの仮想マシンを作成します。
マスタースレーブレプリケーションの具体的な実装手順:
- マスターマスターサーバーの設定
- my.cnfを変更する
vi /etc/my.cnf
#バイナリファイルを有効にする
log-bin = mysql-bin
#マスターをサーバーと区別するために使用されるサーバーの一意のIDを設定します。
server-id = 107
- Mysqlサービスを再起動します。
systemctl restart mysqld
- Mysqlにログインしてスレーブサーバーを認証する
mysql -uroot -p
mysqlパスワードを入力し、Enterキーを押してmysqlインターフェースに入ります
- マスターライブラリにレプリケーションスレーブのアクセス許可を持つアカウントを作成し、スレーブライブラリにバイナリログへのアクセスを提供します。
CREATE USER 'sluser'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'sluser'@'%';
- 権限を更新
flush privileges;
- マスターステータスの表示
show master status;
2. サーバー構成からのLave
サーバー108と109はスレーブサーバーです。以下では、108のスレーブサーバーの構成のみを示します。109と108の構成方法は同じであるため、ここでは繰り返しません。
- my.cnfを変更する
vi /etc/my.cnf
次のコンテンツを追加
server-id = 108
replay-log = mysql-bin
- mysqlにログインしてスレーブサーバーを設定します
マスターサーバーを監視するようにスレーブサーバーを設定する
CHANGE MASTER TO MASTER_HOST='192.168.1.107',MASTER_USER='sluser',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1707;
説明:
MASTER_HOST:マスターIPまたは仮想IPまたはドメイン名
MASTER_USER:以前にマスターで作成されたログインアカウント名
MASTER_PASSWORD:作成されたログインアカウントのパスワード
MASTER_LOG_FILE:マスター的ファイル
MASTER_LOG_POS:マスターの位置
- サーバーからコピー機能を開始
start slave;
- スレーブサーバーのステータスを表示する
show slave status \G
Slave_IO_Runningの場合:はい
Slave_SQL_Running:はい、スレーブサーバーが正常に構成され、マスター/スレーブレプリケーションの構成が完了したことを示します。
3.マスター/スレーブレプリケーション機能をテストする
- メインサーバーはデータベースを作成し、t_userテーブルを追加します
create database testdb;
use testdb;
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `t_user` VALUES (1, 'test', 25);
- サーバーからデータベースを表示する
show databases;
use testdb;
show tables;
select * from t_user;
マスターサーバーで作成されたテーブルと書き込まれたデータはスレーブサーバーでもクエリできることがわかります。これは、マスター/スレーブレプリケーション構成が成功したことを示しています。