数据库数据在软件系统中占有重要地位,为避免数据丢失后无法恢复,需要定时备份。
mysql备份命令
mysql
自带mysqldump
命令,用于执行数据库备份。
使用以下命令备份数据。注意-p
和密码之间没有空格。
mysqldump -u root -pmy_password db_name > back_name.sql
但是直接在脚本中使用密码,存在泄露风险。所以推荐使用以下方式,把密码保存在数据库配置文件my.cnf
中,mysqldump
通过读取配置文件来获取密码。这样就避免了脚本中密码的泄露风险。
我的linux
服务器上数据库配置文件位于/etc/my.cnf
,打开后,添加以下密码配置。注意[client]
不可缺少,如果文件中没有的话,必须添加。然后,修改配置文件权限为可读。
# 添加到配置文件/etc/my.cnf
[client]
password="my_password"
# 修改配置文件权限为可读
chmod 600 /etc/my.cnf
之后再使用mysqldump
命令时,如下所示:
mysqldump --defaults-file=/etc/my.cnf db_name > back_name.sql
shell脚本执行mysql备份命令
创建/root/dump
目录,在目录中添加dump_mysql.sh
文件,添加以下代码:
# 将要备份的数据库
database_name=my_db_name
# 保存备份文件最多个数
count=15
# 备份保存路径
backup_path=/root/dump
# 日期: 2021-06-01-15-57
date_time=`date +%Y-%m-%d-%H-%M`
# 备份文件
target_file=$backup_path/$database_name-$date_time.sql
# 开始备份
mysqldump --defaults-file=/etc/my.cnf $database_name > $target_file
# 开始压缩,压缩后体积降为原有的三分之一
cd $backup_path
tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql
# 删除源文件
rm -rf $target_file
# 更新备份日志
echo "create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log
# 找出列表中第1个文件作为待删除的备份,
# -crt $backup_path/*.tar.gz 是正则匹配,且以时间排序
# $9是ls -l打印结果的第9列,head -1是取列表的第1项
delfile=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | head -1`
# 判断现在的备份数量是否大于阈值,wc -l 是统计列表长度
number=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | wc -l`
if [ $number -gt $count ]
then
# 删除最早生成的备份,只保留count数量的备份
rm $delfile
# 更新删除文件日志
echo "delete $delfile" >> $backup_path/dump.log
fi
然后修改脚本权限,使其可执行。
chmod +x dump_mysql.sh
# 执行备份
./dump_mysql.sh
定时执行shell备份脚本
linux
系统自带有crontab
命令,用于添加自动执行任务。
crontab -l # 查看已添加自动执行任务
crontab -e # 添加自动执行任务
执行crontab -e
后,添加以下配置并保存,即成功添加执行任务
# 前5个参数表示自动执行时间,分别代表分、时、日、月、周,最后一个参数表示待执行的脚本
# *表示每
00 03 * * * /root/dump/dump_mysql.sh
网友评论