Linux系统设置自动备份mysql数据库

本文介绍了一种在Linux环境下,使用Crontab和Bash脚本实现MySQL数据库自动备份的方法。通过创建备份脚本,设置定时任务,实现数据库的定期备份及数据压缩,确保数据安全。

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

写在前面:

为了保证数据库容灾性,定期对数据库数据进行备份是十分重要的。

备份数据的基本思路是将数据库中的数据导出保存到其他位置,每隔一段时间便进行一次导出,以保证数据的完整。为了让数据能够定期保存,利用Linux的Crontab自动执行Bash脚本以达到自动备份的要求。


第一步:选择位置创建数据保存的文件夹

选择指定位置创建文件夹mysqlbackup文件夹

cd ~
mkdir mysqlbackup

 然后创建保存数据和保存日志的文件夹,并对当前用户进行授权。

#进入 mysqlback 文件夹
cd mysqlback

#创建备份数据文件夹
mkdir backup_data

#创建备份日志文件夹
mkdir backup_logs

#对当前用户授予对文件夹的写入权限
sudo chmod u+w backup_data
sudo chmod u+w backup_logs

第二步:编写Bash脚本

vim mysqlbackup.sh
#!/bin/bash
#数据库用户名
dbuser='root'
#数据库用密码
dbpasswd='root'
#需要备份的数据库,多个数据库用空格分隔
dbname='TestData'
#备份时间
backtime="$(date "+%Y%m%d%H%M%S")"
#日志备份路径
logpath='/root/mysqlbackup/backup_logs'
#数据备份路径
datapath='/root/mysqlbackup/backup_data'
#备份数据
mysqldump -u ${dbuser} -p${dbpasswd} ${dbname} > "${datapath}/${dbname}"-"${backtime}.sql" 2>> ${logpath}/mysqllog.log;
#若备份成功则进行进行数据压缩
if [ "$?" == 0 ];then
cd $datapath
#将数据压缩节省存储空间
tar jcf "${dbname}"-"${table}"-"${backtime}.tar.bz2" "${dbname}"-"${backtime}.sql" > /dev/null
#删除原始文件,只留压缩后文件
rm -f "${datapath}/${dbname}"-"${backtime}.sql"
#删除七天前备份,也就是只保存7天内的备份
find $datapath -name "*.tar.bz2" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo ${backtime}-"数据库 ${dbname} 备份成功!!" >> ${logpath}/mysqllog.log
else
#否则,备份失败则进行以下操作
echo ${backtime}-"数据库 ${dbname} 备份失败!!" >> ${logpath}/mysqllog.log
fi

脚本编辑完成后,先执行脚本测试是否能够成功运行

./mysqlbackup.sh

若正常执行,则控制台无信息输出,在 backup_data 和 backup_logs 文件夹中可查看到 tar.bz2 和 log 文件

第三步:设置Crontab进行定期执行

# 设置定制指令
crontab -e

# 设置每5分钟执行一次备份脚本
*/5 * * * * /root/mysqlbackup.sh

# 重启cron服务
service cron restart

有时候会出现 service 指令无效的情况,则需要通过指定程序的方式重启

# 停止crontab
/etc/init.d/cron stop

# 启动crontab
/etc/init.d/cron start

打开当前用户的crontab表,编辑格式可参考/etc/crontab中的格式。

 下图为来自百度百科的Crontab文件格式说明:

在此给出几例子:

# 每分钟执行一次a.sh
*/1 * * * * bash a.sh

# 每两小时重启一次apache
0 */2 * * * /sbin/service httpd restart

# 每天7:50执行一次a.sh
50 7 * * 8 bash a.sh

 

附:

1、查看CronTab日志

sudo cat /var/log/cron

 2、Chmod

语法:

chmod [-cfvR] [--help] [--version] mode file...

参数说明:

mode : 权限设定字串,格式如下 :

[ugoa...][[+-=][rwxX]...][,...]

其中:

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
  • + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

  • -c : 若该文件权限确实已经更改,才显示其更改动作
  • -f : 若该文件权限无法被更改也不要显示错误讯息
  • -v : 显示权限变更的详细资料
  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
  • --help : 显示辅助说明
  • --version : 显示版本

3、在MySQL中创建备份用户和调整配置

通过查看备份日志可以发现,MySQL提醒直接将帐号的密码写在指令中是不安全的,而且在此还是使用的root帐号,因此最好创建一个只有备份数据权限的帐号,并配置保存帐号和密码进行备份,以此保证数据安全。

# 创建帐号
create user 'backup'@'localhost' identified by 'backup';

# 授权
grant select,show view,lock tables,trigger on testdb.* to 'backup'@'localhost';

修改 /etc/mysql/my.cnf 文件

# 追加
[mysqldump]
user=backup
password=backup

 写在最后:

在Centos和Ubuntu系统下都有测试过,这个方式都可以使用,Bash脚本参考https://blog.youkuaiyun.com/lwwl12/article/details/83214651

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值