MySQL是一款非常流行的數(shù)據(jù)庫系統(tǒng),它被廣泛應(yīng)用于各種網(wǎng)站、應(yīng)用程序和服務(wù)器中。在這些應(yīng)用場景下,MySQL的穩(wěn)定性和可靠性是非常重要的,尤其是對(duì)于一些關(guān)鍵性應(yīng)用。因此,數(shù)據(jù)庫備份和恢復(fù)機(jī)制是非常必要的。
MySQL數(shù)據(jù)庫的備份主要有兩種:物理備份和邏輯備份。其中,物理備份是將數(shù)據(jù)庫完全拷貝到另外一個(gè)位置,包括數(shù)據(jù)庫數(shù)據(jù)文件、日志文件等。邏輯備份是通過sql命令將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為文本文件,再通過sql命令將文本文件中的數(shù)據(jù)導(dǎo)入到另一個(gè)數(shù)據(jù)庫中。
但是,這些備份方法無法實(shí)現(xiàn)數(shù)據(jù)庫的實(shí)時(shí)備份和恢復(fù),對(duì)于一些高可用性場景來說,有些不夠?qū)嵱谩R虼?,在MySQL數(shù)據(jù)庫雙機(jī)熱備方案中,主要使用的是MySQL的復(fù)制技術(shù)。也就是說,在復(fù)制技術(shù)中,主數(shù)據(jù)庫執(zhí)行的sql語句會(huì)被同步到備庫中,保證了數(shù)據(jù)的實(shí)時(shí)備份。
# 在主庫中創(chuàng)建復(fù)制賬戶 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'password'; # 在備庫中的主配置文件中設(shè)置主庫地址和復(fù)制賬戶信息 server-id = 2 log-bin = mysql-bin log-slave-updates = 1 relay-log = mysql-relay-bin log-error = mysql.err read-only = 1 replicate-do-db = mydb replicate-ignore-db = mysql replicate-ignore-db = information_schema binlog-do-db = mydb binlog-ignore-db = mysql binlog-ignore-db = information_schema relay-log-space-limit = 5G auto_increment_increment = 2 auto_increment_offset = 2 # 在備庫中啟動(dòng)從服務(wù)器 CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1; START SLAVE;
在實(shí)際使用過程中,如果主庫發(fā)生故障導(dǎo)致不能正常工作時(shí),備庫會(huì)根據(jù)設(shè)置自動(dòng)接收主庫的操作。并且,在恢復(fù)主庫后,備庫會(huì)自動(dòng)回復(fù)到從庫的狀態(tài),繼續(xù)從主庫進(jìn)行數(shù)據(jù)同步。因此,MySQL數(shù)據(jù)庫雙機(jī)熱備方案可以在一般情況下提供非常高的可用性。