PHP-скрипт для резервного копирования базы данных MySQL
-
18-09-2019 - |
Вопрос
Я пытаюсь написать 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 или автоматический сценарий.