PHP MySQL復(fù)制,是指在不同的MySQL服務(wù)器之間進行數(shù)據(jù)同步的過程。通俗來講,就是將一個MySQL服務(wù)器上的數(shù)據(jù)復(fù)制到另一個MySQL服務(wù)器上,以達到備份、負載均衡、升級以及數(shù)據(jù)庫分片的目的。
假設(shè)現(xiàn)在我們有兩臺MySQL服務(wù)器,一臺是主服務(wù)器,一臺是從服務(wù)器,我們要將主服務(wù)器上的數(shù)據(jù)復(fù)制到從服務(wù)器上,實現(xiàn)負載均衡的效果。我們可以采用MySQL的復(fù)制功能,將主服務(wù)器上的數(shù)據(jù)自動復(fù)制到從服務(wù)器上。
//主服務(wù)器配置 # vi /etc/my.cnf log-bin=/var/lib/mysql-bin server-id=1 #從服務(wù)器配置 # vi /etc/my.cnf server-id=2 master-host=192.168.0.1 master-user=repl master-password=repl master-connect-retry=60
在主服務(wù)器上設(shè)置log-bin和server-id參數(shù),這兩個參數(shù)是MySQL復(fù)制必須的,前者用于開啟binlog日志,后者用于標(biāo)識當(dāng)前服務(wù)器的唯一標(biāo)識,這里我們將其設(shè)置為1。在從服務(wù)器上設(shè)置server-id參數(shù),以及連接主服務(wù)器的用戶名和密碼,這里我們將其分別設(shè)置為2、repl和repl。master-connect-retry參數(shù)用于設(shè)置從服務(wù)器連接主服務(wù)器超時時間,單位秒。
設(shè)置好參數(shù)后,在主服務(wù)器上創(chuàng)建一個專門用于復(fù)制的用戶。
# mysql -uroot -p mysql>grant replication slave on *.* to 'repl'@'192.168.0.2' identified by 'repl'; mysql>flush privileges;
然后在主服務(wù)器上選擇要復(fù)制的數(shù)據(jù)。
# mysql -uroot -p mysql>use test; mysql>create table t1(id int primary key); mysql>insert into t1 values(1),(2),(3);
接著在從服務(wù)器上啟動復(fù)制進程。
# mysql -uroot -p mysql>stop slave; mysql>change master to master_host='192.168.0.1', master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=0; mysql>start slave; mysql>show slave status;
使用change master命令設(shè)置主服務(wù)器的各項參數(shù),其中master_log_file和master_log_pos參數(shù)用于標(biāo)識當(dāng)前需要復(fù)制的binlog位置。設(shè)置完畢后,使用start slave命令啟動復(fù)制進程。
最后我們可以在主服務(wù)器上修改數(shù)據(jù),然后在從服務(wù)器上查看是否同步成功。
# mysql -uroot -p mysql>use test; mysql>insert into t1 values(4),(5),(6);
在從服務(wù)器上查看數(shù)據(jù)是否同步成功。
# mysql -uroot -p mysql>use test; mysql>select * from t1;
通過以上步驟,我們就可以成功的進行PHP MySQL復(fù)制了。實踐證明,MySQL復(fù)制功能不僅可以用于備份數(shù)據(jù),還可以用于構(gòu)建高可用、高性能的數(shù)據(jù)庫架構(gòu)。