背景:
系统最重要的东西就是数据,系统上的所有操作其实都可以归结为对数据的操作。而数据在服务器上是比较脆弱的,任何误操作或者入侵,可能都导致数据丢失。为了降低损失,可以进行每天的数据备份。
方法概述
- 使用mysqldump命令编写备份脚本;
- 使用crontab定时执行备份脚本。
编写备份脚本:
#!/bin/bash
# 定义属性
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
MYSQL_USER="root"
MYSQL_PASSWORD="root"
BACKUP=/opt/backup_mysql
DATETIME=$(date +%Y%m%d%H%M%S)
# 打印日志
function log_correct () {
USER=$(whoami)
echo "${DATETIME} ${USER} execute $0 [INFO] $@ " >> "/home/shell/backup_log.txt"
}
log_correct "开始执行 Mysql 备份任务"
# 自动获得所有的数据库
# 如果机器中没有加入 MySQL 环境,请将下面的 mysql 改为 mysql 文件的全路径
DATABASES=`mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e "SHOW DATABASES;"`
# 创建备份目录
mkdir -p "${BACKUP}/$DATETIME"
for db in $DATABASES; do
# 排除表头和一些无需备份的数据库
if [[ "$db" != "Database" ]] && [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != "sys" ]] ; then
# 备份操作
# 如果机器中没有加入 MySQL 环境,请将下面的 mysqldump 改为 mysqldump 文件的全路径
log_correct "备份: 【$db】"
mysqldump -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} --databases $db > ${BACKUP}/$DATETIME/$db.sql
log_correct "数据库【$db】已备份到:${BACKUP}/$DATETIME/$db.sql 下"
fi
done
# 删除7天前的文件
find $BACKUP -type f -mtime +7 -exec rm -f {} \;
log_correct "完成 Mysql 备份任务"
测试脚本
- Linux上直接运行脚本
./backup_mysql.sh
2.报-bash: ./backup_mysql.sh: Permission denied
# 修改脚本权限
chmod 777 backup_mysql.sh
3.报mysqldump: command not found
# 1.寻找mysqldump
find / -name mysqldump
# 2.建立软连接(/usr/local/mysql/bin/mysqldump 是上一步的结果)
ln -s /usr/local/mysql/bin/mysqldump /usr/bin
定时执行脚本:
设置定时执行脚本(每天 00:00 执行脚本)
#1. 以编辑模式打开个人的crontab配置文件
crontab –e
#2. 加入一下这行:
0 0 * * * /home/shell/XXXXXXXX.sh
#3. 重载配置
service crond reload
crontab说明
1. Crontab服务相关命令
service crond status //查看crond状态
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
2. 如果系统没有安装,则安装
yum install vixie-cron
yum install crontabs
3. crontab命令选项
# 修改 crontab 文件. 如果文件不存在会自动创建
crontab –e
# 显示 crontab 文件
crontab –l
# 删除 crontab 文件
crontab -r
# 删除 crontab 文件前提醒用户
crontab -ir
4. crontab定时设置
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
-- minute: 区间为 0 – 59
-- hour: 区间为0 – 23
-- day-of-month: 区间为0 – 31
-- month: 区间为1 – 12. 1 是1月. 12是12月.
-- Day-of-week: 区间为0 – 7. 周日可以是0或7.