0

我正在尝试编写一个 PHP 程序来自动创建 MySQL 表的备份作为服务器上的 sql 文件:

$backup = "$path/$tablename.sql";
$table = "mydbname.mytablename";

执行(
  冲刺f(
    '/usr/bin/mysqldump --host=%s --user=%s --password=%s %s --quick --lock-tables --add-drop-table > %s',
    $主机,
    $用户,
    $密码,
    $表,
    $备份
  )
);

我在生成的 .sql 文件中得到的所有内容是:

-- MySQL 转储 10.10
--
-- 主机:localhost 数据库:mydbname.mytablename
-------------------------------------------------- ------
-- 服务器版本 5.0.27

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 设置@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 设置名称 utf8 */;
/*!40103 设置@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 */;

结果列表 Database:mydbname.mytablename 似乎很可疑。

我不知道从哪里开始寻找。我的主机在帮助我最初设置程序时说我需要停用 safe_mode(已经完成)并授予对二进制文件的访问权限(我不知道这意味着什么)。

楼主每次提问都要两天时间回复,如果可以的话我想自己解决。

4

1 回答 1

5

你的 mysqldump 命令是这样的:

/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD TABLE --quick --lock-tables --add-drop-table

查看mysqldump 的手册,我会说它会认为 TABLE 实际上是您的数据库的名称(引用)

调用 mysqldump 的一般方法有以下三种:

shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] --databases db_name1 [db_name2 db_name3...]
shell> mysqldump [options] --all-databases

显然,您必须将数据库的名称放在要转储的表的名称之前。

因此,例如,这样的事情可能会奏效:

/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DBNAME TABLE --quick --lock-tables --add-drop-table


希望这可以帮助 !


编辑:我实际上做了一个快速测试,使用“databasename.tablename”,就像你做的那样:

mysqldump --user=USER --password=PASSWORD --no-data DBNAME.TABLENAME

我得到了与你相同的输出......但我也有一个错误:

mysqldump: Got error: 1102: Incorrect database name 'DBNAME.TABLENAME' when selecting the database

我猜,哪个是错误输出,而不是标准输出(你只是将第二个重定向到你的文件)

如果我正在使用:

mysqldump --user=USER --password=PASSWORD --no-data DBNAME TABLENAME

一切正常:没有错误,我有转储。

于 2009-09-17T16:53:23.800 回答