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

# 检查备份是否真的成功(判断文件大小是否大于 0if [ -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

 

posted @ 2024-12-19 17:25  橘子味儿的猫  阅读(88)  评论(0)    收藏  举报