【问题标题】:MySQLDump Not Exporting Data or StructureMySQLDump 不导出数据或结构
【发布时间】:2013-12-19 01:20:09
【问题描述】:

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

-- 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 作为选项,它返回的文件大小和内容与以前完全相同。我不确定是什么原因。

【问题讨论】:

    标签: mysql linux centos


    【解决方案1】:

    经过几个小时的测试,我终于找到了答案。当我最初启动它时,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 脚本/自动化,而我发现的问题没有t 经常有答案。

    希望这可以帮助遇到此问题的其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 2011-08-16
      • 2013-03-17
      • 2012-02-16
      • 2013-02-06
      • 1970-01-01
      • 2014-11-13
      • 2013-03-21
      相关资源
      最近更新 更多