以下は、1 つのマスターと 2 つのスレーブで Mysql サービスを構成する具体的なプロセスです。
記事ディレクトリ
マウント用のディレクトリを作成する
データの永続性を確保し、コンテナの再起動後のデータ損失を防止します
- マスターノード
/tools/docker-mysql/master/data /tools/docker-mysql/master/conf /tools/docker-mysql/master/logs
- 1つから
/tools/docker-mysql/slave1/data /tools/docker-mysql/slave1/conf /tools/docker-mysql/slave1/logs
- 2人から
/tools/docker-mysql/slave2/data /tools/docker-mysql/slave2/conf /tools/docker-mysql/slave2/logs
CNF構成を変更する
- マスターノード
vi /tools/docker-mysql/master/conf/master.cnf [mysqld] log-bin=mysql-bin server-id=100
- 1つから
vi /tools/docker-mysql/slave1/conf/slave1.cnf [mysqld] log-bin=mysql-bin server-id=101
- 2人から
vi /tools/docker-mysql/slave2/conf/slave2.cnf [mysqld] log-bin=mysql-bin server-id=102
mysqlサービスイメージをプルします
最新の画像はこちらから引っ張ってきました
docker pull mysql/mysql-server:latest
カスタム Docker ネットワーク
コンテナーの IP を指定するために使用する場合は、使用可能な IP セグメントを指定します。
docker network create --subnet=172.18.0.0/24 dockernet
コンテナを起動する
- マスターノード
docker run \ -itd \ -v /tools/docker-mysql/master/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/master/data:/var/lib/mysql \ -v /tools/docker-mysql/master/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3311:3306 \ --name mysql-master \ --restart=always \ --network dockernet \ --ip=172.18.0.2 \ -d mysql:latest
- 1つから
docker run \ -itd \ -v /tools/docker-mysql/slave1/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/slave1/data:/var/lib/mysql \ -v /tools/docker-mysql/slave1/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3312:3306 \ --name mysql-slave1\ --restart=always \ --network dockernet \ --ip=172.18.0.3 \ -d mysql:latest
- 2人から
docker run \ -itd \ -v /tools/docker-mysql/slave2/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/slave2/data:/var/lib/mysql \ -v /tools/docker-mysql/slave2/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3313:3306 \ --name mysql-slave2\ --restart=always \ --network dockernet \ --ip=172.18.0.4 \ -d mysql:latest
主なライブラリ構成
メインライブラリのステータスを表示する
docker exec -it 主库容器ID /bin/bash
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 157 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
ライブラリからバックアップ ユーザーを作成する
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
create user 'backup'@'%' identified WITH mysql_native_password by '123456';
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' ;
ライブラリから設定する
マスター情報の変更
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
// mysql-bin.000003 是我们在主库查看状态时查找到的 File 信息
// 157 是我们在主库查看状态时查找到的 Position 信息
change master to master_host='172.18.0.2',master_user='backup',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=157;
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' ;
スレーブサービスを開始する
start slave;
スレーブサービスのステータスが正常かどうかを確認します
show slave status;
次のステータスはYesで、通常の動作を示します。
例外の実行中は、Last_Errorで例外情報を表示できます。