mysqldump add-drop-database导致恢复失败原因和处理

1、问题

通常用mysqldump+source做数据备份和恢复。如果想要完全恢复备份时的状态,要删掉新表,一般思路就是让mysqldump生成drop database + create database.

bin/mysqldump -Srun/mysql.sock -uroot --all-databases --add-drop-database &>data.sql

但在将生成的data.sql执行source作恢复操作时,会发现报错。

"ERROR 1580 .... You cannot 'DROP' a log table if logging is enabled"

2、原因

在正常执行的服务中,我们会打开慢查询日志。在log_slow_queries 为 on时,mysql.slow_log这个表不允许删除,因此,当source命令执行到drop database if exists mysql 时,就报上面的这个错。

同样的问题会出现在mysql.general_log这个表。只是平时服务中一般不会query_log。

3、影响

由于source是按行执行的,执行到这个语句报错并不影响已经完成的恢复动作。就是说如果有个库叫’ab’,则执行出错前已经恢复,出错后并不回滚。可能导致数据不一致。

而且dump+source作为标准操作,上述的这个现象看上去比较bug.

4、处理

一种处理方法是在dump出来的文件中,将drop database if exists mysql这句话删除掉。

这麻烦一些,还需要人工或这脚本。也可以简单修改mysqldump.c。策略上对于mysql这个库,不要生成drop database语句。简单如下:

4105c4105
<       if (opt_drop_database)
---
>       if (opt_drop_database && my_strcasecmp(qdatabase, quote_name("mysql", qbuf,
opt_quoted))!=0)
4115c4115
<       if (opt_drop_database)
---
>       if (opt_drop_database && my_strcasecmp(qdatabase, quote_name("mysql", qbuf,
opt_quoted))!=0)

5、注意

有的同学会提出在source的时候先把slow_log关掉,这样执行drop mysql这个库的时候就能通过。

需要注意一点是这样source完成后slow_log和general_log这两个表就没了,当你再执行 set global slow_query_log=1; 时,就会提示slow_log不存在而无法完成。

因此使用这种方法需要备份这两个表,source完成后再拷回mysql目录。

时间: 2024-10-30 23:20:15

mysqldump add-drop-database导致恢复失败原因和处理的相关文章

解决Win8.1系统安装程序时提示“内部错误2203 ”导致安装失败问题

如果是做服务器的朋友可能看到此问题就会想到权限了,但普通用户不可能想到权限问题了,但其实就是权限导致的. 故障分析: 只要把Win8.1系统SYSTEM用户的权限改成完全控制,就能够避免安装程序时的2203错误了. 解决方法: 1.计算机-组织-文件夹和搜索选项-查看-将"隐藏受保护的系统操作文件"前的复选框去掉并将"显示文件.文件夹和驱动器"前的复选框选上-确定; 2.C-用户-xxx(用户名)-AppData-Local-Temp-右键-属性-安全-添加-选择用

qq邮箱-mutt + msmtp ,126邮箱发送成功,QQ邮箱发送失败,请问什么原因导致的失败?感谢

问题描述 mutt + msmtp ,126邮箱发送成功,QQ邮箱发送失败,请问什么原因导致的失败?感谢 我弄了一晚上都没弄好,关于认证.加密.端口什么的都试过无数次了 goolge到一篇帖子,通过抓包发现本应该被识别的部分数据被忽视了,导致步骤错位 (原贴:http://sjcatsoft.cnblogs.com/archive/2009/06/06/1497772.html) 请更明白其中原因的大神,能够精确指点一下 (我猜想sendmail或者postfix会不会存在类似的问题) 感谢~

Mysql/MariaDB启动时处于进度条状态导致启动失败的原因及解决办法_mariadb

今天打开网站突然发现网站无法打开,后来通过SSH登陆服务器发现MARIADB数据库没有启动成功,再次启动还是无法成功启动,一直处于启动进度条,进度条结束后提示ERROR.查看日志出现以下错误: InnoDB: Unable to lock ./ibdata1, error: 11 后经调试发现是因为MariaDB数据库所在分区已经满了,造成无法启动. 只有将MariaDB数据库存放数据目录移动到另外一个磁盘份额比较大的分区或者将当前分配删除一些不必要的文件. 移动办法: 1.停掉mysql服务器

[20111227]Alter database datafile offline drop后的恢复.txt

1.准备测试: CREATE TABLESPACE tools DATAFILE   '/u01/app/oracle11g/oradata/test/tools01.dbf' SIZE 64M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED LOGGING PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;

[MySQL 版本差异] 丢失frm文件之后drop database的不同结果分析

背景  今天在讨论frm丢失后drop database失败的问题.简单复现如下.假设test库中有两个表t1, t2,执行如下脚本: bin/mysql -uroot –socket=run/mysql.sock   -e " drop database if exists test2; create database test2; use test2; create table t1 like test.t1; create table t2 like test.t2; " rm

在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)

error|server|程序 错误:"在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) ",       上述错误我遇到两种情况,一种是在打开打开SQL Server 2005时弹出的,另一种是在应用程序连接SQL Server 2005时出现的.归纳了一下,由以下几个原因: 1.数据库引擎没有启动.  

mysql字符集导致恢复数据库报错问题解决办法

恢复数据库报错:由于字符集问题,最原始的数据库默认编码是latin1,新备份的数据库的编码是utf8,因此导致恢复错误. [root@hk byrd]# /usr/local/mysql/bin/mysql -uroot -p'admin' t4x < /tmp/11x-B-2014-06-18.sql ERROR 1064 (42000) at line 292: You have an error in your SQL syntax; check the manual that corre

织梦网站搬家失败原因分析与处理方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 织梦网站搬家失败原因分析与处理方法 网站建设运营过程中,不可避免会遇到网站空间更换的问题.网站搬家过程中,可能会出现形形色色的问题,导致网站搬家失败.本文对织梦网站搬家失败原因进行详细分析,解决站长朋友们网站搬家失败的苦恼. 现象一:新网站信息与原网站数据库信息不符,网站数据不完整. 原因分析:数据库备份过程有瑕疵. 解决方法:使用织梦系统备

在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败,寻解决方法

问题描述 在建立与服务器的连接时出错.在连接到SQLServer2005时,在默认的设置下SQLServer不允许进行远程连接可能会导致此失败.(provider:命名管道提供程序,error:40-无法打开到SQLServer的连接)说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.Data.SqlClient.SqlException:在建立与服务器的连接时出错.在连接到SQLServer200