我试图通过一个每天运行的cron作业来自动备份我们的mysql数据库。
我们有:
$database_user = 'VALUE';
$database_pass = 'VALUE';
$database_server = 'localhost';
// Name of the database to backup
$database_target = 'VALUE';
// Get Database dump
$sql_backup_file = $temp_dir . '/sql_backup.sql';
$backup_command = "mysqldump -u" . $database_user . " -p" . $database_pass . " -h " . $database_server . " " . $database_target . " > " . $sql_backup_file;
system($backup_command);
// End Database dump问题是我们从Cron守护进程收到一条返回的消息:
用法: mysqldump选项数据库表
或者mysqldump选项--databases OPTIONS DB1 DB2 DB3...
或mysqldump选项-所有数据库选项
有关更多选项,请使用mysqldump --help
sh:-h:找不到命令
所以看起来像是和-h有关
有没有人对如何修复有什么想法?
发布于 2015-01-20 08:00:19
首先,我建议您升级到mysql 5.6+,这样您可以更安全地保护您的数据库密码。首先,您需要按照this stackoverflow answer中的说明为命令行脚本设置更安全的mysql登录方法。
您可能应该编写bash脚本,而不是使用PHP。这是一个完整的备份脚本,非常简单。db_name是您的数据库的名称,而/path/to/backup_folder/显然是您希望存储备份的位置。--login-path=local开关将查看运行此bash脚本的用户的主目录,并查看那里是否有登录文件(必须是当前用户可读的,其他任何人都不能访问)。
#!/bin/bash
#$NOW will provide you with a timestamp in the filename for the backup
NOW=$(date +"%Y%m%d-%H%M%S")
DB=/path/to/backup_folder/"$NOW"_db_name.sql.gz
mysqldump --login-path=local db_name | gzip > "$DB"
#You could change permissions on the created file if you want
chmod 640 "$DB"我将该文件作为db_backup.sh保存在/usr/local/bin/文件夹中,并确保将要执行数据库备份的用户可以读取/执行该文件。现在我可以在系统的任何地方运行# db_backup.sh,它将会工作。
为了使其成为cron,我在我的/etc/crond.d/文件夹中放置了一个名为'db_backup‘的文件(名称并不重要),如下所示(user_name是应该运行备份脚本的用户)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:usr/local/bin
MAILTO=root
HOME=/
# "user_name" will try to run "db-backup.sh" every day at 3AM
0 3 * * * user_name db-backup.sh发布于 2014-03-14 18:16:15
我想你的密码字符串上有一些奇怪的字符。也许是一个"`“字符,这就是为什么你会得到这两个错误。
尝试在system_call之前转义$backup_command (http://www.php.net/escapeshellcmd)
system(escapeshellcmd($backup_command));发布于 2016-02-06 01:18:33
无论如何你不应该使用 -p选项,因为这可以被系统上的任何人通过ps aux读出。
在选项文件中指定mysqldump的凭据是一种更好的方法:
[client]
host = localhost
user = root
password = "password here"然后像这样调用你的脚本:
mysqldump --defaults-file=/etc/my-option-file.cnf ...other-args这样,您系统上的密码就不会暴露给其他用户。它甚至还可以用未转义的复杂密码修复您的程序。
我还建议你看看这个项目,以获得更多的想法:mysqldump-secure
https://stackoverflow.com/questions/22318021
复制相似问题