1、脚本功能
日常开发中会有很多场景需要我们去备份系统的配置文件、日志数据等等,本脚本可以定时备份linux的某个文件夹。自动删除X天前的备份数据,灰常的好用。
[root@backup syslog]# more syslog.sh
#!/bin/bash
#bakup system logs
yesterday=`date -d -1day +%Y-%m-%d`
cat /backup/syslos/ip.txt|grep -v ^#|while read ip;
do
log_dir=`echo $ip|awk '{print $1}'`
if [ ! -d "/backup/syslog/$log_dir/$yesterday" ];then
mkdir -p /backup/syslog/$log_dir/$yesterday
fi
rsync -avz -e ssh root@$ip:/var/log/messages /backup/syslog/$log_dir/$yesterday
rsync -avz -e ssh root@$ip:/var/log/secure /backup/syslog/$log_dir/$yesterday
rsync -avz -e ssh root@$ip:/var/log/boot.log /backup/syslog/$log_dir/$yesterday
rsync -avz -e ssh root@$ip:/var/log/cron /backup/syslog/$log_dir/$yesterday
rsync -avz -e ssh root@$ip:/var/log/lastlog /backup/syslog/$log_dir/$yesterday
rsync -avz -e ssh root@$ip:/var/log/audit/audit.log /backup/syslog/$log_dir/$yesterday
cd /backup/syslogs/$log_dir/$yesterday && tar -zcvf syslog.tar.gz .
find . -type f -not -name '*.tar.gz' -exec rm -f {} +
done
find /backup/syslogs/ -type f -name "*.tar.gz" -mtime +90 -exec rm -f {} \;
2、定时执行
通过linux自带的corntab来实现脚本的定时备份,这里我们定义每天0点备份一次日志
0 0 * * * cd /backup/syslog && bash syslog.sh
3、MySql数据库备份脚本
#数据库备份脚本
#!/bin/bash
#备份目录
backup_dir="/data/mysqlbackup"
#目录不在则创建
[ ! -d /mysqlbackup ] && mkdir /data/mysqlbackup
# MySQL 用户名和密码
mysql_username="your_username" #用户名
mysql_password="your_password" #密码
# 备份名称前缀
backup_prefix="nlpt"
# 当前日期
current_date=$(date +%Y-%m-%d)
# 备份文件名
backup_file="${backup_prefix}-${current_date}.sql"
# 压缩文件名
compressed_file="${backup_prefix}-${current_date}.tar.gz"
# 备份数据库
mysqldump -u $mysql_username -p${mysql_password} --all-databases > "${backup_dir}/${backup_file}"
# 压缩备份文件
tar -czvf "${backup_dir}/${compressed_file}" "${backup_dir}/${backup_file}"
# 删除原始备份文件
rm "${backup_dir}/${backup_file}"
# 删除30天前的备份文件
find $backup_dir -name $backup_file -type f -mtime +30 -exec rm {} \;
这个脚本可以在 Linux 上运行。它从 MySQL 中备份所有数据库,并将备份命名为以“backup-YYYY-MM-DD”格式命名的文件。备份文件将被压缩为以“backup-YYYY-MM-DD.tar.gz”命名的文件。备份文件和压缩文件将保存在指定的备份目录中。脚本将删除 30 天前的备份文件,以保持备份目录的清洁和整洁。在使用此脚本前,请将“your_username”和“your_password”替换为实际的 MySQL 用户名和密码。
以上基于业务停止运行,数据库在没有数据写入的情况下进行备份,但在我们日常工作中不能停掉业务后进行数据库备份,因此需要添加参数:
--single-transaction
即使数据库受到恶意攻击或不可预见的技术故障,也可以通过备份迅速恢复数据。在发生硬件故障、软件错误或人为错误导致数据损坏时,可以使用备份来恢复到故障前的状态,确保业务流程不受影响。