takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

CentOS 8 + MariaDB 10.5 の 双方向レプリケーション + 1 read only replica で 1 台 Main が落ちた時のシュミレーション

目次

元記事

takashikono.hatenadiary.jp

そのまえに、 MariaDB のプロンプトのカスタマイズ

レプリケーションをしていると、プロンプトのカスタマイズをしないと、どのホストか不明になるのでカスタマイズする
のだけれどプロセスの再起動が必要そう
良い子はレプリケーション前にプロンプトのカスタマイズをしよう

ref

qiita.com

sisidovski.hatenablog.com

そして、

man mysql

にも書いてあった

とりあえずやってみる

mysql --defaults-extra-file=mariadb_root.cnf

PROMPT \u@\h [\d] >

log

MariaDB [(none)]> PROMPT \u@\h [\d] >
PROMPT set to '\u@\h [\d] >'
root@localhost [(none)] >
root@localhost [(none)] >SELECT

んー

> のすぐ右に半角スペースがないのがチョット駄目
ホストが localhost なのは、接続のときに IP アドレスを指定しなかったからなのだろう
強制的にホスト名を入れたほうが良さそう
もし server.cnf$HOSTNAME$(uname -n) 辺りを入れてつかいまわしたいところ
日時を入れるかどうかはすごく迷う
会社で使う時はそこのポリシーに従うべき

チョットいろいろ試す

PROMPT '\u@\h [\d] \D \U \n> '

log

root@localhost [(none)] >PROMPT '\u@\h [\d] \D \U \n> '
PROMPT set to ''\u@\h [\d] \D \U \n> ''
'root@localhost [(none)] Mon Aug 16 15:22:25 2021 root@localhost
> '
'root@localhost [(none)] Mon Aug 16 15:22:30 2021 root@localhost
> '

なるほど。 PROMPT コマンドだと入力後に自動で ' が入る
半角スペースは \_ である
man 見ていて思ったが、 %Y-%m-%d をしようとしたけど、日を表す書式が存在しない???
致命的だと思う
日時を ISO 表記させようと思ったけど、これじゃ出来ない
プロンプトに日時を入れるなというメッセージかな?

PROMPT \u@radius0 \R:\s [\d]>\_

log

root@radius0 15:29 [(none)]>

ちなみに PROMPT コマンドを実行すると

PROMPT

log

root@radius0 15:29 [(none)]> PROMPT
Returning to default PROMPT of \N [\d]>
MariaDB [(none)]>

デフォルトプロンプトになる

defaults-extra-file に書き加えてみる
内容は以下 prompt= の行を追記

[client]
...
prompt='\\u@radius0 [\\d] (\\D)\\n>\\_'

実行

[ope@radius0 ~]$ mysql --defaults-extra-file=mariadb_root.cnf
...
root@radius0 [(none)] (Mon Aug 16 15:42:43 2021)
>

なるほど。サーバのプロセス再起動を伴うのが嫌もしくは NG である場合、これが良さそう
チョット修正して、ここまでとしよう

root@radius0 の prompt

[client]
...
prompt='\\u@radius0 [\\d] (\\R:\\m:\\s)\\n>\\_'

log

root@radius0 [(none)] (15:48:46)
>

root@radius1 の prompt

[client]
...
prompt='\\u@radius1 [\\d] (\\R:\\m:\\s)\\n>\\_'

log

root@radius1 [(none)] (15:51:52)
>

root@slave-db0 の prompt

[ope@slave-db0 ~]$ sudo cp -aiv /etc/my.cnf.d/server.cnf \
> /etc/my.cnf.d/server.cnf.$(date +%F_%H-%M-%S)
'/etc/my.cnf.d/server.cnf' -> '/etc/my.cnf.d/server.cnf.2021-08-16_15-54-21'
[ope@slave-db0 ~]$ sudo vim /etc/my.cnf.d/server.cnf

diff

[ope@slave-db0 ~]$ sudo diff -uprN \
> /etc/my.cnf.d/server.cnf.2021-08-16_15-54-21 \
> /etc/my.cnf.d/server.cnf
--- /etc/my.cnf.d/server.cnf.2021-08-16_15-54-21        2021-08-12 11:18:50.477378529 +0900
+++ /etc/my.cnf.d/server.cnf    2021-08-16 15:55:29.924396084 +0900
@@ -21,6 +21,8 @@ server_id=103
 # auto_increment_offset=2
 read_only

+prompt='\\u@slave-db0 [\\d] (\\R:\\m:\\s)\\n>\\_'
+
 #
 # * Galera-related settings
 #
[ope@slave-db0 ~]$

restart

[ope@slave-db0 ~]$ sudo systemctl restart mariadb.service
Job for mariadb.service failed because the control process exited with error code.
See "systemctl status mariadb.service" and "journalctl -xe" for details.
[ope@slave-db0 ~]$

修正

[ope@slave-db0 ~]$ sudo cp -aiv \
> /etc/my.cnf.d/server.cnf.2021-08-16_15-54-21 \
> /etc/my.cnf.d/server.cnf
cp: '/etc/my.cnf.d/server.cnf' を上書きしますか? y
'/etc/my.cnf.d/server.cnf.2021-08-16_15-54-21' -> '/etc/my.cnf.d/server.cnf'
[ope@slave-db0 ~]$

[ope@slave-db0 ~]$ sudo systemctl restart mariadb.service
[ope@slave-db0 ~]$ sudo systemctl status mariadb.service | grep -i "main pid"
 Main PID: 37947 (mariadbd)
[ope@slave-db0 ~]$ sudo systemctl status mariadb.service | grep -i -e "main pid" -e "active"
   Active: active (running) since Mon 2021-08-16 15:59:00 JST; 32s ago
 Main PID: 37947 (mariadbd)
[ope@slave-db0 ~]$

client

[ope@slave-db0 ~]$ sudo cp -aiv /etc/my.cnf.d/client.cnf \
> /etc/my.cnf.d/client.cnf.$(date +%F_%H-%M-%S)
'/etc/my.cnf.d/client.cnf' -> '/etc/my.cnf.d/client.cnf.2021-08-16_16-03-18'
[ope@slave-db0 ~]$
[ope@slave-db0 ~]$ sudo vim /etc/my.cnf.d/client.cnf
[ope@slave-db0 ~]$

diff

[ope@slave-db0 ~]$ sudo diff -uprN \
> /etc/my.cnf.d/client.cnf.2021-08-16_16-03-18 \
> /etc/my.cnf.d/client.cnf
--- /etc/my.cnf.d/client.cnf.2021-08-16_16-03-18        2021-04-11 17:04:59.320899245 +0900
+++ /etc/my.cnf.d/client.cnf    2021-08-16 16:03:51.908792957 +0900
@@ -6,6 +6,7 @@

 [client]
 default-character-set=utf8
+prompt='\\u@slave-db0 [\\d] (\\R:\\m:\\s)\\n>\\_'

 # This group is not read by mysql client library,
 # If you use the same .cnf file for MySQL and MariaDB,
[ope@slave-db0 ~]$

restart

[ope@slave-db0 ~]$ sudo systemctl restart mariadb.service
[ope@slave-db0 ~]$ sudo systemctl status mariadb.service | grep -E "Active|Main PID"
   Active: active (running) since Mon 2021-08-16 16:04:53 JST; 21s ago
 Main PID: 38156 (mariadbd)
[ope@slave-db0 ~]$

test

[ope@slave-db0 ~]$ mysql --defaults-extra-file=mariadb_root.cnf
...

root@slave-db0 [(none)] (16:05:58)
>

ok

本題 Main を落としてどうするか

流れ

  • radius0 の mariadb を stop する
    • radius1, slave-db0 のみとなる
  • radius1, slave-db0 の Con1 の Replica を Stop する

ここまでが down 時にまずやること(たぶん)
ここからはホストのメンテナンスなどをしている想定なので、データの更新が起きている想定

  • radius1 にデータを Insert するなどして更新させる

ホストがメンテナンス終わった想定

  • radius1 からデータをバックアップする
  • radius0 にリストア
  • radius0 の mariadb--skip-slave オプションを付けて起動
    • radius0 の Con2 の Replica が自動で同期しようとするのを止める?(本当は不要かも)
  • radius0 で CHANGE REPLICATION SOURCE 'Con2' TO を行う
  • radius0 で BINLOG GTID を確認する
  • radius1, slave-db0 で CHANGE REPLICATION SOURCE 'Con1' TO を行う

以上(だと思う)

radius0 の mariadb を止める

# radius0
sudo systemctl stop mariadb.service
sudo systemctl status mariadb.service

log

[ope@radius0 ~]$ sudo systemctl stop mariadb.service
[ope@radius0 ~]$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.9 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor pre>
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: inactive (dead) since Mon 2021-08-16 16:37:13 JST; 3s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 36714 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_ST>
  Process: 36699 ExecStart=/usr/sbin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER >
  Process: 36665 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && V>
  Process: 36661 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_STA>
 Main PID: 36699 (code=exited, status=0/SUCCESS)
   Status: "MariaDB server is down"

...
[ope@radius0 ~]$

down した

Con1 の Replica を Stop する

mysql --defaults-extra-file=mariadb_root.cnf

STOP REPLICA 'Con1' ;
SHOW REPLICA 'Con1' STATUS \G

radius1 Con1 STOP REPLICA

root@radius1 [(none)] (16:38:56)
> STOP REPLICA 'Con1' ;
Query OK, 0 rows affected (0.017 sec)

root@radius1 [(none)] (16:39:08)
> SHOW REPLICA 'Con1' STATUS \G
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 192.168.100.102
                   Master_User: replication_user
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: radius0-bin.000001
           Read_Master_Log_Pos: 911
                Relay_Log_File: radius1-relay-bin-con1.000002
                 Relay_Log_Pos: 1212
         Relay_Master_Log_File: radius0-bin.000001
              Slave_IO_Running: No
             Slave_SQL_Running: No
...
                 Last_IO_Errno: 2003
                 Last_IO_Error: error reconnecting to master 'replication_user@192.168.100.102:3306' - retry-time: 10  maximum-retries: 86400  message: Can't connect to server on '192.168.100.102' (111 "Connection refused")
                Last_SQL_Errno: 0
                Last_SQL_Error:
...

slave-db0 Con1 STOP REPLICA

root@slave-db0 [(none)] (16:40:42)
> STOP REPLICA 'Con1' ;
Query OK, 0 rows affected (0.027 sec)

root@slave-db0 [(none)] (16:40:48)
> SHOW REPLICA 'Con1' STATUS \G
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 192.168.100.102
                   Master_User: replication_user
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: radius0-bin.000001
           Read_Master_Log_Pos: 911
                Relay_Log_File: slave-db0-relay-bin-con1.000002
                 Relay_Log_Pos: 674
         Relay_Master_Log_File: radius0-bin.000001
              Slave_IO_Running: No
             Slave_SQL_Running: No
...
                 Last_IO_Errno: 2003
                 Last_IO_Error: error reconnecting to master 'replication_user@192.168.100.102:3306' - retry-time: 10  maximum-retries: 86400  message: Can't connect to server on '192.168.100.102' (111 "Connection refused")
                Last_SQL_Errno: 0
                Last_SQL_Error:
...

radius1 に なにかデータを 追加する

USE radius;
SELECT * FROM radcheck ;

INSERT INTO radcheck 
(username, attribute, op, value)
VALUES
('foo4', 'Cleartext-Password', ':=', 'foo4pass')
;

SELECT * FROM radcheck ;

log

root@radius1 [(none)] (16:46:04)
> USE radius;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
root@radius1 [radius] (16:46:14)
> SELECT * FROM radcheck ;
+----+----------+--------------------+----+----------+
| id | username | attribute          | op | value    |
+----+----------+--------------------+----+----------+
|  1 | foo1     | Cleartext-Password | := | foo1pass |
|  2 | foo2     | Cleartext-Password | := | foo2pass |
|  3 | foo3     | Cleartext-Password | := | foo3pass |
+----+----------+--------------------+----+----------+
3 rows in set (0.003 sec)

root@radius1 [radius] (16:46:19)
> INSERT INTO radcheck
    -> (username, attribute, op, value)
    -> VALUES
    -> ('foo4', 'Cleartext-Password', ':=', 'foo4pass')
    -> ;
Query OK, 1 row affected (0.054 sec)

root@radius1 [radius] (16:46:58)
> SELECT * FROM radcheck ;
+----+----------+--------------------+----+----------+
| id | username | attribute          | op | value    |
+----+----------+--------------------+----+----------+
|  1 | foo1     | Cleartext-Password | := | foo1pass |
|  2 | foo2     | Cleartext-Password | := | foo2pass |
|  3 | foo3     | Cleartext-Password | := | foo3pass |
|  4 | foo4     | Cleartext-Password | := | foo4pass |
+----+----------+--------------------+----+----------+
4 rows in set (0.001 sec)

root@radius1 [radius] (16:47:06)
>

slave-db0 で、追加されたことを確認する

USE radius;
SELECT * FROM radcheck ;

log

root@slave-db0 [(none)] (16:48:04)
> USE radius;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
root@slave-db0 [radius] (16:48:08)
> SELECT * FROM radcheck ;
+----+----------+--------------------+----+----------+
| id | username | attribute          | op | value    |
+----+----------+--------------------+----+----------+
|  1 | foo1     | Cleartext-Password | := | foo1pass |
|  2 | foo2     | Cleartext-Password | := | foo2pass |
|  3 | foo3     | Cleartext-Password | := | foo3pass |
|  4 | foo4     | Cleartext-Password | := | foo4pass |
+----+----------+--------------------+----+----------+
4 rows in set (0.001 sec)

root@slave-db0 [radius] (16:48:09)
>

radius1 からデータをバックアップする

InnoDB を使っている場合、 READ LOCK 不要らしい

dev.mysql.com

dev.mysql.com

引用

InnoDB を使用している場合、読取りロックは必要なく、データスナップショットの転送に十分な長さのトランザクションで十分です。 詳細は、セクション15.19「InnoDBMySQL レプリケーション」を参照してください。

ということで、いきなりバックアップする

mysqldump --defaults-extra-file=mariadb_root.cnf --all-databases \
--flush-logs --single-transaction --master-data=2 > \
all_databases_on_master_$(date +%F_%H-%M-%S).sql

log

[ope@radius1 ~]$ mysqldump --defaults-extra-file=mariadb_root.cnf --all-databases \
> --flush-logs --single-transaction --master-data=2 > \
> all_databases_on_master_$(date +%F_%H-%M-%S).sql
mysqldump: unknown variable 'prompt=\u@radius1 [\d] (\R:\m:\s)\n>\_'
[ope@radius1 ~]$

先程のプロンプトオプションが邪魔になった。コメントアウトして実行する

[ope@radius1 ~]$ mysqldump --defaults-extra-file=mariadb_root.cnf --all-databases \
> --flush-logs --single-transaction --master-data=2 > \
> all_databases_on_master_$(date +%F_%H-%M-%S).sql
[ope@radius1 ~]$ ls -tlr | tail -n 1
-rw-rw-r--. 1 ope ope 1398151  8月 16 16:54 all_databases_on_master_2021-08-16_16-53-59.sql
[ope@radius1 ~]$

radius0 にリストア

まずは、バックアップデータを転送

sftp ope@192.168.100.102
lls
put all_databases_on_master_2021-08-16_16-53-59.sql
ls
exit

log

[ope@radius1 ~]$ sftp ope@192.168.100.102
Connected to ope@192.168.100.102.
sftp> lls
all_databases_on_master_2021-08-11_14-36-18.sql  mariadb_radius.cnf
all_databases_on_master_2021-08-16_16-52-47.sql  mariadb_root.cnf
all_databases_on_master_2021-08-16_16-53-59.sql
sftp> put all_databases_on_master_2021-08-16_16-53-59.sql
Uploading all_databases_on_master_2021-08-16_16-53-59.sql to /home/ope/all_databases_on_master_2021-08-16_16-53-59.sql
all_databases_on_master_2021-08-16_16-53-59.sql         100% 1365KB  10.8MB/s   00:00
sftp> ls
all_databases_on_master_2021-08-11_14-36-18.sql
all_databases_on_master_2021-08-16_16-53-59.sql
mariadb_radius.cnf
mariadb_root.cnf
sftp> exit
[ope@radius1 ~]$

リストアを実行

mysql --defaults-extra-file=mariadb_root.cnf < <file name>
mysql --defaults-extra-file=mariadb_root.cnf < \
  all_databases_on_master_2021-08-16_16-53-59.sql

log

[ope@radius0 ~]$ mysql --defaults-extra-file=mariadb_root.cnf < \
>   all_databases_on_master_2021-08-16_16-53-59.sql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[ope@radius0 ~]$

mysql が起動していないのでそりゃリストア出来ない

とりあえず radius0 の mariadb を起動する

sudo systemctl start mariadb
sudo systemctl status mariadb | grep -E "Active|Main PID"

log

[ope@radius0 ~]$ sudo systemctl start mariadb
[ope@radius0 ~]$ sudo systemctl status mariadb | grep -E "Active|Main PID"
   Active: active (running) since Mon 2021-08-16 17:14:22 JST; 3s ago
 Main PID: 38262 (mariadbd)
[ope@radius0 ~]$

radius0 の Con2 の Status を見る

SHOW REPLICA 'Con2' STATUS \G

log

> SHOW REPLICA 'Con2' STATUS \G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.100.103
                   Master_User: replication_user
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: radius1-bin.000002
           Read_Master_Log_Pos: 389
                Relay_Log_File: radius0-relay-bin-con2.000004
                 Relay_Log_Pos: 690
         Relay_Master_Log_File: radius1-bin.000002
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
...

あれ?想定と違う

table を確認

SELECT * FROM radius.radcheck;

log

> SELECT * FROM radius.radcheck;
+----+----------+--------------------+----+----------+
| id | username | attribute          | op | value    |
+----+----------+--------------------+----+----------+
|  1 | foo1     | Cleartext-Password | := | foo1pass |
|  2 | foo2     | Cleartext-Password | := | foo2pass |
|  3 | foo3     | Cleartext-Password | := | foo3pass |
|  4 | foo4     | Cleartext-Password | := | foo4pass |
+----+----------+--------------------+----+----------+
4 rows in set (0.001 sec)

root@radius0 [(none)] (17:16:53)
>

??? radius0 側では追加していない foo4 のデータが書き込まれている
こんな挙動いつもするのかな?
mariadb の failover に関する公式ドキュメントどこか探せない私情けないorz

Con1 の REPLICA のステータスを確認する

radius1

SHOW REPLICA 'Con1' STATUS \G

log

> SHOW REPLICA 'Con1' STATUS \G
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 192.168.100.102
                   Master_User: replication_user
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: radius0-bin.000001
           Read_Master_Log_Pos: 911
                Relay_Log_File: radius1-relay-bin-con1.000002
                 Relay_Log_Pos: 1212
         Relay_Master_Log_File: radius0-bin.000001
              Slave_IO_Running: No
             Slave_SQL_Running: No
...
                 Last_IO_Errno: 2003
                 Last_IO_Error: error reconnecting to master 'replication_user@192.168.100.102:3306' - retry-time: 10  maximum-retries: 86400  message: Can't connect to server on '192.168.100.102' (111 "Connection refused")
...

slave-db0

SHOW REPLICA 'Con1' STATUS \G

log

> SHOW REPLICA 'Con1' STATUS \G
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 192.168.100.102
                   Master_User: replication_user
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: radius0-bin.000001
           Read_Master_Log_Pos: 911
                Relay_Log_File: slave-db0-relay-bin-con1.000002
                 Relay_Log_Pos: 674
         Relay_Master_Log_File: radius0-bin.000001
              Slave_IO_Running: No
             Slave_SQL_Running: No
...
                 Last_IO_Errno: 2003
                 Last_IO_Error: error reconnecting to master 'replication_user@192.168.100.102:3306' - retry-time: 10  maximum-retries: 86400  message: Can't connect to server on '192.168.100.102' (111 "Connection refused")

STOP REPLICA していたのでそりゃそう

Con1 の REPLICA の復旧

試しに radius0 でおもむろに REPLICA START してみる

START REPLICA 'Con1' ;
SHOW REPLICA 'Con1' STATUS \G

log

root@radius1 [(none)] (17:19:58)
> START REPLICA 'Con1' ;
Query OK, 0 rows affected (0.127 sec)

> SHOW REPLICA 'Con1' STATUS \G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.100.102
                   Master_User: replication_user
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: radius0-bin.000002
           Read_Master_Log_Pos: 344
                Relay_Log_File: radius1-relay-bin-con1.000002
                 Relay_Log_Pos: 645
         Relay_Master_Log_File: radius0-bin.000002
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
...
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
...

slave-db0 でも START REPLICA する

START REPLICA 'Con1' ;
SHOW REPLICA 'Con1' STATUS \G

log

root@slave-db0 [radius] (17:25:05)
> START REPLICA 'Con1' ;
Query OK, 0 rows affected (0.057 sec)

root@slave-db0 [radius] (17:25:09)
> SHOW REPLICA 'Con1' STATUS \G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.100.102
                   Master_User: replication_user
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: radius0-bin.000002
           Read_Master_Log_Pos: 344
                Relay_Log_File: slave-db0-relay-bin-con1.000002
                 Relay_Log_Pos: 645
         Relay_Master_Log_File: radius0-bin.000002
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 344
               Relay_Log_Space: 963
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
 Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 101
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: Slave_Pos
                   Gtid_IO_Pos: 0-102-157
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: optimistic
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
1 row in set (0.000 sec)

root@slave-db0 [radius] (17:25:12)
>

起動しただけで同期した
楽だけどなんで?
Relay log を転送し続けるの?
うーん。

まとめ

PROMPT について

  • PROMPT を書き換えることが出来る
  • 日(date) を表現する書式が存在しないっぽい
  • PROMPT は以下の方法?で変更できる
    • mysql の対話シェル
    • defaults-extra-file
    • client.cnf

最終的にはとりあえず以下のようになった

prompt='\\u@\\h [\\d] (\\R:\\m:\\s)\\n>\\_'

まだ改善の余地がある

フェイルオーバーについて

  • 双方向レプリケーションをしている場合、down した mariadb のプロセスを起動しただけで同期して復旧することがある
    • しかし、その条件は分かっていない
  • 本当は RESET MASTER STOP REPLICA RESET REPLICA とかを行って CHANGE REPLICATION SOURCE ['connection_name'] TO とかしないといけないんだろうと思う
  • connection の MAIN がダウンしたら、 connection の REPLICA は STOP しておいたほうが良さそう
  • connection の MAIN が復旧後 connection の REPLICA を START させるのが良さそう

あまりにも想定していないあっさりした終わり方だったので、面食らっている。ドキュメントどこぞ。