MySQL 復(fù)制是一種基于主從復(fù)制實(shí)現(xiàn)的高可用性解決方案,可以極大地提高應(yīng)用程序的可用性和性能。主從復(fù)制通過將數(shù)據(jù)從一個(gè) MySQL 服務(wù)器(主服務(wù)器)復(fù)制到一個(gè)或多個(gè) MySQL 從服務(wù)器來實(shí)現(xiàn)數(shù)據(jù)冗余和負(fù)載平衡。
MySQL 復(fù)制有兩種復(fù)制模式:基于語句的復(fù)制和基于行的復(fù)制?;谡Z句的復(fù)制是默認(rèn)的復(fù)制模式,它復(fù)制與主服務(wù)器上執(zhí)行的 SQL 語句相關(guān)的信息。而基于行的復(fù)制僅復(fù)制發(fā)生更改的行?;谛械膹?fù)制能夠提高復(fù)制性能,并且在一些情況下,還能夠減少主從服務(wù)器之間的數(shù)據(jù)不一致性。
為了啟用 MySQL 復(fù)制,需要在主服務(wù)器和從服務(wù)器上設(shè)置配置文件。同時(shí),在主服務(wù)器上需要?jiǎng)?chuàng)建一個(gè)用于復(fù)制的帳戶。以下是一個(gè)創(chuàng)建用于復(fù)制的帳戶的示例 SQL 語句。
CREATE USER 'replication'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
接下來需要將主服務(wù)器上的二進(jìn)制日志(binlog)的配置信息復(fù)制到從服務(wù)器上。為此,需要在主服務(wù)器上運(yùn)行以下 SQL 語句:
SHOW MASTER STATUS;
該語句將輸出一個(gè)包含 binlog 文件名和位置的表。將這些信息復(fù)制到從服務(wù)器上的配置文件中。以下是一個(gè)示例從服務(wù)器上的配置文件:
[mysqld] server-id=2 log-bin=mysql-bin relay-log=mysql-relay-bin replicate-do-db=mydatabase binlog_format=row master-host=192.168.0.1 master-user=replication master-password=password master-connect-retry=60
在從服務(wù)器上完成配置后,運(yùn)行以下 SQL 語句啟動(dòng)復(fù)制過程:
CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; START SLAVE;
運(yùn)行以上 SQL 語句后,從服務(wù)器將開始復(fù)制主服務(wù)器上的數(shù)據(jù)。如果一切正常,可以運(yùn)行以下 SQL 語句檢查復(fù)制狀態(tài):
SHOW SLAVE STATUS \G
該語句將輸出一個(gè)包含有關(guān)從服務(wù)器復(fù)制狀態(tài)的表。在成功配置和啟動(dòng) MySQL 復(fù)制后,應(yīng)用程序?qū)⒖梢詫⒆x請求發(fā)送到任何一個(gè)從服務(wù)器,而不會(huì)對主服務(wù)器造成額外的負(fù)擔(dān)。