2013-12-03 3 views
2

Я пытаюсь экспортировать базу данных с помощью mysqldump из командной строки. Я использую следующий синтаксис:mysqldump не будет экспортировать отдельную базу данных

mysqldump -u root -ppassword databasename > outputfile.sql 

Я попытался несколько вариаций на это, но я всегда в конечном итоге следующее в качестве содержимого выходного файла:

Usage: mysqldump [OPTIONS] database [tables] 
OR  mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] 
OR  mysqldump [OPTIONS] --all-databases [OPTIONS] 

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

Я что-то пропустил?

+0

'mysqldump -databases databasename' не работает? – Noah

+0

Нет, я пробовал mysqldump ...--databases databasename' – Matt

+0

Какое имя вашей базы данных? Имеет ли он некоторые специальные символы, которые mysqldump не нравится. Я использую ту же настройку, что и без проблем, за исключением того, что я использую -h имя хоста, потому что база данных находится на другом хосте. – Robbert

ответ

2

Устранение неполадок с комментариями выше:

То есть правильный синтаксис. Я бы предположил, что mysqldump где-то подбирает некоторые другие варианты. Может быть, это псевдоним оболочки с параметром, например -A, включенным в определение псевдонима? Попробуйте запустить \mysqldump ..., чтобы запустить его с псевдонимом.

Ваш ответ:

@BillKarwin вы были на правильном пути с -Д. Я попробовал mysqldump -print-defaults, и, видимо, все-базы данных находятся в аргументах по умолчанию. Я запускал его с -no-defaults, и он работал как шарм.

Проблема в том, что --all-databases был настроен как опция по умолчанию. Когда вы пытаетесь использовать эту опцию вместе с аргументом, указывающим одну базу данных, он выдает описанную вами ошибку использования.

http://dev.mysql.com/doc/refman/5.6/en/mysqldump.html говорит, что all-databases может быть либо флагом командной строки, либо параметром в файле конфигурации.

Я предлагаю посмотреть в вашем /etc/my.cnf или $ HOME/.my.cnf для опции all-databases. Он может отображаться либо в группе [mysqldump], либо в группе [client].

1

Как насчет (без пространства между u и root)

mysqldump -uroot -ppassword databasename > outputfile.sql 
+0

Также пробовал '-uroot'' --user = root'' --password = password' --- Все это работает, когда не указывается база данных и не выводится все базы данных. Он просто терпит неудачу, когда я пытаюсь добавить параметр базы данных. – Matt

0

Ввод корневой пароль в командной строке действительно плохая идея. По крайней мере, создать .my.cnf в вашем домашнем каталоге, установка разрешений на 600 (рв только для вас), содержащий:

[mysqldump] 
user=root 
password=yourpassword 

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

Предположительно, вы делаете mysqldump, чтобы поддержать все. Чтобы сделать жизнь еще проще, установите ее в cron, как в примере ниже, который выполняется в полночь. Из-за присутствия .my.cnf файла, содержащего пароль, он не нужен пароль в команде

0 0 * * * /usr/bin/mysqldump -u root -h localhost databasename > /home/someuser/outputfile.sql 2>&1 
Смежные вопросы