ITPub博客

首页 > Linux操作系统 > Linux操作系统 > MySQL数据库mysqldump命令备份异常的一个案例

MySQL数据库mysqldump命令备份异常的一个案例

原创 Linux操作系统 作者:junsansi 时间:2012-03-19 16:19:06 0 删除 编辑
MySQL中的命令行mysqldump做为常用的数据备份工具,虽说性能稍差,但优在易于调用,从长期应用的情况来看其表现也相当稳定,并且老实讲MySQL数据库下逻辑备份确实没有太多选择,因此mysqldump应用极为广泛,三思本人也是经常使用这个命令倒腾数据,整体感觉是个挺美好的东西,不过上周遭遇一次案例,认识到我对mysqldump的认识还有不足,记录下来,供有心的朋友参考。

事情是介个样子的,mysqldump命令常规方式创建备份拉到某机器上恢复,恢复执行很成功,一条错误信息都没看着,但等恢复完登录到数据库中一瞅,你猜怎么地,数据不全~~

第一反应当然是查看备份文件,经过检查,果然,恢复操作确实没有问题,因为备份集中的内容就不全,那么,为什么备份集内容不全呢~~

幸好原有执行场景均有记录,分析发现,原来是在导出某个视图对象时报错,mysqldump自动中止,因此所有该对象之后的就都没备份了~

这种情况模拟重现很简单,操作如下:
mysql> create table j1 (id int,vl varchar(100));
mysql> create view j1_view as select * from j1;
mysql> rename table j1 to j2;
# mysqldump --tables j1 j1_view > bak.sql
mysqldump: Got error: 1356: View 'test.j1_v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them when doing LOCK TABLES

创建备份时,view对象引用的表对象不存在,执行LOCK TABLES失败,于是mysqldump就中止了,这其实真不怪mysqldump,因为mysqldump执行过程中遇到任何问题,默认情况下都是直接退出。

那么怎么处理这种情况呢,两种思路:
1、修正无效的视图,这点可以通过information_schema.views.IS_UPDATABLE列来判断,当IS_UPDATABLE列值为NO时,说明该视图状态异常,需要处理了;
2、执行mysqldump时附加--force参数,该参数功能是当遇到错误时忽略,继续执行后面的操作;
这个参数提供类似ORACLE数据库中exp命令的ignore=y参数的功能,事实上在ORACLE数据库中执行exp时通常都会指定ignore,对应到MySQL数据库,我想在执行mysqldump命令行过程中,--force参数也应做为必备参数调用。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7607759/viewspace-719039/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-21

  • 博文量
    640
  • 访问量
    4100553