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