gpt4 book ai didi

php - mysqldump - 定时任务

转载 作者:行者123 更新时间:2023-11-30 23:53:24 26 4
gpt4 key购买 nike

我正在尝试通过每天运行的 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 [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

或 mysqldump [选项] --all-databases [选项]

有关更多选项,请使用 mysqldump --help

sh: -h: 找不到命令

看来跟-h有关系

~~~

有人对如何修复有任何想法吗?

最佳答案

首先,我建议您升级到 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"

我将该文件保存为 /usr/local/bin/ 文件夹中的 db_backup.sh 并确保它对正在访问的用户可读/可执行做数据库备份。现在我可以从系统的任何位置运行 # 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

关于php - mysqldump - 定时任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22318021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com