Mysql恢復數據報ERROR 1308 : LEAVE with no matching label

趕緊看備份日志,日志如下:

———————————-

===BEG:20151108 01:00:01=====

===FTP:20151108 01:00:05=====

===CLS:20151108 01:00:07=====

===OPT:20151108 01:00:08=====

===END:20151108 01:00:08=====

———————————-

 

日志並沒有什麼異常,既然說有問題,那就恢復一下吧

為瞭加快恢復的速度,先設置參數:

mysql>

SET  sql_log_bin = 0

SET  autocommit=0;

SET  net_buffer_length=10485760;

SET  innodb_flush_log_at_trx_commit=0;

SET  sync_binlog=0

 

mysql> source 備份文件

 

發現果然報錯瞭:

 

ERROR 1308 (42000) at line 2428811: LEAVE with no matching label: loo

查看備份文件的242881行,發現這一行是創建存儲過程的語句,而且這個存儲過程沒有備份完整,這就是恢復出錯的原因

 

為什麼備份的時候存儲過程沒有備份完整呢?這個問題再研究,先解決問題吧,把備份數據和備份存儲過程分開

 

/usr/local/mysql/bin/mysqldump -uroot -pxxxx   –default-character-set=utf8 -n -d -t -R  –databases  xxxx  >R.sql

 

參數說明如下:

-n:   –no-create-db

-d:   –no-data

-t:   –no-create-info

-R:   –routines      Dump stored routines (functions and procedures)

 

恢復備份的存儲過程和函數

 

mysql < R.sql

 

補充:為瞭查找為什麼mysqldump備份的時候存儲過程會沒有備份完整,我查看瞭其他幾天的備份文件,存儲過程都是備份完整的,隻有一種解釋,我同事給我的那份備份文件被損壞瞭。。。

You May Also Like