MariaDB Replication 複寫
因 BUBU 很早之前就想要測試看看 MariaDB 複寫功能了,剛好因為使用 PowerDNS 這個服務資料庫是用 MariaDB 來做服務會把一些 DNS 的資訊寫入到資料庫。
運行環境
環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式
- 系統環境: Debian 11
- 資料庫服務: MariaDB 10.6、MariaDB 10.8
測試過程
Master 設定
- 先進到 Mariadb 設定檔
vim /etc/mysql/mariadb.conf.d/50-server.cnf
- 修改設定檔內容如下:
# 設定成允許任意可連線,後續再用防火牆來做來源的限制。
bind-address = 0.0.0.0
# 設定 server-id 這由自己去設定想要的 ID
server-id = 101
# 將這個給取消註解
log_bin = /var/log/mysql/mysql-bin.log
# 設定了保留10天BINLOG(單位:天)
expire_logs_days = 10
# 記錄檔的大小
max_binlog_size = 100M
# 可以指定想要同步的資料表
binlog_do_db = powerdns
- 設定完重啟資料庫
systemctl stop mariadb && systemctl start mariadb
- 登入資料庫新增加 slave 連線使用者
mariadb -u root -p
# 新增加使用者並給予權限
GRANT REPLICATION SLAVE ON *.* TO 'pdns-secondary'@'<SECONDARY_SERVER_IP>' IDENTIFIED BY '<SECRET_PASSWORD>';
# 讓剛剛輸入的值生效
flush privileges;
- 輸出現在資料狀態
show master status \G;
- 將輸出的畫面上
File
及Position
的值都記錄下來。
Slave 設定
- 先進到 Mariadb 設定檔
vim /etc/mysql/mariadb.conf.d/50-server.cnf
- 修改設定檔內容如下:
# 設定 server-id 這由自己去設定想要的 ID
server-id = 102
# 將這個給取消註解
log_bin = /var/log/mysql/mysql-bin.log
# 啟用中繼日誌服務
relay-log=slave-relay-bin
# 中繼日誌索引
relay-log-index=slave-relay-bin.index
# 複寫的資料表
replicate-do-db=powerdns
- 重啟資料庫
systemctl stop mariadb && systemctl start mariadb
- 登入資料庫設定
Master
主機相關資訊
mariadb -u root -p
MariaDB [(none)]> change master to
-> master_host='10.0.0.1', # master IP
-> master_user='pdns-secondary', # 剛剛設定的帳號
-> master_password='SECRET_PASSWORD', # 剛剛設定的密碼
-> master_log_file='mysql-bin.000001', # 上面得到的 File
-> master_log_pos=311; # 上面得到的 Position
- 啟動 slave 服務
start slave;
- 檢查目前 slave 的狀態
show slave status \G;
- 注意
slave
這兩個項目狀態,都要是 YES 否則同步就會有問題。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
補充說明
備註
以上設定完成後在主機的服務上設定一些資訊讓這些資訊寫入資料庫後,再去看第二台的的資料庫看是否有正常將資料寫入過來。