Linux數(shù)據(jù)庫:MySQL主從同步設(shè)置和同步錯誤處理
1、兩臺服務(wù)器數(shù)據(jù)庫版本應(yīng)一致,如果不一致,從服務(wù)器的版本要高于主服務(wù)器的版本。
2、MySQL進(jìn)行實時數(shù)據(jù)同步,本質(zhì)上是將mysql動作同步到Slave服務(wù)器,而不是對實質(zhì)的數(shù)據(jù)進(jìn)行同步。所以同步開始前,兩端的數(shù)據(jù)要保持一致。
Master服務(wù)器:192.168.0.1
Slave服務(wù)器:192.168.0.2
=== Master停止運行時,Mysql同步配置===
一、主服務(wù)器設(shè)置:
1、修改/etc/f
在[mysqld]區(qū)段內(nèi)加入?yún)?shù)
server-id=1
log-bin
sql-bin-update-same
2、為Slave服務(wù)器創(chuàng)建連接賬戶,用于同步
mysql>GRANT FILE ON *.* TO backup@192.168.1.2 IDENTIFIED BY ‘1234’;
3、重啟mysql服務(wù):service mysqld restart
此時因為有加入log-bin參數(shù),因此開始有index產(chǎn)生了,在/var/lib/mysql目錄下有.index檔案紀(jì)錄數(shù)據(jù)庫的異動log. 二、Slave服務(wù)器設(shè)置:
1、修改/etc/f
在[mysqld]區(qū)段加入
master-host=192.168.0.1
master-user=backup
master-password=1234
master-port=3306
server-id=2
master-connect-retry=60 預(yù)設(shè)重試間隔60秒
replicate-do-db=vbb 告訴slave只做vbb數(shù)據(jù)庫的更新
replicate-ignore-db=mysql #不同步的數(shù)據(jù)庫
replicate-ignore-table=ers #不同步vbb數(shù)據(jù)庫的users表
log-slave-updates=1
2、重啟Slave服務(wù)器mysql服務(wù)
三、Slave服務(wù)器從主服務(wù)器讀取數(shù)據(jù),并開啟同步
1、mysql>FLUSH TABLES WITH READ LOCK; #首先執(zhí)行這個,對主服務(wù)器加鎖
2、mysql>LOAD DATA FROM MASTER #語句的話,必須授予全局的 FILE 和 SELECT 權(quán)限,僅針對MyISAM引擎,對InnoDB表無用。
3、如果數(shù)據(jù)是InnoDB的,需要在服務(wù)器上將表結(jié)構(gòu)和數(shù)據(jù)分開導(dǎo)出,然后拷貝至Slave服務(wù)器。
導(dǎo)出整個數(shù)據(jù)庫結(jié)構(gòu)和數(shù)據(jù):mysqldump -u用戶名 -p密碼 -h主機(jī) database > filename.sql
導(dǎo)出某個表的數(shù)據(jù)和結(jié)構(gòu):mysqldump -u用戶名 -p密碼 -h主機(jī) database table > filename.sql
只導(dǎo)出數(shù)據(jù)庫中表的數(shù)據(jù):mysqldump -u用戶名 -p密碼 -h主機(jī) -T database table > filename.sql
只導(dǎo)出數(shù)據(jù)庫中表的結(jié)構(gòu):mysqldump -u用戶名 -p密碼 -h主機(jī) -d database table > filename.sql 4、確保兩端數(shù)據(jù)一致后,開啟同步
mysql>slave start;
5、查看Slave服務(wù)器同步信息
mysql>show slave statusG;
可以看到,Slave_IO_Running 和 Slave_SQL_Running 兩列的值都為 "Yes",這表明 Slave 的 I/O 和 SQL 線程都在正常運行。
6、對Master服務(wù)器釋放鎖
mysql>UNLOCK TABLES;
=== Master還在運行中,如何在不停止它的情況下配置Slave ===
注:主從服務(wù)器的配置同上。
1、首先在Master服務(wù)器查看同步日志信息
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000054 | 680 | | mysql |
+------------------+----------+--------------+------------------+
可以看到日志文件是:mysql-bin.000054,同步點是680
2、在Slave服務(wù)器配置同步
mysql>slave stop; # mysql默認(rèn)同步開始
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='backup',MASTER_PASSWORD='1234',MASTER_LOG_FILE='mysql-bin.000054',MASTER_LOG_POS=690; #配置同步點
mysql>slave start; #開啟同步
3、查看同步信息
mysql>show slave statusG;
可以看到,Slave_IO_Running 和 Slave_SQL_Running 兩列的值都為 "Yes",這表明 Slave 的 I/O 和 SQL 線程都在正常運行。
4、配置完成
MYSQL服務(wù)器復(fù)制配置
這是根據(jù)我之前看的MYSQL復(fù)制的文檔然后自己親自實驗的過程.配置的功能比較簡單.
環(huán)境:
主服務(wù)器:
redhat9
mysql 5.0.16 機(jī)器名:dbmaster
IP:192.168.0.111
從服務(wù)器:
redhat9
mysql5.0.16
機(jī)器名:dbslave
IP:192.168.0.100
配置過程:
整個過程與MYSQL文檔中的復(fù)制設(shè)置步驟一一對應(yīng),只是具體化和標(biāo)明了一些要注意的地方..如果有興趣的朋友可以對照閱讀,會更加理解.
1.確認(rèn)兩臺服務(wù)器的MYSQL版本,用mysql –V命令查看
注意: MySQL不同版本之間的(二進(jìn)制日志)binlog格式可能會不一樣,所以最好采用相同的版本.如果達(dá)不到要求,必須要保證Master的版本不能高于Slave版本
2.在主服務(wù)器上為服務(wù)器設(shè)置一個連接賬戶。該賬戶必須授予REPLICATION SLAVE權(quán)限。我為了簡單沒做這一步,直接用root賬戶.
正常的步驟是:
假定你的域為,想要創(chuàng)建用戶名為repl的一個賬戶,從服務(wù)器可以使用該賬戶從你的域內(nèi)的任何主機(jī)使用密碼slavepass來訪問主服務(wù)器。要創(chuàng)建該 賬戶,可使用GRANT語句:
mysql> GRANT REPLICATION SLAVE ON *.*
->TO 'repl'@'%.' IDENTIFIED BY 'slavepass';
如果想要在Slave上有權(quán)限執(zhí)行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 語句的話,必須授予全局的 FILE 和 SELECT 權(quán)限:
mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO 'repl'@'%.' IDENTIFIED BY 'rep';
3.在主服務(wù)器上執(zhí)行FLUSH TABLES WITH READ LOCK語句來刷新表,同時阻止寫操作.:
mysql> FLUSH TABLES WITH READ LOCK;
然后對主服務(wù)器上的數(shù)據(jù)進(jìn)行快照。(此時不要退出mysql的提示符,退出的話就解鎖了.新開一個ssh窗口進(jìn)行下面所說的歸檔打包操作)