MySQLDump不导出数据或结构

时间:2013-12-18 15:41:11

标签: mysql linux centos

我正在尝试转储我的数据库副本,以确保我具有相应的权限,并确保备份策略能够继续运行。我遇到的问题是我无法创建转储文件。每次我尝试这样做时,它只会返回给我以下内容:

-- MySQL dump 10.13  Distrib 5.5.32, for Linux (i686)
--
-- Host: localhost    Database: dbname
-- ------------------------------------------------------
-- Server version       5.5.32

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2013-12-18 10:34:02

我正在运行的命令是:

mysqldump -uroot -p --flush-logs --single-transaction --master-data=2 --delete-master-logs --databases dbname > ./Back_Up_Test`date +%Y_%m_%d`.sql.bak

我尝试在命令末尾添加2> Error.err来检查存在什么错误,但它似乎没有为我生成任何错误,因为文件大小为0.使用该用户我现在试图运行此操作的是root用户,并拥有对所有内容的完全权限。

+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD *password* WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON `dbname`.* TO 'root'@'localhost' WITH GRANT OPTION                                                               |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------------+

令我感到困惑的是,该命令在Dev中运行得非常好,但在此测试环境中,备份只是因为某种原因而拒绝创建。该文件夹应具有适当的权限,因为文件最终存在于具有正确名称的目录中,它根本没有结构或内部数据。

更新 我现在尝试使用--all-databases作为选项,它返回与之前相同的文件大小和内容。我不确定原因是什么。

1 个答案:

答案 0 :(得分:0)

经过几个小时的测试后,我终于找到了答案。当我最初开始这个时,MySQL服务器在过去的某个时候被更新,因此我需要运行/usr/bin/mysql_upgrade -u root -p以获得适当的权限回root用户。这样做之后,它允许我为其他用户添加权限。在此之后我做了习惯性/强制性的FLUSH PRIVILEGES

实际解决方案如下:

在尝试同时转储各种不同的数据库,所有数据库等之后,我只是变得沮丧并重新启动了服务本身。在这样做的过程中,我尝试完全按照先前的命令执行命令。此时,mysqldump确实创建了具有必要结构的必要文件。我不确定为什么我需要在一切之后重新启动服务 - 很可能mysql_upgrade在执行后需要它。但是,如果您发现自己处于类似的位置,我建议您执行以下步骤:

1. My first suggestion would simply be to check your privileges on the account that you are attempting to create the dump from, and verify that it has the necessary privileges.
2. If the Privileges match up with what is expected/necessary, then flush the privileges to make sure they have taken.
3. If you are still unable to create an mysql dump at this point, then restart the service.

我没有删除这个问题,因为解决方案很简单,我只是因为这个问题似乎经常被问到,特别是关于PHP脚本/自动化,以及我发现的问题没有问题。经常有答案。

希望这可以帮助其他任何有这个问题的人。