linux 定时备份数据资料

本文介绍了一个用于自动备份的Shell脚本,并详细解释了如何使用Cron来定期执行此备份脚本,包括创建脚本、配置Cron定时任务及重启Cron服务的方法。

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

1,写一个脚本backup.sh内容如下
#!/bin/sh
cp -r /home/..../data /tmp/backup/bak //数据存在data目录下,备份到backup目录下,所以先将数据拷过来
tar -zcvf /tmp/backup/bak$(date +%Y%m%d).tar.gz /tmp/backup/bak  //将数据所在文件夹bak打包
rm -rf /tmp/backup/bak   //删除临时文件内容

find /tmp/backup -mtime +30 -name "*.*" -exec -rf{}; //删除改文件夹下超过30天的文件

2,修改crontab内容
#crontab -e
* * * * * /home/.../backup.sh
如:22 11 1 * * /home/backup.sh 就是每月的1号11点22分执行home下的backup。sh脚本
前面五个字段分别表示分钟(0-59)、小时(0-23)、日(1-31)、月(0-12)、星期几(0-6)后面的为脚本所在目录
3,重新启动crond服务
#service crond restart

如果没有安装crond服务就先装上服务再说,用service crond status可以查看该服务状态


<think>我们根据用户需求,需要配置Linux下的MySQL定时备份任务。主要步骤包括: 1. 创建备份脚本(如backup.sh) 2. 赋予脚本执行权限 3. 使用crontab设置定时任务 参考多个引用,我们可以综合一个比较完善的备份脚本,并设置定时任务。 步骤1:创建备份脚本 我们可以参考引用[1][3][4][5]中的脚本,结合用户需求,创建一个脚本。注意以下几点: - 指定备份目录 - 设置MySQL连接参数(用户名、密码、socket等) - 可以备份多个数据库(如引用[1])或单个数据库(如引用[4]) - 添加日期时间到备份文件名 - 可选的压缩和删除旧备份功能(如引用[3]) 这里我们创建一个支持多个数据库备份,并压缩备份文件的脚本。 假设我们在/home目录下创建backup.sh,内容如下: ```bash #!/bin/bash # MySQL连接参数 MYSQL_USER="root" # 替换为你的MySQL用户名 MYSQL_PASSWORD="your_password" # 替换为你的MySQL密码 MYSQL_SOCKET="/var/run/mysqld/mysqld.sock" # 根据你的MySQL配置修改,如果不使用socket连接可以去掉相关参数 # 备份目录 BACKUP_DIR="/data/backups/mysql" # 需要备份的数据库列表,多个数据库用空格分隔 DATABASES=("database1" "database2") # 当前日期时间,用于文件名 CURRENT_DATETIME=$(date +%Y%m%d%H%M%S) # 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR echo "开始备份,时间: $CURRENT_DATETIME" # 循环备份每个数据库 for DB_NAME in "${DATABASES[@]}" do # 定义备份文件名(包含路径) BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${CURRENT_DATETIME}.sql" # 使用mysqldump备份数据库 # 注意:如果不需要指定socket,可以去掉--socket参数 mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --socket=$MYSQL_SOCKET --single-transaction --routines --triggers --events $DB_NAME > $BACKUP_FILE # 检查备份是否成功 if [ $? -eq 0 ]; then echo "数据库 $DB_NAME 备份成功: $BACKUP_FILE" # 压缩备份文件(可选) gzip $BACKUP_FILE echo "已压缩备份文件: $BACKUP_FILE.gz" else echo "数据库 $DB_NAME 备份失败" fi done # 删除旧备份(例如保留7天) # 查找备份目录下7天以前(按天计算)的备份文件并删除 find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -exec rm -f {} \; echo "备份完成" ``` 注意:请根据实际情况修改以下参数: - MYSQL_USER, MYSQL_PASSWORD: 数据库用户名和密码 - MYSQL_SOCKET: 如果MySQL是通过TCP连接,可以去掉--socket参数,或者使用-h指定主机 - BACKUP_DIR: 备份存放目录 - DATABASES: 需要备份的数据库名称数组 步骤2:赋予脚本执行权限 在终端执行: ```bash chmod +x /home/backup.sh ``` 步骤3:设置定时任务 使用crontab设置定时任务,比如每天凌晨1点执行备份(参考引用[2])。 编辑当前用户的crontab: ```bash crontab -e ``` 在打开的文件中添加一行(注意脚本路径): ``` 0 1 * * * /home/backup.sh > /home/backup.log 2>&1 ``` 这表示每天凌晨1点执行备份,并将输出(包括错误输出)重定向到/home/backup.log文件中。 保存并退出。 步骤4:检查定时任务 使用命令查看定时任务列表: ```bash crontab -l ``` 安全建议: 1. 备份脚本中包含了数据库密码,因此要确保备份目录和脚本文件只有授权用户可访问(例如设置700权限)。 2. 可以考虑使用专用备份用户(如引用[5]),并赋予最小权限(SELECT, LOCK TABLES, SHOW VIEW等)。 引用[5]中提供了创建备份用户的SQL语句: ```sql CREATE USER 'mysqldump'@'localhost' IDENTIFIED BY 'strong_password'; GRANT SELECT, LOCK TABLES, SHOW VIEW, PROCESS ON *.* TO 'mysqldump'@'localhost'; FLUSH PRIVILEGES; ``` 然后在脚本中使用这个专用用户进行备份。 这样,我们就配置好了Linux定时自动备份MySQL数据库的任务。 相关问题: 1. 如何验证MySQL备份文件的有效性? 2. 除了mysqldump,还有哪些MySQL备份方式? 3. 如何将备份文件自动上传到远程服务器或云存储?</think>### Linux下配置MySQL数据库定时自动备份教程 #### 步骤1:创建备份脚本 在服务器上创建备份脚本(如`/home/backup.sh`),内容如下: ```bash #!/bin/bash # MySQL连接配置 MYSQL_USER="backup_user" # 替换为备份专用用户 MYSQL_PASSWORD="your_password" # 替换为实际密码 MYSQL_SOCKET="/var/run/mysqld/mysqld.sock" # 根据实际路径修改 # 备份目录配置 BACKUP_DIR="/data/mysql_backups" DATE=$(date +%Y%m%d%H%M) # 格式:年月日时分 DATABASES=("db1" "db2") # 需要备份的数据库列表 # 创建备份目录 mkdir -p $BACKUP_DIR echo "★ 备份开始 [$DATE] ★" for DB in ${DATABASES[@]}; do BACKUP_FILE="$BACKUP_DIR/${DB}_${DATE}.sql.gz" mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --socket=$MYSQL_SOCKET \ --single-transaction --routines --triggers $DB | gzip > $BACKUP_FILE echo "数据库 $DB → $BACKUP_FILE" done # 删除7天前的旧备份 find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -exec rm -f {} \; echo "★ 备份完成 ★" ``` > **关键参数说明**: > - `--single-transaction`:保证备份一致性 > - `--routines --triggers`:备份存储过程和触发器 > - `gzip`:压缩备份文件节省空间 > - `-mtime +7`:自动清理7天前的旧备份[^3][^5] #### 步骤2:配置备份专用用户(推荐) ```sql -- 创建专用备份用户 CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT SELECT, LOCK TABLES, SHOW VIEW, PROCESS ON *.* TO 'backup_user'@'localhost'; FLUSH PRIVILEGES; ``` > **权限说明**:仅授予备份所需的最小权限[^5] #### 步骤3:设置脚本权限 ```bash chmod +x /home/backup.sh # 添加执行权限 chmod 700 /home/backup.sh # 限制访问权限 ``` #### 步骤4:配置定时任务 1. 编辑crontab: ```bash crontab -e ``` 2. 添加定时任务(每天凌晨2点执行): ```bash 0 2 * * * /home/backup.sh >> /var/log/mysql_backup.log 2>&1 ``` 3. 查看任务列表: ```bash crontab -l # 应显示添加的任务[^2] ``` #### 步骤5:验证备份 1. 手动测试脚本: ```bash /home/backup.sh ``` 2. 检查备份文件: ```bash ls -lh /data/mysql_backups/ # 输出示例:-rw-r--r-- 1 root root 15M Sep 1 02:00 db1_202309010200.sql.gz ``` ### 常见问题排查 1. **权限错误**: ```bash chown -R mysql:mysql /data/mysql_backups # 确保MySQL用户有写权限 ``` 2. **Socket路径错误**: ```bash find / -name mysql.sock # 查找正确的socket路径 ``` 3. **备份文件为空**: - 检查用户密码是否正确 - 验证`mysqldump`命令能否手动执行 ### 备份策略优化建议 1. **异地备份**:使用`rsync`或`scp`同步到远程服务器 2. **增量备份**:结合`binlog`实现增量备份 3. **通知机制**:添加邮件通知脚本执行结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值