レプリケーションのセットアップ(非GTID)
以下の手順で行う
- ソース(マスター)側の設定
- server_idの設定
- log_bin(バイナリログ)の有効化
- レプリカ(スレーブ)接続用ユーザ作成
- レプリカ(スレーブ)へデータコピー
- ソースでダンプ取得
- ソースからレプリカへファイルコピー
- レプリカにインポート
- レプリカ(スレーブ)側の設定
ソース(マスター)側の設定
server_idの設定
my.cnfに server_id=1 などを追記して再起動
log_bin(バイナリログ)の有効化
my.cnfに log_bin を追記して再起動
レプリカ(スレーブ)接続用ユーザ作成
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'Repl_pass'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
(REPLICATION SLAVE権限は相変わらずSLAVEって言ってるのがなんだかなーとは思うが…)
MySQL :: MySQL 8.0 リファレンスマニュアル :: 6.2.2 MySQL で提供される権限
レプリカ(スレーブ)へデータコピー
ソースでダンプ取得
$ mysqldump --user=root --password=xxxx --single-transaction --master-data=2 --flush-logs --all-databases> /tmp/mysql_dump.sql
トリガーや、ストアドなどもつけるなら --triggers --routines --events オプションも入れとく。
ソースからレプリカへファイルコピー
もしくはダンプ時にリモート取得でもOK
レプリカにインポート
$ mysql --user=root --password=xxxx < /tmp/mysql_dump.sql
レプリカ(スレーブ)側の設定
server_idの設定
my.cnfに server_id=2 などを追記して再起動
レプリケーションの設定
8.0.22までと23以降でコマンドが異なる。
MySQL 8.0.22以前
mysql> CHANGE MASTER TO MASTER_HOST='source.example.com', MASTER_USER='repl', MASTER_PASSWORD='Repl_pass', MASTER_PORT=3306, MASTER_LOG_FILE='source-bin.001', MASTER_LOG_POS=4, MASTER_CONNECT_RETRY=10;
詳しくはここ
MySQL 8.0.23以降
mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='source.example.com', SOURCE_USER='repl', SOURCE_PASSWORD='Repl_pass', SOURCE_PORT=3306, SOURCE_LOG_FILE='source-bin.001', SOURCE_LOG_POS=4, SOURCE_CONNECT_RETRY=10;
詳しくはここ
レプリケーションの開始
MySQL 8.0.22以前
mysql> START SLAVE;
MySQL 8.0.23以降
mysql> START REPLICA;
詳しくはここ
レプリケーション確認
MySQL 8.0.22以前
mysql> SHOW SLAVE STATUS\G
MySQL 8.0.23以降
mysql> SHOW REPLICA STATUS\G
Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. エラーが出てたらとりあえず一回replユーザーでつないどけばOK。
$ mysql -urepl -pRepl_pass -h127.0.0.1 -P3306
MySQL8.0を再起動するとアプリからつながらなくなる理由 - 41から始めました
で根本対応しておくのがベター。
レプリケーションステートメント
その他色々やりたい場合はここから探す