MySQLdump приводит к множеству закомментированных строк, без реального контента

0

Я пытаюсь написать программу 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 */;

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

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

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

Теги:
file
backup
mysqldump

1 ответ

5
Лучший ответ

Команда 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


Надеюсь, это поможет!


EDIT: Я действительно сделал быстрый тест, используя "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

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

  • 0
    Я добавил пробел между именем базы данных и именем таблицы (вместо точки), и она работала нормально. Спасибо!
  • 0
    Всегда пожалуйста :-) Веселитесь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню