循序漸進(jìn)學(xué)習(xí)如何在MariaDB中配置主從復(fù)制?
在我們前面的教程中,我們已經(jīng)學(xué)習(xí)了 如何安裝和配置 MariaDB,也學(xué)習(xí)了 管理 MariaDB 的一些基礎(chǔ)命令?,F(xiàn)在我們來學(xué)習(xí),如何在 MariaDB 服務(wù)器上配置一個主從復(fù)制。
復(fù)制是用于為我們的數(shù)據(jù)庫創(chuàng)建多個副本,這些副本可以在其它數(shù)據(jù)庫上用于運(yùn)行查詢,像一些非常繁重的查詢可能會影響主數(shù)據(jù)庫服務(wù)器的性能,或者我們可以使用它來做數(shù)據(jù)冗余,或者兼具以上兩個目的。我們可以將這個過程自動化,即主服務(wù)器到從服務(wù)器的復(fù)制過程自動進(jìn)行。執(zhí)行備份而不影響在主服務(wù)器上的寫操作。
因此,我們現(xiàn)在去配置我們的主-從復(fù)制,它需要兩臺安裝了 MariaDB 的機(jī)器。它們的 IP 地址如下:
- 主服務(wù)器 - 192.168.1.120 主機(jī)名 - master.ltechlab.com
- 從服務(wù)器 - 192.168.1.130 主機(jī)名 - slave.ltechlab.com
MariaDB 安裝到這些機(jī)器上之后,我們繼續(xù)進(jìn)行本教程。如果你需要安裝和配置 MariaDB 的教程,請查看這個教程。
第 1 步 - 主服務(wù)器配置
我們現(xiàn)在進(jìn)入到 MariaDB 中的一個命名為 important
的數(shù)據(jù)庫,它將被復(fù)制到我們的從服務(wù)器。為開始這個過程,我們編輯名為 /etc/my.cnf
的文件,它是 MariaDB 的配置文件。
$ vi /etc/my.cnf
在這個文件中找到 [mysqld]
節(jié),然后輸入如下內(nèi)容:
[mysqld]
log-bin
server_id=1
replicate-do-db=important
bind-address=192.168.1.120
保存并退出這個文件。完成之后,需要重啟 MariaDB 服務(wù)。
$ systemctl restart mariadb
接下來,我們登入我們的主服務(wù)器上的 Mariadb 實(shí)例。
$ mysql -u root -p
在它上面創(chuàng)建一個命名為 slaveuser
的為主從復(fù)制使用的新用戶,然后運(yùn)行如下的命令為它分配所需要的權(quán)限:
STOP SLAVE;
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'%' IDENTIFIED BY 'iamslave';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
注意: 我們配置主從復(fù)制需要 MASTER_LOG_FILE
和 MASTER_LOG_POS
的值,它可以通過 show master status
來獲得,因此,你一定要確保你記下了它們的值。
這些命令運(yùn)行完成之后,輸入 exit
退出這個會話。
第 2 步 - 創(chuàng)建一個數(shù)據(jù)庫備份,并將它移動到從服務(wù)器上
現(xiàn)在,我們需要去為我們的數(shù)據(jù)庫 important
創(chuàng)建一個備份,可以使用 mysqldump
命令去備份。
$ mysqldump -u root -p important > important_backup.sql
備份完成后,我們需要重新登錄到 MariaDB 數(shù)據(jù)庫,并解鎖我們的表。
$ mysql -u root -p
$ UNLOCK TABLES;
然后退出這個會話。現(xiàn)在,我們移動我們剛才的備份到從服務(wù)器上,它的 IP 地址是:192.168.1.130。
在主服務(wù)器上的配置已經(jīng)完成了,現(xiàn)在,我們開始配置從服務(wù)器。
第 3 步:配置從服務(wù)器
我們再次去編輯(從服務(wù)器上的) /etc/my.cnf
文件,找到配置文件中的 [mysqld]
節(jié),然后輸入如下內(nèi)容:
[mysqld]
server-id = 2
replicate-do-db=important
[ …]
現(xiàn)在,我們恢復(fù)我們主數(shù)據(jù)庫的備份到從服務(wù)器的 MariaDB 上,運(yùn)行如下命令:
$ mysql -u root -p < /data/ important_backup.sql
當(dāng)這個恢復(fù)過程結(jié)束之后,我們將通過登入到從服務(wù)器上的 MariaDB,為數(shù)據(jù)庫 important
上的用戶 'slaveuser' 授權(quán)。
$ mysql -u root -p
GRANT ALL PRIVILEGES ON important.* TO 'slaveuser'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
接下來,為了這個變化生效,重啟 MariaDB。
$ systemctl restart mariadb
第 4 步:啟動復(fù)制
記住,我們需要 MASTER_LOG_FILE
和 MASTER_LOG_POS
變量的值,它可以通過在主服務(wù)器上運(yùn)行 SHOW MASTER STATUS
獲得。現(xiàn)在登入到從服務(wù)器上的 MariaDB,然后通過運(yùn)行下列命令,告訴我們的從服務(wù)器它應(yīng)該去哪里找主服務(wù)器。
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST= '192.168.1.110′, MASTER_USER='slaveuser', MASTER_PASSWORD='iamslave', MASTER_LOG_FILE='mariadb-bin.000001′, MASTER_LOG_POS=460;
SLAVE START;
SHOW SLAVE STATUS\G;
注意: 請根據(jù)你的機(jī)器的具體情況來改變主服務(wù)器的配置。
第 5 步:測試復(fù)制
我們將在我們的主服務(wù)器上創(chuàng)建一個新表來測試主從復(fù)制是否正常工作。因此,登入到主服務(wù)器上的 MariaDB。
$ mysql -u root -p
選擇數(shù)據(jù)庫為 important
:
use important;
在這個數(shù)據(jù)庫上創(chuàng)建一個名為 test
的表:
create table test (c int);
然后在這個表中插入一些數(shù)據(jù):
insert into test (c) value (1);
檢索剛才插入的值是否存在:
select * from test;
你將會看到剛才你插入的值已經(jīng)在這個新建的表中了。
現(xiàn)在,我們登入到從服務(wù)器的數(shù)據(jù)庫中,查看主從復(fù)制是否正常工作。
$ mysql -u root -p
$ use important;
$ select * from test;
你可以看到與前面在主服務(wù)器上的命令輸出是一樣的。因此,說明我們的主從服務(wù)工作正常,沒有發(fā)生任何問題。