MySQL 数据库定时自动备份

创建备份目录

cd /home
mkdir backup
cd backup

创建备份 Shell 脚本:

vim DatabaseName.sh

#!/bin/bash
/usr/local/mysql/bin/mysqldump -uusername -ppassword DatabaseName > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql

对备份进行压缩:

#!/bin/bash
/usr/local/mysql/bin/mysqldump -uusername -ppassword DatabaseName | gzip > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz

注意: 
把 username 替换为实际的用户名; 
把 password 替换为实际的密码; 
把 DatabaseName 替换为实际的数据库名;

添加可执行权限

chmod u+x DatabaseName.sh

添加计划任务

crontab -e
01   3 * * * root/home/backup/DatabaseName.sh

表示每天 3 点钟执行备份

Crontab 的格式

第 1 列分钟 1~59
第 2 列小时 1~23(0 表示子夜)
第 3 列日 1~31
第 4 列月 1~12
第 5 列星期 0~6(0 表示星期天)
第 6 列要运行的命令

下面是 crontab 的格式:
分 时 日 月 星期 要运行的命令

这里有 crontab 文件条目的一些例子:

30 21 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示每晚的 21:30 重启 apache。

45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart
上面的例子表示每月 1、10、22 日的 4 : 45 重启 apache。

10 1 * * 6,0 /usr/local/apache/bin/apachectl restart
上面的例子表示每周六、周日的 1 : 10 重启 apache。

0,30 18-23 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示在每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 apache。

0 23 * * 6 /usr/local/apache/bin/apachectl restart
上面的例子表示每星期六的 11 : 00 pm 重启 apache。

0 */1 * * * /usr/local/apache/bin/apachectl restart
每一小时重启 apache

#20160912 修正,感谢 @张琼的指正,之前写错了,*/1 和 * 表示的同样的意思,对于 / 的用法,可以参考另一篇文章 Crontab 中的除号到底怎么用?

0 23-7/1 * * * /usr/local/apache/bin/apachectl restart
晚上 11 点到早上 7 点之间,每隔一小时重启 apache

0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart
每月的 4 号与每周一到周三的 11 点重启 apache

0 4 1 jan * /usr/local/apache/bin/apachectl restart
一月一号的 4 点重启 apache

 使用Xtrabackup工具进行备份

#!/bin/bash
# file_name: /data/mysql/mysql3306/backup/scripts/full_xtrabackup.sh
#
#################################################
#
#
# CREATE USER 'puser'@'localhost' IDENTIFIED BY 'bak209vbv';
# GRANT BACKUP_ADMIN,SELECT, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT,SHOW VIEW ON *.* TO 'puser'@'localhost';
# FLUSH PRIVILEGES;
# mkdir -p /data/backup/logs/ ; mkdir -p /data/backup/full_bak/
# 0 1 * * * /data/mysql/mysql3306/backup/scripts/full_xtrabackup.sh &>/dev/null

. /etc/init.d/functions
Date_Time=`date +%Y%m%d%H%M%S`
Date_Day=`date +%Y%m%d`
Target_Dir="/data/mysql/mysql3306/backup/"
User_Name="puser"
Pass_Word="bak209vbv"
Port_MySQL="3306"
Xtrabackup_Cmd="/usr/bin/xtrabackup"
Compress_Threads="8"
Parallel_Num='8'
Use_Memory="4G"
My_Conf="/etc/my.cnf"
Log_File_Dir="${Target_Dir}/logs/"
Log_File="${Target_Dir}/logs/full_bak_3306_${Date_Day}"
Count_Day="1"

# 全备份
function Full_Backup(){
    "${Xtrabackup_Cmd}" --defaults-file="${My_Conf}" --user="${User_Name}" --password="${Pass_Word}" --port="${Port_MySQL}" --backup --compress --compress-threads="${Parallel_Num}" --use-memo
ry="${Use_Memory}" --slave-info --parallel="${Parallel_Num}" --target-dir="${Target_Dir}"full_bak_"${Date_Time}"/ &>>"${Log_File}".log
  
}

# 删除旧文件,保留最近n天的文件
function Delete_Files(){
    find "${Target_Dir}" -type d -mtime  +"${Count_Day}" -name "full_bak*" -exec rm -rf  {} \;
    find "${Log_File_Dir}" -type f -mtime  +90 -name "full_bak_*.log" -exec rm -rf  {} \;
}

Full_Backup
Delete_Files

 

参考链接:https://mp.weixin.qq.com/s?__biz=MzA3OTgyMDcwNg==&mid=2650631459&idx=1&sn=63479c55ea99b9db09e40696373721c4&chksm=87a46feeb0d3e6f8c3562a314c962760a52c5064599791fa00976f21a91348724854325a1a5d&mpshare=1&scene=23&srcid=0823Ts1Ic9kGVSPzTLjLPPUR#rd  

  

  

  

  

posted @ 2017-08-24 09:39  梦徒  阅读(8997)  评论(0)    收藏  举报