总结:Linux系统上面定时备份mysql指定数据库的解决方案

文章介绍了如何在Linux系统中利用MySQL的mysqldump命令进行数据库备份,并结合crontab定时任务执行器设置定期备份。首先,详细展示了mysqldump的备份命令格式及示例,然后讲解了crontab的基本使用和添加定时任务的方法。接着,给出了将备份命令封装到shell脚本中并设置定时执行的步骤,最后提到了一种常见的备份文件异常情况及其解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一·Mysql数据库本身就自带备份数据库命令

1.mysql本身自带备份数据库为一个sql文件的命令,只需要在操作系统的终端里面执行就好了

命令格式1:
mysqldump -h [IP或域名] -P [端口号] -u [登录账号] -p[登录密码] --databases [数据库名称] > [最终生成sql文件的存储路径]/xxx.sql

示例:
mysqldump  -h localhost -P 3306 -u root -p123456 --databases test > /Users/ideal/Desktop/test.sql



命令格式2:不从配置文件读取对应参数值,必须命令行给出值
mysqldump --no-defaults  -h [IP或域名] -P [端口号] -u [登录账号] -p[登录密码] --databases [数据库名称] > [最终生成sql文件的存储路径]/xxx.sql

示例:
mysqldump --no-defaults  -h localhost -P 3306 -u root -p123456 --databases test > /Users/ideal/Desktop/test.sql

注意:-p后面必须紧跟密码,之间不能有空格,不然会有问题

二·Linux和Unix操作系统都自带一个定时任务执行器:crontab

在Linux系统中,有一个非常强大的定时任务执行器,它叫做crontab。 crontab可以让用户在固定的时间、日期或者周期性地执行某些任务或命令。 crontab的使用非常简单,用户只需要编辑自己的crontab文件,就可以添加、修改或删除自己的定时任务。

1.一些基本的crontab命令示例:

crontab -l :列出当前用户的所有定时任务。
crontab -e :编辑当前用户的定时任务。
crontab -r :删除当前用户的所有定时任务。
crontab -u user -l :列出指定用户的所有定时任务。
crontab -u user -e :编辑指定用户的定时任务。
crontab -u user -r :删除指定用户的所有定时任务。

2.如何用crontab -e命令添加一个定时任务:

(1)使用crontab -e命令编辑或创建一个用户的计划任务列表。

crontab -e

(2)在计划任务列表中,每一行就代表一个计划任务。语法格式如下

* * * * * command arg1 arg2
| | | | |
| | | | ----- Day of the Week (0 - 7) (Sunday is both 0 and 7)
| | | ------- Month (1 - 12)
| | --------- Day of the Month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

注意:这计划任务列表里面的command命令,其实就是Linux操作系统里面的命令。但有些命令是需要依赖系统环境变量的,而定时任务执行器里面却并不一定能够访问系统环境变量。所以建议使用命令的绝对路径。

例如:

0 2 * * * /path/to/your/script.sh

(3)添加完之后,可以使用crontab -l命令查看添加结果
在这里插入图片描述

三·将crontab定时任务与mysql的备份命令结合起来,形成最终解决方案

1.先将mysql的备份命令写成脚本文件形式(mysql-backup.sh)

(1)mysql-backup.sh脚本文件内容如下所示:自定义信息需要自己完善

#!/bin/bash

# MySQL Server 登录信息
MYUSER="数据库用户名"
MYPASS="数据库用户密码"
MYHOST="数据库主机地址"
MYPORT="数据库端口号,默认为3306"
MYDB="需要备份的数据库名称"

# 备份相关配置信息
BAKDIR="/var/db-backup/$(date +'%Y-%m-%d')"  # 备份保存目录
BAKFILE="$BAKDIR/db.$(date +'%Y-%m-%d-%H%M%S').sql.gz"  # 备份文件名
KEEPDAYS=7  # 保留天数

# 创建备份目录
if [ ! -d "$BAKDIR" ]; then
    mkdir -p "$BAKDIR"
fi

# 备份数据库至压缩文件
mysqldump -h "$MYHOST" -P "$MYPORT" -u "$MYUSER" -p"$MYPASS" --databases "$MYDB" | gzip > "$BAKFILE"

# 清理旧备份文件,只保留指定天数内的备份,超过时间的就会被清除
find "$BAKDIR" -name '*.sql.gz' -type f -mtime +"$KEEPDAYS" -delete

2.给脚本文件授权(可执行权限)

chmod 777 mysql-backup.sh

3.使用 crontab 命令设置定时任务:

0 2 * * * /usr/local/bin/mysql-backup.sh

四·常见异常:MySQL备份脚本写入Crontab计划性任务之后生成的备份文件大小为0解决方法

https://cloud.tencent.com/developer/article/1833718

### 设置 MySQL 定时自动备份方案 #### Windows 环境下的 MySQL 自动备份 在 Windows 系统中,可以通过创建批处理文件 `.bat` 并结合任务计划程序来实现 MySQL 数据库定时自动备份。 1. **编写批处理脚本 `mysql_backup.bat`** 创建一个名为 `mysql_backup.bat` 的批处理文件,并写入以下内容: ```batch @echo off set db_user=your_username set db_password=your_password set db_name=your_database_name set backup_path=C:\backups\%date:~0,4%%date:~5,2%%date:~8,2% :: 如果目标目录不存在,则创建它 if not exist %backup_path% ( mkdir %backup_path% ) :: 使用 mysqldump 命令导出数据库 mysqldump -u%db_user% -p%db_password% %db_name% > "%backup_path%\%db_name%.sql" echo 备份完成! ``` 上述脚本会将当前日期作为子目录名存储备份文件[^1]。 2. **配置 Windows 任务计划程序 (Task Scheduler)** 打开 Task Scheduler,在新建的任务属性中指定触发器为每日凌晨某时刻(如 1 AM),并将操作指向上述编写的 `mysql_backup.bat` 文件。 --- #### Linux 环境下的 MySQL 自动备份 对于 Linux 系统而言,可以利用 cron 计划任务配合 shell 脚本来完成定期备份工作。 1. **编写 Shell 脚本 `mysql_backup.sh`** 编辑一个新的脚本文件 `/data/scripts/mysql_backup.sh`,其内容如下所示: ```bash #!/bin/bash DB_USER="your_username" DB_PASSWORD="your_password" DB_NAME="your_database_name" BACKUP_DIR="/data/backups/$(date +%Y%m%d)" LOG_FILE="/data/backups/logs/mysqldump.log" # 创建备份目录 [ ! -d "$BACKUP_DIR" ] && mkdir -p $BACKUP_DIR # 导出数据至 SQL 文件 mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME > "${BACKUP_DIR}/${DB_NAME}.sql" # 将日志记录下来 echo "$(date): Backup completed successfully." >> $LOG_FILE ``` 此外还需要赋予该脚本可执行权限: ```bash chmod +x /data/scripts/mysql_backup.sh ``` 2. **设定 Cron Job 来调度此脚本** 输入命令打开 crontab 配置界面: ```bash crontab -e ``` 添加一行用于定义每天早上一点钟启动备份进程: ```cron 0 1 * * * /data/scripts/mysql_backup.sh >/dev/null 2>&1 ``` 这样一来,系统会在每晚的一点钟调用这个脚本进行一次完整的数据库转储[^2]。 3. **解决常见错误** 若遇到诸如 “mysqldump: 未找到命令”的提示信息,可能是因为系统的 PATH 变量里缺少了对应工具的位置链接。此时可通过软连接方式解决问题或者直接把完整路径加入到脚本当中去。 ```bash ln -fs /usr/local/mysql/bin/mysqldump /usr/bin/ ``` 或者调整环境变量设置使其生效。 --- ### 总结 无论是哪种操作系统平台下,核心思路都是通过专门设计好的脚本来抓取最新的数据库状态存档起来;之后借助各自的操作系统特性安排好周期性的重复动作即可达成自动化的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ideal-cs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值