底下這篇簡單有用!
https://noter.tw/4508/mariadb-replication-%E8%A8%AD%E5%AE%9A/
略過說明,指令部份如下。
設定 Master
修改 MariaDB 設定
# 使用文字編輯器修改設定檔
vim /etc/mysql/mariadb.conf.d/50-server.cnf
# 搜尋 bind-address 並修改成自己連線的 IP
bind-address = 10.0.0.1
# 搜尋 server-id,修改成自己想要設定的 ID
# 可以隨便設定,只要每一台都不同即可
server-id = 101
# 搜尋 log_bin,取消註解
log_bin = /var/log/mysql/mysql-bin.log
# 離開文字編輯器
:wq!
# 重啟 mariadb
systemctl restart mariadb
進入資料庫建立一個供 slave 連線的使用者
# 登入 mariadb
mysql -u root -p
# 進入 mariadb 之後建立 slave 使用者
# 這邊要注意
# a. '%' 表示任意主機,也可限定主機名稱或 IP 較安全
# b. 'your password' 改成從 slave 要連線過來的密碼
MariaDB [(none)]> grant replication slave on *.* to replica@'%' identified by 'your password';
# 讓上述設定生效
MariaDB [(none)]> flush privileges;
把 master lock 住,取得 master 的資訊
# 把資料表鎖住,避免匯出的當下有資料變動
MariaDB [(none)]> flush tables with read lock;
# 查看 master 的狀態,把 File 跟 Position 記下來
MariaDB [(none)]> show master status;
# 離開 mariadb
MariaDB [(none)]> exit;
開始匯出 master 所有資料
# 匯出所有資料
mysqldump -u root -p --all-databases --lock-all-tables --events > mysql_dump.sql
# 再進入 mariadb 把 lock 狀態解除
mysql -u root -p
MariaDB [(none)]> unlock tables;
MariaDB [(none)]> exit;
到這邊 master 的設定差不多就完成了。(這邊記錄的順序跟原文不太一樣,不過達成的目的都相同)
設定 Slave
進入 slave 後,一樣先設定 mariadb 設定檔
# 使用文字編輯器修改設定檔
vim /etc/mysql/mariadb.conf.d/50-server.cnf
# 搜尋 bind-address 並修改成自己連線的 IP
bind-address = 10.0.0.2
# 搜尋 server-id,修改成自己想要設定的 ID
# 可以隨便設定,只要每一台都不同即可
server-id = 102
# 搜尋 log_bin,取消註解
log_bin = /var/log/mysql/mysql-bin.log
# 加入惟獨的屬性
read_only=1
# 設定 hostname
report-host=xxxx.abc.net
# 離開文字編輯器
:wq!
# 重啟 mariadb
systemctl restart mariadb
把剛剛 master 匯出的資料抓回來
# 用法 rsync -avzh 來源 目的地
# 我們從 slave 把檔案從 master 拉過來,
# 因此 rsync -avzh master的連線資訊+檔案 slave的位置
rsync -avzh root@test:/root/mysql_dump.sql ./
把所有資料匯入到資料庫中
# 將 master dump 出來的資料匯入到資料庫中
mysql -u root -p < /root/mysql_dump.sql
設定 master 連線資訊
# 進入 mariadb
mysql -u root -p
# 設定 master 連線資訊
MariaDB [(none)]> change master to
-> master_host='10.0.0.1', # master IP
-> master_user='replica', # 剛剛設定的帳號
-> master_password='yourpassword', # 剛剛設定的密碼
-> master_log_file='mysql-bin.000001', # 上面得到的 File
-> master_log_pos=311; # 上面得到的 Position
啟動 slave
# 啟動 slave
MariaDB [(none)]> start slave;
# 查看 slave 狀態
MariaDB [(none)]> show slave status\G
# Slave_IO_State: Waiting for master to send event
# 如果顯示這樣表示連線成功,正在等待資料更新
# 有可能會有其他錯誤,連線錯誤、無法登入錯誤 ... 等
完成!