前言廢話
這個 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_FILE
及 MASTER_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 會告訴你找不到資料表!