MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在許多企業(yè)中被廣泛使用。在很多情況下,數(shù)據(jù)庫管理員需要將數(shù)據(jù)同步在不同的MySQL實(shí)例之間。為了實(shí)現(xiàn)跨數(shù)據(jù)庫同步表,我們可以使用MySQL自帶的復(fù)制機(jī)制。
MySQL復(fù)制就是將一個(gè)數(shù)據(jù)庫的變更同步到其他數(shù)據(jù)庫的過程。可以將復(fù)制機(jī)制劃分為主從架構(gòu),其中一個(gè)MySQL實(shí)例充當(dāng)主實(shí)例,負(fù)責(zé)處理更新操作,而其他實(shí)例充當(dāng)從實(shí)例,只負(fù)責(zé)接收更新操作并同步主實(shí)例的數(shù)據(jù)。
下面我們將介紹如何使用MySQL復(fù)制機(jī)制在兩個(gè)不同的數(shù)據(jù)庫之間同步表。
mysql>CREATE DATABASE test1; mysql>USE test1; mysql>CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY); mysql>INSERT INTO t1 VALUES (1), (2), (3); mysql>CREATE DATABASE test2; mysql>USE test2; mysql>CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY); mysql>INSERT INTO t1 VALUES (4), (5), (6);
上面的代碼僅僅是在兩個(gè)不同的數(shù)據(jù)庫中創(chuàng)建了名為“t1”的表,并向各自的表中插入了三條數(shù)據(jù)。
CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;
上面的代碼是用來開啟跨數(shù)據(jù)庫的數(shù)據(jù)同步。這里的"master_host_name"是主實(shí)例的主機(jī)名,"replication_user_name"和"replication_password"是用于身份驗(yàn)證的用戶名和密碼。"recorded_log_file_name"和"recorded_log_position"是用于記錄從實(shí)例上次讀取的主實(shí)例二進(jìn)制日志位置的文件名和偏移量。
使用如下命令可以在從實(shí)例創(chuàng)建出主實(shí)例的副本:
mysql>START SLAVE;
一旦從實(shí)例啟動(dòng),復(fù)制進(jìn)程就開始工作了。從實(shí)例將不斷地監(jiān)視主實(shí)例并讀取未讀取的二進(jìn)制日志事件。一旦有事件出現(xiàn),從實(shí)例就會(huì)將其應(yīng)用到自己的數(shù)據(jù)庫中。
上述步驟完成后,兩個(gè)數(shù)據(jù)庫之間的表就能夠?qū)崿F(xiàn)跨數(shù)據(jù)庫的同步了。