Почему базовый MySQLdump на db-таблице терпит неудачу с "Permission denied"
Это должно быть быстрым и простым, но после изучения Google довольно немного, я все еще в тупике. Я в основном новичок с: server admin, CLI, MySQL.
Я разрабатываю свой PHP-сайт локально, и теперь вам нужно переместить некоторые новые таблицы MySQL из моей локальной настройки разработчика на удаленный сайт тестирования. Первый шаг для меня - просто сбросить таблицы, по одному за раз.
Я успешно вхожу в мой локальный MySQL так:
Govind% /usr/local/mysql/bin/mysql -uroot
но в то время как в этом каталоге (и НЕ вошел в MySQL):
/usr/local/mysql/bin
... когда я пробую это
mysqldump -uroot -p myDBname myTableName > myTestDumpedTable.sql
.. то я продолжаю получать следующее:
"myTestDumpedTable.sql: Permission denied."
Тот же результат, если я делаю какие-либо изменения на этом (попробуйте сбросить весь db, сбросьте '-p' и т.д.)
Я смущен, так как я уверен, что это будет невероятно просто или просто откроет ящуренную (основную) дыру в моих знаниях... но, пожалуйста, помогите; -)
Ответы
Ответ 1
Ответ пришел от полезного человека в списке MySQL:
Как вы, ребята (Anson and krazybean), думали - у меня не было разрешения писать в директорию /usr/local/mysql/bin/
. Но начиная с любого другого каталога вызовы mysqldump
не выполнялись, потому что моя оболочка PATH var (если я так сказал) еще не настроена для обработки mysqldump
из другого каталога. Кроме того, по какой-то причине я пока не понимаю, мне также нужно было использовать полный путь для вывода, даже если я действительно вызывал mysqldump, и даже если у меня было разрешение на запись на вывод dir (например, ~/myTestDumpedTable.sql
. Итак, вот мой билет, сейчас (быстрый ответ):
Govind% /usr/local/mysql/bin/mysqldump -uroot -p myDBname myTableName > /Users/Govind/myTestDumpedTable.sql
Вы можете писать везде, где у вашего пользователя оболочки есть разрешение на это. Я просто выбрал домашний каталог пользователя.
Надеюсь, это когда-нибудь поможет кому-то.
Приветствия.
Ответ 2
В общем, я придерживаюсь определения имени хоста в любом случае, но поскольку вы являетесь root, похоже, что это не проблема, я бы поставил вопрос, где вы пишете это? Что произойдет, если вы сбросите > ~/myTestDumpedTable.sql
Ответ 3
Взгляните на страницу man для mysqldump для правильного использования аргументов. Вам нужно пространство между флагом -u
и именем пользователя, например:
mysqldump -u root -p myDBname myTableName > myTestDumpedTable.sql
В качестве альтернативы вы можете сделать
mysqldump --user=root -p myDBname myTableName > myTestDumpedTable.sql
Так как вы не предоставляете пароль в списке аргументов, вам нужно будет указать его. Вы всегда можете указать пароль в списке аргументов, но недостатком этого является то, что оно появляется в открытом виде и будет отображаться в истории команд оболочки.
Ответ 4
Вы должны предоставить полный путь для файла резервной копии SQL, например
mysqldump -u root -p databasexxx > /Users/yourusername/Sites/yoursqlfile.sql
Ответ 5
Я думаю, что вам не хватает ./
из команды, попробуйте:
внутри
/usr/local/mysql/bin$ ./mysqldump -u root -p myDBname > "/Users/yourUserName/Documents/myTestDumpedTable.sql"
Итак, это script, а в linux вы выполняете script с ./myscript
.
Я нашел его только сегодня, и для меня, в моем Mac OSX, я не использовал -p
, возможно потому, что пароль не нужен, не знаю уже. Я имею в виду, попробуйте также:
./mysqldump -u root myDBname > "/Users/yourUserName/Documents/myTestDumpedTable.sql"