MySQLdump приводит к множеству закомментированных строк, без реального контента - PullRequest
0 голосов
/ 17 сентября 2009

Я пытаюсь написать программу PHP для автоматически созданных резервных копий таблиц MySQL в виде файлов sql на сервере:


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

exec(
  sprintf(
    '/usr/bin/mysqldump --host=%s --user=%s --password=%s %s --quick --lock-tables --add-drop-table > %s',
    $host,
    $user,
    $password,
    $table,
    $backup
  )
);

Все, что я получаю в полученном файле .sql, это:

-- MySQL dump 10.10
--
-- Host: localhost    Database: mydbname.mytablename
-- ------------------------------------------------------
-- Server version   5.0.27

/*!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 */;

Кажется подозрительным, что список результатов База данных: mydbname.mytablename.

Я не знаю, с чего начать. Мой хост, помогавший мне в первоначальной настройке программы, сказал, что мне нужно деактивировать safe_mode (уже было сделано) и дать доступ к двоичному файлу (я не знаю, что это значит).

Так как хозяину требуется два дня, чтобы ответить каждый раз, когда я задаю вопрос, я хотел бы решить это сам, если это возможно.

1 Ответ

5 голосов
/ 17 сентября 2009

Ваша команда mysqldump выглядит следующим образом:

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

Глядя на руководство по mysqldump , я бы сказал, что он подумает, что TABLE - это имя вашей базы данных (цитирование) :

Существует три основных способа вызова туздЫшпр:

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

Все работает нормально: ошибки нет, и у меня есть дамп.

...