1. 程式人生 > >mysql主從複製的Slave_IO_Running No的處理方法

mysql主從複製的Slave_IO_Running No的處理方法

master: 192.168.0.4     mysql-5.5.3-m3
    slave:  192.168.0.2     mysql-5.5.20

    先回答上一篇提出的問題:有一部分是myisam型別的表, 有一部分是innodb型別的表, 該如何對master做“快照”呢? 
    其實答案有很多: 
        a) 先鎖表, 記錄binlog檔案和位置資訊。 然後用mysqldump --single-transaction和--master-data=1 這兩個選項, 把所有要同步的庫dump出來就OK 
        b) 先鎖表, 記錄binlog檔案和位置資訊。 然後用用系統命令拷貝好資料目錄, 另外對於innodb表, 使用mysqldump --single-transaction把這些innodb表單獨dump出來就OK , 到slave上也要做相應的兩步操作, 詳細如下:

    這裡假設master/slave上的配置檔案以及相關的授權都已經OK。 
    STEP 1. 登入master伺服器, 開啟兩個虛擬終端, 一個在系統命令列用來操作拷貝, 一個用來進入mysql命令列進行鎖表操作
        mysql命令列: mysql> FLUSH TABLES WITH READ LOCK;   # 鎖表
        mysql命令列: mysql> show master status;            # 檢視當前binlog檔名及binlog的位置資訊, 並記錄下來。 比如 binlog.000049 |  3560393
        系統命令列:  # cd master的資料檔案目錄
        系統命令列:  # tar cf /www/master.tar.gz db1 db2   # 把資料檔案打包到/www/master.tar.gz檔案, 這裡為了速度, 並沒有執行壓縮。  在打包的過程中, 在mysql命令列執行show master status; 會發現打印出來的資訊一直沒改變。
        系統命令列:  # mysqldump -uroot --single-transaction --flush-logs --hex-blob db1 t1 t2 t3 > /www/innodb1.sql   # 這裡執行完後, 使用show master status;  會發現新生成了一個新的binlog, 至於為什麼, 我也不知道, 問部門的DBA同事 , 說沒關係

        
        待上面幾步都OK , 再在mysql命令執行解鎖操作:
        mysql命令列: mysql> UNLOCK TABLES;                 # 解鎖

        在master伺服器上的最後操作就是把剛剛打包好的/www/master.tar.gz 及/www/innodb1.sql檔案傳送到slave伺服器上。

    STEP 2. 登入到slave伺服器
        系統命令列: # mysqladmin shutdown      # 先把mysql停掉
        系統命令列: # tar xf master.tar.gz -C mysql的資料目錄      # 把master上的資料檔案解壓到slave上的資料目錄
        系統命令列: # mysqld_safe &            # 啟動mysql
        mysql命令列:mysql> slave stop;         # 停掉同步
        系統命令列: # mysql -uroot db1 < ./innodb1.sql
        mysql命令列:mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.4', MASTER_PORT=3306, MASTER_USER='slave',

MASTER_PASSWORD='[email protected]',master_log_file='binlog.000049',master_log_pos=3560393;
        mysql命令列:mysql> slave start;        # 開啟同步
        mysql命令列:mysql> show slave status\G
    發現各項資訊都比較正常

    
    不過過了一段, 又出現錯誤資訊:
        Last_Errno: 1690
        Last_Error: Error 'BIGINT values is out of range in....'

20788470_1335109902UZtE.jpg
    
    最後在網上搜了下, 發現原來是因為slave的版本跟master的版本不一直導致, 把slave的版本更換成master一致的版本就OK 。