Linux使用Shell脚本定时备份Mysql数据

背景:

系统最重要的东西就是数据,系统上的所有操作其实都可以归结为对数据的操作。而数据在服务器上是比较脆弱的,任何误操作或者入侵,可能都导致数据丢失。为了降低损失,可以进行每天的数据备份。


方法概述

  1. 使用mysqldump命令编写备份脚本;
  2. 使用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 备份任务"


测试脚本 

  1. 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.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你编写一个Shell脚本来实现MySQL数据的增量备份。以下是一个示例脚本: ```shell #!/bin/bash # MySQL数据库连接参数 host="localhost" username="your_username" password="your_password" database="your_database" # 备份路径 backup_dir="/path/to/backup" # 获取当前日期和时间 current_datetime=$(date +%Y-%m-%d_%H-%M-%S) # 创建以当前日期命名的备份文件夹 backup_folder="$backup_dir/$current_datetime" mkdir -p $backup_folder # 备份数据库结构 mysqldump -h $host -u $username -p$password --no-data $database > $backup_folder/$database-structure.sql # 获取上次备份的日志文件路径 last_backup_log="$backup_dir/last_backup.log" # 检查是否存在上次备份的日志文件 if [ -f $last_backup_log ]; then # 读取上次备份的日志文件,获取上次备份的binlog位置 last_binlog=$(cat $last_backup_log) # 备份增量数据到当前备份文件夹 mysqldump -h $host -u $username -p$password --no-create-info --skip-triggers --single-transaction --set-gtid-purged=OFF --where="timestamp >= '$last_binlog'" $database > $backup_folder/$database-incremental.sql fi # 更新上次备份的binlog位置 mysqlbinlog=$(mysql -h $host -u $username -p$password -e "SHOW MASTER STATUS\G" | grep File | awk '{print $2}') echo $mysqlbinlog > $last_backup_log # 打印备份完成消息 echo "MySQL数据增量备份已完成,文件保存在 $backup_folder" ``` 请将 `your_username`、`your_password` 和 `your_database` 替换为你的MySQL连接参数。将 `/path/to/backup` 替换为你想要保存备份文件的目录路径。 这个脚本会创建一个以当前日期和时间命名的文件夹,然后备份数据库的结构和增量数据到该文件夹中。它会使用上次备份的binlog位置来确定增量备份的范围。备份完成后,它会将当前binlog位置保存到一个日志文件中,以便下次备份使用。 你可以将脚本保存为可执行文件(例如 `mysql_backup.sh`),并使用定时任务来自动运行它。请确保在运行脚本之前,已经安装了MySQL客户端工具(mysqldump和mysqlbinlog)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值