各位用户为了找寻关于讲解Linux系统下如何自动备份MySQL数据的基本教程的资料费劲了很多周折。这里教程网为您整理了关于讲解Linux系统下如何自动备份MySQL数据的基本教程的相关资料,仅供查阅,以下为您介绍关于讲解Linux系统下如何自动备份MySQL数据的基本教程的详细内容
1.先创建一个数据库备份目录:
? 1 2 3 4mkdir
backup
cd
backup
mkdir
mysqlbackup
cd
mysqlbackup
2.创建备份脚本
? 1vi
mysqlautobackup
3.编写脚本:
? 1 2filename=`
date
+%Y%m%d`
/mysql
的bin目录
/mysqldump
--opt 数据库名 -u(mysql账号) -p(mysql密码) |
gzip
> /备份到哪个目录
/name
$filename.gz
说明:以上采用gzip压缩,name可随意写,注意-u与mysql账号之间没有空格也无需括号,-p与mysql密码也是。 4.将脚本设置为可执行权限:
? 1chmod
+x autobackup
5.写入计划任务:
? 1 2crontab
-e
01 01 * * *
/bin/bash
/脚本所在目录
/mysqlautobackup
每天凌晨1点零1分执行脚本。 重启计划任务:
? 1/etc/rc
.d
/init
.d
/crond
restart
至此所有步骤完成。
一些常用技巧 1、创建保存备份文件的路径/mysqldata
? 1#mkdir /mysqldata
2、创建/usr/sbin/baktest文件 输入以下内容:
? 1mysqldump -uroot -proot
test
|
gzip
>
/mysqldata/test
`
date
+%Y-%m-%d_%H%M%S`.sql.gz
3、修改文件属性,使其可以执行
? 1#chmod +x /usr/sbin/baktest
4、修改/etc/crontab 在下面添加
? 101 3 * * * root /usr/sbin/baktest
表示每天3点钟01分执行备份
5、重新启动crond
? 1#/etc/rc.d/init.d/crond restart
完成。
PS: 全备份脚本:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32#!/bin/bash
# Name:qbk全备份脚本
# mysql qbk scripts
# By zxsdw.com
# Last Modify:2015-01-21
#定义脚本存放路径
#scriptsDir=/usr/sbin
#定义用户名及密码
user=root
userPWD=密码
#定义要备份的数据库
database=数据库
#定义完全备份文件存放路径
bakDir=
/backup/mysql
#eMailFile=$bakDir/email.txt
#eMail=admin@zxsdw.com
#定义日志文件
LogFile=$bakDir
/mysqlbak
.log
DATE=`
date
+%Y%m%d`
echo
" "
>> $LogFile
echo
" "
>> $LogFile
echo
"--------------------------"
>> $LogFile
echo
$(
date
+
"%y-%m-%d %H:%M:%S"
) >>$LogFile
echo
"-----------------"
>> $LogFile
cd
$bakDir
DumpFile=$DATE.sql.gz
mysqldump --flush-logs -u$user -p$userPWD --quick $database|
gzip
>$DumpFile
echo
"Dump Done"
>> $LogFile
echo
"[$DumpFile]Backup Success!"
>> $LogFile
daily_databakDir=$bakDir
/daily_backup
cd
$bakDir
/daily_backup
find
$daily_databakDir -name
"daily*"
-
type
f -mtime +35 -
exec
rm
{} ; >
/dev/null
2>&1
增量备份脚本
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81#!/bin/bash
# Name:zbk增量备份
# mysql zbk scripts
# By zxsdw.com
# Last modify:2015-01-21
#定义数据库用户名及密码
user=root
userPWD=密码
#定义数据库
database=数据库
#生成一个新的mysql-bin.00000X文件,如果err日志被清除,则自动新建一个。
/usr/local/mysql/bin/mysqladmin
-u$user -p$userPWD flush-logs
#定义增量备份位置
daily_databakDir=
/backup/mysql/daily_backup
#定义MYSQL数据日志目录
mysqlDataDir=
/usr/local/mysql/var
#定义增量日志及目录
eMailFile=$daily_databakDir
/email
.txt
#eMail=admin@zxsdw.com
#定义变量DATE格式为20150127
DATE=`
date
+%Y%m%d`
#定义一个总的logFile日志
logFile=$daily_databakDir
/mysql
$DATE.log
#美化日志模板
echo
" "
> $eMailFile
echo
"-----------------------"
>> $eMailFile
#时间格式为15-01-27 01:06:17
echo
$(
date
+
"%y-%m-%d %H:%M:%S"
) >> $eMailFile
echo
"-------------------------"
>> $eMailFile
#定义删除bin日志的时间范围,格式为20150124010540
TIME=$(
date
"-d 3 day ago"
+%Y%m%d%H%M%S)
#定义需要增量备份数据的时间范围,格式为2015-01-26 01:04:11
StartTime=$(
date
"-d 1 day ago"
+
"%Y-%m-%d %H:%M:%S"
)
###########开始删除操作美化日志标题##############
echo
"Delete 3 days before the log"
>>$eMailFile
#删除三天前的bin文件,及更新index里的索引记录,美化日志标题
mysql -u$user -p$userPWD -e
"purge master logs before ${TIME}"
&&
echo
"delete 3 days before log"
|
tee
-a $eMailFile
#查找index索引里的bin 2进制文件并赋值给 i。
filename=`
cat
$mysqlDataDir
/mysql-bin
.index |
awk
-F
"/"
'{print $2}'
`
for
i
in
$filename
do
#########开始增量备份操作,美化日志标题###########
echo
"$StartTime start backup binlog"
>> $eMailFile
#利用mysqlbinlog备份1天前增加的数据,并gzip压缩打包到增量备份目录
/usr/local/mysql/bin/mysqlbinlog
-u$user -p$userPWD -d $database --start-datetime=
"$StartTime"
$mysqlDataDir/$i |
gzip
>> $daily_databakDir
/daily
$DATE.sql.gz |
tee
-a $eMailFile
done
#如果以上备份脚本执行成功,接着运行下面的删除脚本
if
[ $? = 0 ]
then
# 删除mtime>32的增量日志备份文件
find
$daily_databakDir -name
"*.log"
-
type
f -mtime +32 -
exec
rm
{} ; >
/dev/null
2>&1
cd
$daily_databakDir
echo
"Daily backup succeed"
>> $eMailFile
else
echo
"Daily backup fail"
>> $eMailFile
#mail -s "MySQL Backup" $eMail < $eMailFile #备份失败之后发送邮件通知
#fi结束IF判断
fi
#把变量eMailFile的内容替换logFile内容
cat
$eMailFile > $logFile
#如果上面的IF判断失败,再次运行删除mtime>32的增量日志备份文件
find
$daily_databakDir -name
"*.log"
-
type
f -mtime +32 -
exec
rm
{} ; >
/dev/null
2>&1
rsync
-vzrtopg --delete --progress --password-
file
=
/usr/local/rsync/rsync
.
passwd
root@$ip:
/zxs/allimg/
$(
date
-d -1day +%y%m%d)
/zxs/allimg/
gunzip <
/backup/mysql/daily_backup/ceshi
.sql.gz |
/usr/local/mysql/bin/mysql
-u用户名 -p密码 数据库名 --force
--force参数 忽略错误