檢查從服務(wù)器一般使用show slave status命令來(lái)檢查
在上面這些信息中我們主要關(guān)注的是Slave_IO_Running和Slave_SQL_Running
Slave_IO_Running:從服務(wù)器正從主服務(wù)器上讀取BINLOG日志,并寫入從服務(wù)器的中繼日志
Slave_SQL_Running:進(jìn)程正在讀取從服務(wù)器的BINLOG中繼日志,并轉(zhuǎn)化為SQL執(zhí)行
以前有一個(gè)進(jìn)程是no狀態(tài),表示復(fù)制的進(jìn)程停止,在Last_Errno會(huì)看到是什么情況
有時(shí)候因?yàn)橹鞣?wù)器的更新過(guò)于頻繁,造成了從服務(wù)器更新速度較慢,當(dāng)然問題是多種多樣,有可能是網(wǎng)絡(luò)搭建的結(jié)構(gòu)不好或者硬件的性能較差,從而使得主從服務(wù)器之間的差距越來(lái)越大,最終對(duì)某些應(yīng)用產(chǎn)生了影響,在這種情況下,我們需要定期進(jìn)行主從服務(wù)器的數(shù)據(jù)同步,具體步驟如下
在主服務(wù)器上
記錄出日志的名字和偏移量,這些是從服務(wù)器復(fù)制的目的目標(biāo)
在從服務(wù)器上,使用MASTER_POS_WAIT()函數(shù)得到復(fù)制坐標(biāo)值
在某些情況下,會(huì)出現(xiàn)從服務(wù)器更新失敗,首先需要確定是否從服務(wù)器的表與主服務(wù)器的不同造成的,如果是表結(jié)構(gòu)造成的,則需要修改從服務(wù)器的表和主服務(wù)器一致,然后重新運(yùn)行start slave
如果不是表結(jié)構(gòu)不同造成的更新失敗,則需要確認(rèn)手動(dòng)更新是否安全,然后忽視來(lái)自主服務(wù)器的更新失敗語(yǔ)句,跳過(guò)來(lái)來(lái)自主服務(wù)器的語(yǔ)句,命令為SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n,其中,n=1表示來(lái)自主服務(wù)器的更新語(yǔ)句不使用AUTO_INCREMENT或LAST_INSERT_ID(),n=2時(shí)則反之,原因是使用AUTO_INCREMENT或LAST_INSERT_ID的語(yǔ)句需要從二進(jìn)制日志中取得兩個(gè)事件.
----------------------------------------
by 陳于喆
Mail: chenyz@corp.netease.com
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: root
Master_Port: 3306
Connect_Retry: 3
Master_Log_File: mysql-bin.003
Read_Master_Log_Pos: 79
Relay_Log_File: mysql -relay-bin. 003
Relay_Log_Pos: 548
Relay_Master_Log_File: mysql -bin. 003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Last_Errno: 0
…..
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: root
Master_Port: 3306
Connect_Retry: 3
Master_Log_File: mysql-bin.003
Read_Master_Log_Pos: 79
Relay_Log_File: mysql -relay-bin. 003
Relay_Log_Pos: 548
Relay_Master_Log_File: mysql -bin. 003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Last_Errno: 0
…..
在上面這些信息中我們主要關(guān)注的是Slave_IO_Running和Slave_SQL_Running
Slave_IO_Running:從服務(wù)器正從主服務(wù)器上讀取BINLOG日志,并寫入從服務(wù)器的中繼日志
Slave_SQL_Running:進(jìn)程正在讀取從服務(wù)器的BINLOG中繼日志,并轉(zhuǎn)化為SQL執(zhí)行
以前有一個(gè)進(jìn)程是no狀態(tài),表示復(fù)制的進(jìn)程停止,在Last_Errno會(huì)看到是什么情況
有時(shí)候因?yàn)橹鞣?wù)器的更新過(guò)于頻繁,造成了從服務(wù)器更新速度較慢,當(dāng)然問題是多種多樣,有可能是網(wǎng)絡(luò)搭建的結(jié)構(gòu)不好或者硬件的性能較差,從而使得主從服務(wù)器之間的差距越來(lái)越大,最終對(duì)某些應(yīng)用產(chǎn)生了影響,在這種情況下,我們需要定期進(jìn)行主從服務(wù)器的數(shù)據(jù)同步,具體步驟如下
在主服務(wù)器上
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.03 sec)
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 102
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.03 sec)
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 102
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
記錄出日志的名字和偏移量,這些是從服務(wù)器復(fù)制的目的目標(biāo)
在從服務(wù)器上,使用MASTER_POS_WAIT()函數(shù)得到復(fù)制坐標(biāo)值
mysql> select master_pos_wait('mysql-bin.000004','102');
+-------------------------------------------+
| master_pos_wait('mysql-bin.000004','102') |
+-------------------------------------------+
| 0 |
+-------------------------------------------+
1 row in set (0.00 sec)
這個(gè)select 語(yǔ)句會(huì)阻塞直到從服務(wù)器達(dá)到指定日志文件和偏移量后,返回0,如果是-1,則表示超時(shí)推出,查詢是0時(shí),表示從服務(wù)器與主服務(wù)器已經(jīng)同步+-------------------------------------------+
| master_pos_wait('mysql-bin.000004','102') |
+-------------------------------------------+
| 0 |
+-------------------------------------------+
1 row in set (0.00 sec)
在某些情況下,會(huì)出現(xiàn)從服務(wù)器更新失敗,首先需要確定是否從服務(wù)器的表與主服務(wù)器的不同造成的,如果是表結(jié)構(gòu)造成的,則需要修改從服務(wù)器的表和主服務(wù)器一致,然后重新運(yùn)行start slave
如果不是表結(jié)構(gòu)不同造成的更新失敗,則需要確認(rèn)手動(dòng)更新是否安全,然后忽視來(lái)自主服務(wù)器的更新失敗語(yǔ)句,跳過(guò)來(lái)來(lái)自主服務(wù)器的語(yǔ)句,命令為SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n,其中,n=1表示來(lái)自主服務(wù)器的更新語(yǔ)句不使用AUTO_INCREMENT或LAST_INSERT_ID(),n=2時(shí)則反之,原因是使用AUTO_INCREMENT或LAST_INSERT_ID的語(yǔ)句需要從二進(jìn)制日志中取得兩個(gè)事件.
----------------------------------------
by 陳于喆
Mail: chenyz@corp.netease.com