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備份的時候存儲過程會沒有備份完整,我查看了其他幾天的備份文件,存儲過程都是備份完整的,只有一種解釋,我同事給我的那份備份文件被損壞了。。。