MariaDB Replication 教學

前言廢話

這個 Replication 適用於備份資料庫,當然玩法很多啦,看你用這個的玩法是什麼而已。

他會同時將主節點的更改,一起推送給次要節點,某種程度上的即時更新。

安裝 MariaDB

這是不管在哪台機器,都要安裝的資料庫步驟。

首先,先透過 apt 安裝 MariaDB 伺服器

sudo apt-get install mariadb-server

接著執行資料庫基本安裝的嚮導。

sudo mysql_secure_installation

他會要求輸入密碼及設定密碼,若你是使用 sudo 進去,直接按 Enter 即可。

Enter current password for root (enter for none): Enter
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

編輯 /etc/mysql/mariadb.conf.d/50-server.cnf 這個檔案

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

文件的中間,你會看到 bind-address = 127.0.0.1,我們將其改為 0.0.0.0,來允許遠程登入。

bind-address = 0.0.0.0

接著重啟 MariaDB 伺服器

sudo systemctl restart mariadb

設定主要次要節點

主節點

我們必須告訴資料庫,這台是主節點,因此需要在檔案裡面註明。

編輯 /etc/mysql/mariadb.conf.d/50-server.cnf

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

在文件最末端貼上以下文字

server-id        = 1
log_bin          = /var/log/mysql/mysql-bin.log
max_binlog_size  = 100M
relay_log        = /var/log/mysql/mysql-relay-bin
relay_log_index  = /var/log/mysql/mysql-relay-bin.index

重啟伺服器

sudo systemctl restart mariadb

接著,我們進入 SQL 模式。

sudo mysql -u root -p

添加一個使用者給 replication 使用。(記得將 YOURPASSWORD 改成你的密碼)

MariaDB [(none)]> CREATE USER 'replication'@'%' identified by 'YOURPASSWORD';

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]> SHOW MASTER STATUS;

MariaDB [(none)]> EXIT;

其中,請記下 執行 SHOW MASTER STATUS 後的結果,待會會用到。

次節點

跟主節點一下,編輯 /etc/mysql/mariadb.conf.d/50-server.cnf 檔案。

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

在文件的最末端貼上以下文字

server-id        = 2
log_bin          = /var/log/mysql/mysql-bin.log
max_binlog_size  = 100M
relay_log        = /var/log/mysql/mysql-relay-bin
relay_log_index  = /var/log/mysql/mysql-relay-bin.index

重啟 MariaDB 伺服器

sudo systemctl restart mariadb

接著一樣,進入 SQL 模式。

sudo mysql -u root -p

先將次要節點停止,並告訴他主要節點的資訊後,在重新啟動他。

這邊稍微解釋第二行的部分:

MASTER_HOST 為主節點的 IP 位址

MASTER_USER 為使用者名稱(也就是剛剛建立的)

MASTER_PASSWORD 是該使用者的密碼

MASTER_LOG_FILEMASTER_LOG_POS 你可以在上面主節點的步驟中找到。

MariaDB [(none)]> STOP SLAVE;

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST = '192.168.0.2', MASTER_USER = 'replication', MASTER_PASSWORD = 'YOURPASSWORD', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 786;

MariaDB [(none)]> START SLAVE;

MariaDB [(none)]> EXIT;

你可以使用以下指令來查詢目前的同步狀態。

MariaDB [(none)]> SHOW SLAVE STATUS \G

同場加映

以下內容為我爬文後統整的資料,提供參考。

只複製指定的資料庫或表

有的時候,你可能並不需要複製到整個資料庫,但若你只執行上面的步驟,會全部複製。

因此,我們可以在次要伺服器,添加一些限制的元素。

在次節點編輯 /etc/mysql/mariadb.conf.d/50-server.cnf

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

在文件的最末端加上以下的指令,% 代表任何字元,只要符合格式的都會套用。若不需要,移除即可。

replicate-wild-do-table = foo%.bar%

存檔後,重啟 MariaDB。

sudo systemctl restart mariadb

!! 注意 !!

如果你選擇這個方式,那你應該在次要伺服器預先建立資料庫及資料表。不然同步時,MariaDB 會告訴你找不到資料表!