CentOS 下利用crontab和shell 实现自动备份数据库

一、单数据库备份,保存至当前服务器

1、写sh执行文件

#!/bin/bash

ymd=$(date  +%Y%m%d)
db_name="wordpress"

mysqldump -uroot -p'password' wordpress >> /home/****/****/${db_name}_${ymd}.sql

echo "$(date +'%Y-%m-%d %T') ${db_name} 备份成功"

 

2、将sh加入定时任务,每天3点自动备份,并且输出日志

0 3 * * * /home/****/****/singDatabase.sh >> /home/****/****/logs/sing_log.log 2>&1

 


二、单或多数据库备份,并发送备份文件到另一台服务器上

#! /bin/bash

# MySql 数据库备份
# ---------------------------------------------------------
# crontab 用法:https://www.zed.kim/2017/11/02/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1/
# ----------------------------------------------------------------------
# 1.ssh-copy-id 储存数据库备份文件的另一个服务器IP
# 例:ssh-copy-id 46.98.190.77 <IP随便乱打的>
# ---------------------------------------------------------

# 系统命令绝对路径
MKDIR="/usr/bin/mkdir"
RM="/usr/bin/rm"
MV="/usr/bin/mv"
GZIP="/usr/bin/gzip"
MYSQLDUMP="/usr/bin/mysqldump"

# 数据库配置
db_user="root"
db_passwd="password"
db_host="127.0.0.1"
# 备份目录
backup_dir="/home/****/****"
# 错误日志文件
error_log="/home/****/****/logs/error_log.log"
# 成功日志文件
success_log="/home/****/****/logs/success_log.log"
# 获取当前时间
time="$(date +"%Y%m%d")"
# 检查备份目录是否可写
test ! -w $backup_dir && echo "Error: ${backup_dir} 不可写." >> ${error_log} 2>&1 && exit 0
# 要备份数据库名称数组
db_array=("dbname" "dbname2")

for db_name in ${db_array[@]}
do
        # 备份文件保存名
        save_name="${backup_dir}/${db_name}_${time}.sql.gz"

        $MYSQLDUMP -u $db_user -h $db_host -p$db_passwd ${db_name} | $GZIP -9 > $save_name

        # 发送备份文件到另一台服务器上
        # scp 更多命令用法:http://www.runoob.com/linux/linux-comm-scp.html
        # -r 递归复制 $save_name 整个目录 然后发送到xx.xx.xx.xx ip 的 xx路径下
        scp -r $save_name 46.98.190.77:/home/****/****

        # $RM -rf $backup_dir/$time.sql.gz
        echo "$(date +'%Y-%m-%d %T') ${db_name} 备份成功 " >> $success_log

done

exit 0;



三、结尾

   项目数据可以说是整个项目的命根子,再稳定再安全的环境下都有可能有出意外都那一天,数据损坏或者丢失该怎么

办?就算排除上面的意外,那谁又能保证不会因为操作失误而导致数据丢失或者异常。千万不要等到那天才想到数据备份

到重要性,到时说什么都迟了。最好是在当前服务器备份一份,再复制一份到另外一个服务器,毕竟有备无患。备份的内

容和定时器执行到频率根据业务情况而定。

发表评论

电子邮件地址不会被公开。 必填项已用*标注