PHP-скрипт для резервного копирования базы данных MySQL

StackOverflow https://stackoverflow.com/questions/1867797

Вопрос

Я пытаюсь написать PHP-скрипт для резервного копирования базы данных MySQL:

   if ( $db_resource = mysql_connect($db_server, $db_username, $db_password, $db_newlink) )
   {
      if ( mysql_select_db( $db_name, $db_resource ) )
      {
         $backupFile = $db_name."_".date( "Y-m-d-H-i-s" ).".gz";
         $command = "mysqldump --opt -h ".$db_server." -u ".$db_username." -p ".$db_password." ".$db_name." | gzip > ".$db_save_dir."/".$backupFile;
         system( $command );
      }
   }

   mysql_close( $db_resource );

Когда я запускаю его из терминала оболочки, я получаю это:

[скат]$ php /[Абсолютный путь]/db_backup.php

Введите пароль:[Я ВВЕДУ ПАРОЛЬ]

MySQLдамп:Получил ошибку:1044:Пользователю отказано в доступе '[ИМЯ ПОЛЬЗОВАТЕЛЯ] '@' 208.113.128.0/255.255.128.0 'для базы данных' [[ПАРОЛЬ] 'При выборе базы данных

Хорошо, теперь я действительно не понимаю, почему он называет базу данных моим паролем.Если я направлю свой веб-браузер на файл, он будет работать нормально.Кто-нибудь знает, что мне следует делать?Лично меня не волнует, PHP ли это, Python, CGI и т. д., лишь бы он мог работать на сервере Apache.

Спасибо.

Это было полезно?

Решение

Синтаксис флага пароля другой.Удалите пробел после флага -p и попробуйте еще раз.

Другие советы

попробуйте использовать полные имена опций;у меня была похожая проблема, но у меня не было времени разобраться с настоящей причиной сбоя;однако это сработало и работает для меня:

/usr/bin/mysqldump \
--user=username \
--password=password \
dbname > mysqldump.sql

1:Нет места между -p и паролем Ex:-p".$db_password."

2:предоставить все (если хотите) привилегии конкретному пользователю для этой базы данных.

3:дайте файлу правильное разрешение на выполнение команды.

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

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

Я предлагаю вам использовать SqlBuddy, это решило мою проблему, как и вашу.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top