`
丁林.tb
  • 浏览: 796998 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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_loggeneral_log这两个表就没了,当你再执行 set global slow_query_log=1; 时,就会提示slow_log不存在而无法完成。

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

3
0
分享到:
评论
2 楼 丁林.tb 2012-03-22  
nofreezou 写道
将mysql与其他数据库分开备份即可。

改源代码不如写个脚本直接删掉那行语句- -


你说的也是一种方法 
1 楼 nofreezou 2012-03-10  
将mysql与其他数据库分开备份即可。

改源代码不如写个脚本直接删掉那行语句- -

相关推荐

    浅谈mysqldump使用方法(MySQL数据库的备份与恢复)

    mysqldump是MySQL数据库管理系统提供的一款强大的数据备份和恢复工具,它能够方便地将数据库的数据和结构导出为SQL格式的文本文件,以便于备份、迁移或恢复数据。在本文中,我们将深入探讨mysqldump的使用方法和常用...

    mysql数据备份和还原的常用命令

    mysqldump --add-drop-table -uusername -ppassword databasename &gt; backupfile.sql 该命令将备份整个 MySQL 数据库,并在还原时删除已有的表。 3. 直接将 MySQL 数据库压缩备份 mysqldump -hhostname -uusername...

    mysql mysqldump只导出表结构或只导出数据的实现方法

    - `--opt`:启用默认的优化选项,如删除表后再创建(`--add-drop-table`)等。 - `-d` 或 `--no-data`:指定不导出数据,只导出表结构。 - `数据库名`:你要备份的数据库名称。 - `-u root`:使用`root`用户进行操作...

    mysql_备份还原,基本操作,双机热备,数据同步,远程连接 文档集合

    mysqldump -–add-drop-table -uusername -ppassword databasename &gt; backupfile.sql 直接将MySQL数据库压缩备份 mysqldump -hhostname -uusername -ppassword databasename | gzip &gt; backupfile.sql.gz 备份MySQL...

    MySQL备份数据库的命令.doc

    mysqldump -–add-drop-table -uusername -ppassword databasename &gt; backupfile.sql 该命令将备份数据库,并在备份文件中添加 DROP TABLE 语句,以便在恢复时删除原有表。 直接将 MySQL 数据库压缩备份 可以使用...

    mysqldump基本用法

    `mysqldump`是MySQL数据库管理系统中一个非常重要的实用工具,主要用于数据库的备份、迁移和数据导出。本文将详细介绍`mysqldump`的基本用法及其各种选项,帮助你更好地理解和掌握如何使用这个工具。 ### mysqldump...

    MySQL_Oralce数据库备份和还原的常用命令[文].pdf

    总结起来,数据库备份和恢复是IT运维的关键环节,正确掌握MySQL和Oracle的备份与恢复命令能确保数据安全,减少因意外导致的数据丢失风险。同时,了解如何在程序中自动化这些操作,可以提高工作效率并降低人为错误的...

    史上最全的MYSQL备份方法

    mysqldump --add-drop-table -u username -p password databasename &gt; backupfile.sql ``` - **压缩备份**: ``` mysqldump -h hostname -u username -p password databasename | gzip &gt; backupfile.sql.gz ``...

    mysqldump命令 MySQL数据库备份

    — -add-drop-table 在每个创建数据库表语句前添加删除数据库表的语句 — -add-locks 备份数据库表时锁定数据库表 — -all-databases 备份MySQL服务器上的所有数据库 — -comments 添加注释信息 — -compact...

    历史库备份还原方法

    mysqldump --add-drop-table -uusername -ppassword databasename &gt; c:/backupfile.sql ``` 这样在还原时,会先删除目标数据库中的表,然后重新创建并导入数据。 3. **压缩备份**:为了节省存储空间,可以将备份...

    mysql导出导入命令

    mysqldump -u root -p -d --add-drop-table database &gt; c:\phpwap.sql ``` 这种方式主要用于备份数据库的结构,而不包括任何数据。 #### 二、MySQL导入命令详解 ##### 1. 使用`source`命令导入数据库 当需要将...

    MySQL数据备份和恢复(导出和导入)

    mysqldump --add-drop-table -u username -p password database_name &gt; backupfile.sql ``` 这种备份方式在恢复时会先删除原表再创建新表,适用于需要完全替换现有数据库的情况。 3. **直接将数据库压缩备份**: ...

    mysql备份与还原命令

    mysqldump -h hostname -u username -p password --add-drop-table database_name &gt; backupfile.sql ``` 使用`--add-drop-table`选项会在每个`CREATE TABLE`语句前添加一个`DROP TABLE IF EXISTS`语句,方便后续恢复...

    mysql备份与恢复详细整理

    本篇文章将深入探讨MySQL的备份与恢复策略,包括常见的工具和参数,特别是对`mysqldump`工具的详细使用。 1. **mysqldump**:这是MySQL的逻辑备份工具,通过SQL语句生成数据的脚本文件。它适用于不同MySQL版本之间...

    mysql数据库备份及恢复命令 mysqldump,source的用法

    mysqldump -–add-drop-table -u username -p password databasename &gt; backupfile.sql ``` 此命令会在每个CREATE TABLE语句前添加DROP TABLE语句,方便覆盖现有数据库而不必手动删除原有的数据库。 ##### 3. 直接...

    mysqldump工具基本用法

    `mysqldump`是MySQL数据库管理系统中一个非常强大的工具,主要用于数据库的备份、迁移和恢复操作。它能够将数据库的内容导出成文本文件,形成SQL脚本,便于在不同环境中进行数据的复制和恢复。本文将详细介绍`...

    MySQL备份及恢复方法

    mysqldump --add-drop-table -u username -p password database_name &gt; backup_file.sql ``` 这种格式的备份在恢复时会自动删除原有表,然后重新创建,适用于覆盖已有数据库的情况。 3. **压缩备份**: ```bash...

    l\MySQL备份及恢复方法

    mysqldump --add-drop-table -u username -p password databasename &gt; backupfile.sql ``` - **直接将数据库压缩备份**: ```bash mysqldump -h hostname -u username -p password databasename | gzip &gt; ...

    数据库备份与还愿命令完整版

    mysqldump -C add-drop-table -u username -p password database_name &gt; backupfile.sql ``` **参数说明:** - `-C add-drop-table`: 在备份文件中添加DROP TABLE语句,方便在恢复时清理旧表。 **示例:** ```...

    MySQL数据库备份和还原的常用命令小结

    mysqldump --add-drop-table -uusername -ppassword databasename &gt; backupfile.sql ``` - **压缩备份**:通过管道操作与`gzip`或`bzip2`结合,可以创建压缩备份: ```bash mysqldump -hhostname -uusername -p...

Global site tag (gtag.js) - Google Analytics