1. 程式人生 > >mysql主從同步不一致後的解決方法

mysql主從同步不一致後的解決方法

檢視master的執行情況:

[[email protected]] mysql -uroot -p************
[[email protected]] mysql> show master status \G;
    *************************** 1. row ***************************
             File: mysql-bin.000014     //這個資訊點要記住,下面用
         Position: 170017372            //這個資訊點要記住,下面用
         Binlog_Do_DB: ipharmacare_admin
     Binlog_Ignore_DB: mysql,information_schema,performance_schema
    Executed_Gtid_Set: 
    1 row in set (0.00 sec)

檢視slave的執行情況:

[[email protected]] mysql -uroot -p************
[[email protected]] mysql> show slave status \G;
    *************************** 1. row ***************************
               Slave_IO_State: 
              Master_Host: master.mysql.ipharmacare.org
              Master_User: slave
              Master_Port: 3306
            Connect_Retry: 60
              Master_Log_File: mysql-bin.000013
          Read_Master_Log_Pos: 1003623481
               Relay_Log_File: mysql-bin.000022
            Relay_Log_Pos: 36726417
        Relay_Master_Log_File: mysql-bin.000013
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: ipharmacare_admin
          Replicate_Ignore_DB: mysql,information_schema,performance_schema
           Replicate_Do_Table: 
           Replicate_Ignore_Table: ipharmacare_admin.tb_hospital,ipharmacare_admin.t_customer,ipharmacare_admin.t_license,ipharmacare_admin.tb_hospital_zone_license,ipharmacare_admin.tb_hospital_license
          Replicate_Wild_Do_Table: ipharmacare_admin.%
      Replicate_Wild_Ignore_Table: 
               Last_Errno: 0
               Last_Error: 
             Skip_Counter: 0
          Exec_Master_Log_Pos: 1003623481
              Relay_Log_Space: 1003624042
              Until_Condition: None
               Until_Log_File: 
            Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
    Master_SSL_Verify_Server_Cert: No
            Last_IO_Errno: 0
            Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
              Master_UUID: a8ddc479-8862-11e2-b6df-2761731e3dd6
             Master_Info_File: /mnt/mysql/master.info
                SQL_Delay: 0
          SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: 
           Master_Retry_Count: 86400
              Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
            Auto_Position: 0
         Replicate_Rewrite_DB: 
             Channel_Name: 
           Master_TLS_Version: 
    1 row in set (0.00 sec)

結論:由上可知資料同步延遲很多,且希望重新做主從,使得主從在資料上保持完全同步.

先進入主庫,進行鎖表,防止資料寫入

[[email protected]] mysql> flush tables with read lock;

進行master資料備份

[[email protected]] cd /mnt/mysql/bakdata
[[email protected]] mkdir baksql
[[email protected]] cd baksql
[[email protected]] mysqldump ipharmacare_admin -uroot -p****** --opt> ipharmacare_admin.sql
或者:
mysqldump -uroot -p***** --default-character-set=utf8 ipharmacare_admin  > ipharmacare_admin.sql

打包資料(可選)

[[email protected]] 7za a ipharmacare_admin_20160505.7z ipharmacare_admin.sql

把mysql備份檔案傳到從庫機器,進行資料恢復

[[email protected]] cd /usr/downloads/
[[email protected]] scp [email protected]:/mnt/mysql/bakdata/ipharmacare_admin_20160505.7z ./
[[email protected]] 7az x ipharmacare_admin_20160505.7z 
[[email protected]] mysql -uroot -p*****;
[[email protected]] mysql> drop database ipharmacare_admin;
[[email protected]] mysql> CREATE DATABASE ipharmacare_admin DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
[[email protected]] msyql> source baksql.sql;

更新/設定同步進度點

 [[email protected]] change master to master_host='master.mysql.ipharmacare.org', master_user='slave', master_port=3306, master_password='************', master_log_file='mysql-bin.000014', master_log_pos=170017372;

注意:

1) 做了MySQL主從複製以後,使用mysqldump對資料備份時,一定要注意按照如下方式:
  [[email protected]] mysqldump –master-data –single-transaction –user=username –password=password dbname> dumpfilename
這樣就可以保留file和position的資訊,在新搭建一個slave的時候,還原完資料庫,file和position的資訊也隨之更新,接著再start slave 就可以很迅速的完成增量同步。
2) 忘記主從複製時,對從庫使用者密碼時,可以這樣去重置:
  [[email protected]] GRANT REPLICATION SLAVE ON *.* TO 'slave'@'slave.mysql.ipharmacare.org' IDENTIFIED BY 'slave';