openSUSE Leap 16

MariaDB 11.8 : レプリケーション2025/11/24

 

MariaDB レプリケーションの設定です。プライマリー/レプリカ型の冗長構成になります。

[1]

プライマリー/レプリカ 共に、こちらを参考に MariaDB サーバーをインストールして起動しておきます

[2] プライマリーサーバー側で設定を変更し、レプリケーション用のユーザーを作成しておきます。
www:~ #
vi /etc/my.cnf
# 15行目 : 変更
bind-address    = 0.0.0.0

# 35,36行目 : コメント解除
log_bin=mysql-bin
binlog_format=mixed

# 44行目 : サーバーID を適当にユニークな値に変更
server-id=101

# 45行目 : GTID ドメイン ID を定義 (適当な整数値)
gtid_domain_id=1

www:~ #
systemctl restart mariadb

www:~ #
mariadb

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 11.8.3-MariaDB-log MariaDB package

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

# ユーザー作成 : [password] は任意のパスワードを設定
MariaDB [(none)]> grant replication slave on *.* to repl_user@'%' identified by 'password'; 
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye
[3] レプリカサーバー側の設定をレプリケーション用に変更します。
node01:~ #
vi /etc/my.cnf
# 15行目 : 変更
bind-address    = 0.0.0.0

# 35,36行目 : コメント解除
log_bin=mysql-bin
binlog_format=mixed

# 44行目 : サーバーID を適当にユニークな値に変更
server-id=102

# 45行目 : GTID ドメイン ID を定義 (プライマリと同じ値)
gtid_domain_id=1

# リードオンリー
read_only=1
# ホスト名を設定
report-host=node01.srv.world

node01:~ #
systemctl restart mariadb

[4] プライマリーサーバー側でダンプデータを取得します。
取得したデータは [sftp] なり [rsync] 等を使用して、レプリカサーバー側へ転送しておきます。
# 任意のディレクトリを作成してデータ取得

www:~ #
mkdir /home/mariadb_backup

www:~ #
mariadb-backup --backup --target-dir /home/mariadb_backup -u root

.....
.....
[00] 2025-11-24 10:30:54 All tables unlocked
[00] 2025-11-24 10:30:54 Backup created in directory '/home/mariadb_backup/'
[00] 2025-11-24 10:30:54 MySQL binlog position: filename 'mysql-bin.000001', position '521', GTID of the last change '1-101-1'
[00] 2025-11-24 10:30:54 Writing backup-my.cnf
[00] 2025-11-24 10:30:54         ...done
[00] 2025-11-24 10:30:54 Writing mariadb_backup_info
[00] 2025-11-24 10:30:54         ...done
[00] 2025-11-24 10:30:54 Redo log (from LSN 50466 to 50482) was copied.
[00] 2025-11-24 10:30:54 completed OK!
[5] レプリカサーバー側で、プライマリーサーバー側から転送したダンプデータを展開して、レプリケーションの設定をします。 レプリケーション開始後は、プライマリー側でデータベースを作成する等してレプリケーションが行われていることを確認しておくとよいでしょう。
# MariaDB を停止して既存データは削除

node01:~ #
systemctl stop mariadb

node01:~ #
rm -rf /var/lib/mysql/*
# 転送したバックアップデータ

node01:~ #
ll mariadb_backup.tar.gz

-rw-r--r--. 1 suse suse 736838 Nov 24 10:31 mariadb_backup.tar.gz
node01:~ #
tar zxvf mariadb_backup.tar.gz

# リストア事前タスク実行 : [completed OK] であれば OK

node01:~ #
mariadb-backup --prepare --target-dir /root/mariadb_backup

mariadb-backup based on MariaDB server 11.8.3-MariaDB Linux (x86_64)
[00] 2025-11-24 10:32:49 cd to /root/mariadb_backup/
[00] 2025-11-24 10:32:49 open files limit requested 0, set to 1024
[00] 2025-11-24 10:32:49 This target seems to be not prepared yet.
[00] 2025-11-24 10:32:49 mariabackup: using the following InnoDB configuration for recovery:
[00] 2025-11-24 10:32:49 innodb_data_home_dir = .
[00] 2025-11-24 10:32:49 innodb_data_file_path = ibdata1:12M:autoextend
[00] 2025-11-24 10:32:49 innodb_log_group_home_dir = .
[00] 2025-11-24 10:32:49 Starting InnoDB instance for recovery.
[00] 2025-11-24 10:32:49 mariabackup: Using 100663296 bytes for buffer pool (set by --use-memory parameter)
2025-11-24 10:32:49 0 [Note] InnoDB: Compressed tables use zlib 1.2.13
2025-11-24 10:32:49 0 [Note] InnoDB: Number of transaction pools: 1
2025-11-24 10:32:49 0 [Note] InnoDB: Using AVX512 instructions
2025-11-24 10:32:49 0 [Note] InnoDB: Using Linux native AIO
2025-11-24 10:32:49 0 [Note] InnoDB: innodb_buffer_pool_size_max=96m, innodb_buffer_pool_size=96m
2025-11-24 10:32:49 0 [Note] InnoDB: Completed initialization of buffer pool
2025-11-24 10:32:49 0 [Note] InnoDB: Memory-mapped log (block size=512 bytes)
2025-11-24 10:32:49 0 [Note] InnoDB: End of log at LSN=50482
2025-11-24 10:32:49 0 [Note] InnoDB: Buffered log writes (block size=512 bytes)
[00] 2025-11-24 10:32:49 Last binlog file , position 0
recovered pages: 0% 75% 100% (0.0 seconds); tables to flush: 1 0 (0.0 seconds);
[00] 2025-11-24 10:32:49 completed OK!

# リストア実行

node01:~ #
mariadb-backup --copy-back --target-dir /root/mariadb_backup

.....
.....
[01] 2025-11-24 10:33:37 Copying ./test/db.opt to /var/lib/mysql/test/db.opt
[01] 2025-11-24 10:33:37         ...done
[01] 2025-11-24 10:33:37 Copying ./mariadb_backup_info to /var/lib/mysql/mariadb_backup_info
[01] 2025-11-24 10:33:37         ...done
[01] 2025-11-24 10:33:37 Copying ./xtrabackup_binlog_pos_innodb to /var/lib/mysql/xtrabackup_binlog_pos_innodb
[01] 2025-11-24 10:33:37         ...done
[00] 2025-11-24 10:33:37 completed OK!

node01:~ #
chown -R mysql:mysql /var/lib/mysql

node01:~ #
restorecon -R /var/lib/mysql

node01:~ #
systemctl start mariadb
# レプリケーション設定

node01:~ #
mariadb

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 11.8.3-MariaDB-log MariaDB package

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

# master_host=(マスターサーバーの IP アドレス)
# master_user=(レプリケーション用 ID)
# master_password=(レプリケーション用 ID のパスワード)
MariaDB [(none)]> change master to 
master_host='10.0.0.31',
master_user='repl_user',
master_password='password',
master_use_gtid=slave_pos;
Query OK, 0 rows affected (0.041 sec)

# レプリケーション開始
MariaDB [(none)]> start slave; 
Query OK, 0 rows affected (0.00 sec)

# ステータス確認
MariaDB [(none)]> show slave status\G 
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 10.0.0.31
                   Master_User: repl_user
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000001
           Read_Master_Log_Pos: 521
                Relay_Log_File: node01-relay-bin.000002
                 Relay_Log_Pos: 820
         Relay_Master_Log_File: mysql-bin.000001
              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: 521
               Relay_Log_Space: 1130
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: Yes
            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: Yes
                 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: 1-101-1
       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: 1
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
          Replicate_Rewrite_DB:
1 row in set (0.002 sec)
関連コンテンツ