mysql mysqldump 定时备份
mysqldump方式备份
Windows
一、创建bat 任务脚本
⚠️ 内容背后不能有中文空格,否则会运行失败
新建 bat 脚本复制以下内容,安装自己的需求对内容进行修改
@echo off ::命令行窗口中显示此条信息 @echo 开始备份数据库 ::将hour设置为此刻小时位的时间,从0位置开始取2位 set hour=%Time:~0,2% ::(小时位如果是个位数例如9点,则默认不是09,而是 9,前一位位空)判断小时位第一位是否为空,如果为空则添加上0,如果不为空则不执行,hour为前一条语句设置的。 if "%Time:~0,1%"==" " set hour=0%Time:~1,1% ::获取具体时间 set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%-%hour%%Time:~3,2%%Time:~6,2% ::设置数据库的ip地址 set host=127.0.0.1 ::设置数据库端口号 set port=3306 ::设置用户名 set user=root ::设置用户密码 set pass=xxx ::设置数据库名称 set dbname=xxx ::设置备份的数据库的存储文件夹路径,注意路径不能有中文,且路径中文件夹需提前创建好 set back_path=C:\backup ::设置每次备份的数据库名称(此处为“数据库名-时间”) set backupfile=%back_path%\%dbname%-%now%.sql ::备份数据库的语句。(前方引号中的路径,为数据库安装目录下,mysqldump.exe程序的路径) "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump" -h%host% -P%port% -u%user% -p%pass% -c --add-drop-table %dbname% >%backupfile% ::命令行窗口中显示此条信息 @echo 数据库备份成功
二、创建定时任务
1、打开控制面板 > 管理工具 > 任务计划程序,创建任务:

2、填写触发器,设置执行时间:

3、添加执行脚本
新建操作,选中刚刚创建好的bat 文件

Linux
创建一个名为 backup_mysql.sh 的文件,内容如下:
#!/bin/bash # ========================================== # 1. 核心修复:引入完整的环境变量(解决Crontab找不到命令的问题) # ========================================== PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/mysql/bin export PATH # 显示开始备份信息 echo "开始备份数据库..." # 获取当前时间 NOW=$(date +%Y%m%d-%H%M%S) # 设置数据库配置信息 HOST="127.0.0.1" PORT="3306" USER="root" PASS="" # 即使有特殊字符,也直接写在这里,用双引号包裹即可 DBNAME="" # 设置备份存储文件夹路径 BACK_PATH="/data/backup" mkdir -p ${BACK_PATH} # Ensure directory exists # 设置每次备份的数据库完整路径及文件名 BACKUPFILE="${BACK_PATH}/${DBNAME}-${NOW}.sql" # ========================================== # 2. 核心修复:使用环境变量传递含特殊字符的密码 # ========================================== export MYSQL_PWD="${PASS}" # 执行备份语句(注意:命令行里不再写 -p${PASS},mysqldump 会自动读取 MYSQL_PWD) mysqldump -h${HOST} -P${PORT} -u${USER} -c --add-drop-table ${DBNAME} > ${BACKUPFILE} # 清除密码环境变量,保证安全 unset MYSQL_PWD # 检查备份是否真的成功(判断文件大小是否大于 0) if [ -s "${BACKUPFILE}" ]; then echo "数据库备份成功,备份文件为: ${BACKUPFILE}" else echo "数据库备份失败,备份文件大小为 0B,请检查数据库连接或权限!" rm -f "${BACKUPFILE}" # 删除这个 0B 的空文件,防止误导 exit 1 fi # ========================================== # 自动删除 30 天前的旧备份文件 # ========================================== find ${BACK_PATH} -type f -name "${DBNAME}-*.sql" -mtime +30 -exec rm -f {} \; echo "30天前的旧备份清理完毕。"
2、Linux 的目录结构与 Windows 不同,先创建你在脚本中指定的备份文件夹:
sudo mkdir -p /data/backup sudo chmod 777 /data/backup # 确保脚本有权限写入该目录
3、把上面的脚本内容保存到 Linux 服务器上(例如保存为 /backup/backup_mysql.sh),然后赋予它执行权限:
chmod +x /data/backup/backup_mysql.sh
4、在终端执行以下命令,看看是否成功生成了 .sql 文件:
/data/backup/backup_mysql.sh
5、设置 Linux 定时任务
在终端输入以下命令进入定时任务编辑界面:
crontab -e
在文件末尾添加一行定时规则。例如,每天凌晨 2:00 自动执行备份:
0 2 * * * /bin/bash /data/backup/backup_mysql.sh > /data/backup/backup.log 2>&1
配置完成后保存并退出,Linux 就会像 Windows 任务计划一样,在后台准时帮你备份数据库了。
原文转载:https://www.cnblogs.com/xh_Blog/p/17215036.html

浙公网安备 33010602011771号