41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

レプリケーションのセットアップ(非GTID)

レプリケーションのセットアップ(非GTID)

以下の手順で行う

  1. ソース(マスター)側の設定
    • server_idの設定
    • log_bin(バイナリログ)の有効化
    • レプリカ(スレーブ)接続用ユーザ作成
  2. レプリカ(スレーブ)へデータコピー
    • ソースでダンプ取得
    • ソースからレプリカへファイルコピー
    • レプリカにインポート
  3. レプリカ(スレーブ)側の設定

ソース(マスター)側の設定

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から始めました

で根本対応しておくのがベター。

レプリケーションステートメント

その他色々やりたい場合はここから探す

MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.4 レプリケーションステートメント