带绝对路径与不带绝对路径的mysqldump导出行为差异问题
问题解决思路
先排查最明显的拼写错误
错误提示里的文件名是alldatabasesss.sql(多了两个s),但你提供的绝对路径命令里写的是alldatabases1.sql,这大概率是你执行命令时手滑打错了文件名,先仔细核对你实际输入的命令,确保目标文件名完全一致。
如果拼写没问题,排查以下几点
确认目标目录存在且有权限
执行ls -ld /newbackup/mysql,检查这个目录是否存在,并且当前用户(或cron运行用户)有读写权限。如果目录不存在,先创建:mkdir -p /newbackup/mysql。检查
mysqldump的实际调用路径
执行which mysqldump,看直接调用时的mysqldump是不是/usr/bin/mysqldump。如果输出不是这个路径,说明你可能设置了别名或者PATH里有其他版本的mysqldump,比如别名里包含了自动处理目录的逻辑,而用绝对路径调用会跳过别名,导致目录未提前创建。针对cron的特殊处理
cron的运行环境和普通shell差异很大,默认PATH很窄,且工作目录是用户home目录。建议写一个备份脚本,避免直接在cron里写复杂命令:- 创建脚本文件
/usr/local/bin/mysql_backup.sh:#!/bin/bash # 确保备份目录存在,不存在则自动创建 mkdir -p /newbackup/mysql # 用绝对路径执行备份命令 /usr/bin/mysqldump --all-databases -u root > /newbackup/mysql/alldatabases1.sql - 给脚本加执行权限:
chmod +x /usr/local/bin/mysql_backup.sh - 在cron里添加任务(比如每天凌晨2点执行):
0 2 * * * /usr/local/bin/mysql_backup.sh
- 创建脚本文件
内容的提问来源于stack exchange,提问作者Alfa Omega
相关产品推荐
相关产品推荐

