于吉吉的技術(shù)博客

          建造高性能門戶網(wǎng)

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            65 隨筆 :: 6 文章 :: 149 評論 :: 0 Trackbacks
          檢查從服務(wù)器一般使用show slave status命令來檢查

          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
          …..

          在上面這些信息中我們主要關(guān)注的是Slave_IO_Running和Slave_SQL_Running
          Slave_IO_Running:從服務(wù)器正從主服務(wù)器上讀取BINLOG日志,并寫入從服務(wù)器的中繼日志
          Slave_SQL_Running:進程正在讀取從服務(wù)器的BINLOG中繼日志,并轉(zhuǎn)化為SQL執(zhí)行
          以前有一個進程是no狀態(tài),表示復(fù)制的進程停止,在Last_Errno會看到是什么情況

          有時候因為主服務(wù)器的更新過于頻繁,造成了從服務(wù)器更新速度較慢,當(dāng)然問題是多種多樣,有可能是網(wǎng)絡(luò)搭建的結(jié)構(gòu)不好或者硬件的性能較差,從而使得主從服務(wù)器之間的差距越來越大,最終對某些應(yīng)用產(chǎ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)

          記錄出日志的名字和偏移量,這些是從服務(wù)器復(fù)制的目的目標

          在從服務(wù)器上,使用MASTER_POS_WAIT()函數(shù)得到復(fù)制坐標值

          mysql> select master_pos_wait('mysql-bin.000004','102');
          +-------------------------------------------+
          | master_pos_wait('mysql-bin.000004','102'|
          +-------------------------------------------+
          |                                      0                         |
          +-------------------------------------------+
          1 row in set (0.00 sec)
          這個select 語句會阻塞直到從服務(wù)器達到指定日志文件和偏移量后,返回0,如果是-1,則表示超時推出,查詢是0時,表示從服務(wù)器與主服務(wù)器已經(jīng)同步

          在某些情況下,會出現(xiàn)從服務(wù)器更新失敗,首先需要確定是否從服務(wù)器的表與主服務(wù)器的不同造成的,如果是表結(jié)構(gòu)造成的,則需要修改從服務(wù)器的表和主服務(wù)器一致,然后重新運行start slave
          如果不是表結(jié)構(gòu)不同造成的更新失敗,則需要確認手動更新是否安全,然后忽視來自主服務(wù)器的更新失敗語句,跳過來來自主服務(wù)器的語句,命令為SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n,其中,n=1表示來自主服務(wù)器的更新語句不使用AUTO_INCREMENT或LAST_INSERT_ID(),n=2時則反之,原因是使用AUTO_INCREMENT或LAST_INSERT_ID的語句需要從二進制日志中取得兩個事件.
          ----------------------------------------

          by 陳于喆
          Mail: chenyz@corp.netease.com



          posted on 2010-08-23 21:35 陳于喆 閱讀(4086) 評論(0)  編輯  收藏 所屬分類: mysql
          主站蜘蛛池模板: 莎车县| 大竹县| 桦川县| 武清区| 颍上县| 介休市| 饶河县| 上虞市| 松阳县| 波密县| 湄潭县| 乌兰县| 崇左市| 贵定县| 常宁市| 龙岩市| 乌海市| 澄城县| 樟树市| 上栗县| 镇坪县| 郯城县| 云安县| 武川县| 静安区| 虞城县| 龙山县| 壶关县| 林州市| 邳州市| 普兰县| 广饶县| 白银市| 南昌县| 巴楚县| 扎兰屯市| 新津县| 敦煌市| 观塘区| 五台县| 阿拉善右旗|