首頁 >資料庫 >mysql教程 >mysql主从同步不一致后的解决方法

mysql主从同步不一致后的解决方法

WBOY
WBOY原創
2016-06-07 14:50:301247瀏覽

查看master的运行情况: [root@master] mysql -uroot -p************[root@master] mysql show master status \G; *************************** 1. row *************************** File: mysql-bin.000014 //这个信息点要记住,下面用 Position: 170017372

查看master的运行情况:

[root@master] mysql -uroot -p************
[root@master] 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的运行情况:

[root@slave] mysql -uroot -p************
[root@slave] 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)

结论:由上可知数据同步延迟很多,且希望重新做主从,使得主从在数据上保持完全同步.

先进入主库,进行锁表,防止数据写入

[root@master] mysql> flush tables with read lock;

进行master数据备份

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

打包数据(可选)

[root@master] 7za a ipharmacare_admin_20160505.7z ipharmacare_admin.sql

把mysql备份文件传到从库机器,进行数据恢复

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

更新/设置同步进度点

 [root@slave] 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对数据备份时,一定要注意按照如下方式:
  [root@master] mysqldump –master-data –single-transaction –user=username –password=password dbname> dumpfilename
这样就可以保留file和position的信息,在新搭建一个slave的时候,还原完数据库,file和position的信息也随之更新,接着再start slave 就可以很迅速的完成增量同步。
2) 忘记主从复制时,对从库用户密码时,可以这样去重置:
  [root@master] GRANT REPLICATION SLAVE ON *.* TO 'slave'@'slave.mysql.ipharmacare.org' IDENTIFIED BY 'slave';
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn