且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MYSQL数据库自动本地/异地双备份/MYSQL增量备份[连载之构建百万访问量电子商务网站]

更新时间:2022-08-13 23:09:05

MYSQL数据库自动本地/异地双备份/MYSQL增量备份[连载之构建百万访问量电子商务网站]
出处:http://jimmyli.blog.51cto.com/ 我站在巨人肩膀上Jimmy Li
作者:Jimmy Li
关键词:网站,电子商务,Shell,自动备份,异地备份
------[连载之电子商务系统架构]访问量超过100万的电子商务网站技术架构
连接:
http://jimmyli.blog.51cto.com/3190309/676378 访问量超过100万的电子商务网站技术架构
构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图
MYSQL数据库自动本地/异地双备份/MYSQL增量备份[连载之构建百万访问量电子商务网站]
 
 
   继续介绍Linux服务器文件备份,数据库备份,数据安全存储相关的电子商务系统架构。针对安全性有多种多样的解决方案,其中数据备份是重中之重的首要工作。
电子商务网站更加注重考虑数据安全,数据备份方案,包括本地备份、异地备份架构。其中Linux服务器的备份方案非常多,本文介绍一个大众化适用的解决方案,通过编写Shell脚本来完成自动备份。本架构包括备份网站文件、数据库,自动本地备份并FTP上传备份脚本,完成相应本地备份、异地备份,实现双层备份解决方案。
 
本文要点:
 
1.MYSQL数据库自动本地/异地双备份/MYSQL数据库增量备份。
2.编写Shell脚本来完成自动MYSQL备份、MYSQL数据库增量备份。
3.同时进行自动本地/异地双备份,FTP上传备份。
4.Linux服务器的备份解决方案。
5.Shell脚本包括备份网站文件,网站程序文件、数据文件,MYSQL数据库。
6.定期定时自动完成备份。定期删除旧备份,这里是自动删除30天前备份,复用利用备份空间。
 
目录:
 
一、准备工作
二、网站运维异地备份方案及故障应急备用镜像站架构图
三、网站MYSQL数据库自动本地/异地双备份/MYSQL数据库增量备份Shell脚本,完整的实例;备份脚本进行详细解说,注释。
 

在运营中的电子商务网站,建站之初就一直在重申一定要备份好自己的数据,因为太多的不确定性可能会造成数据库丢失,而且大部分基础服务商也不可能提供每天备份数据。原来本BLOG提供过一个备份方法,介绍了Shell脚本MYSQL数据库自动备份,没有介绍MYSQL数据库增量备份。今天分享一个自己的备份脚本。
参考之前的文章 
http://jimmyli.blog.51cto.com/3190309/691069 《构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)[连载之电子商务系统架构]》
 
一、准备工作:
 
Linux服务器安装好lftp,另外需要提前在Linux服务器上创建/home/backup/ 备份目录建立。并且保证FTP能正常使用账户密码登陆上次文件。既是保证FTP服务正常提供服务。

二、网站运维异地备份方案及故障应急备用镜像站架构图

 

 


三、网站MYSQL数据库自动本地/异地双备份/MYSQL数据库增量备份Shell脚本

 

 

 
脚本二:
MYSQL数据库增量备份Shell脚本
如果数据库数据量比较大,可以一天全备一次, 再每隔一小时增量备份一次;
建立增量备份目录
增量备份的文件放在/backup/mysql/daily目录下。
增量备份的数据量比较小,但是要在完整备份的基础上操作。
 
增量备份使用bin log,脚本如下:
Shell
  1. #!/bin/sh
  2. # mysql data backup script
  3. # use mysqldump --help,get more detail.
  4. #Author: Jimmy Li
  5. #Website: http://jimmyli.blog.51cto.com/
  6. # mysql binlog backup script
  7.  
  8. /usr/bin/mysqladmin flush-logs
  9.  
  10. DATADIR=/var/lib/mysql
  11. BAKDIR=/backup/mysql/daily
  12.  
  13. ###如果mysql bin log你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
  14. HOSTNAME=`uname -n`
  15. cd $DATADIR
  16. FILELIST=`cat $HOSTNAME-bin.index`
  17.  
  18. ## COUNTER number
  19. COUNTER=0
  20. for file in $FILELIST
  21. do
  22. COUNTER=`expr $COUNTER + 1 `
  23. done
  24.  
  25. NextNum=0
  26. for file in  $FILELIST
  27. do
  28. base=`basename $file`
  29. NextNum=`expr $NextNum + 1`
  30. if [ $NextNum -eq $COUNTER ]
  31. then
  32. echo "skip lastest"
  33. else
  34. dest=$BAKDIR/$base
  35. if(test -e $dest)
  36. then
  37. echo "skip exist $base"
  38. else
  39. echo "copying $base"
  40. cp $base $BAKDIR
  41. fi
  42. fi
  43. done
  44.  
  45. echo "backup mysql binlog ok"
  46.  

 
 
脚本解析说明:
增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后一个. 
因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果已经备份过,就不用备份了.
 
温馨提示、增量备份:
每天中午03点和晚上03点做一次全备,每隔一小时备份binlog,也就是增量备份,具体操作如下:
 
Linux下开启binlog
 
将脚本放到/root/ 下面,按上面的注释修改脚本中的参数,使用vim编辑器并保存。
执行:chmod +x /root/backup.sh 为脚本添加执行权限。
执行:crontab -e 添加定时执行。
在crontab中加入:0 3 * * * /root/backup.sh
凌晨3点自动执行/root/bakcup.sh 脚本,备份Linux服务器上的数据并上传到预先设定好的异地FTP上。
选择在凌晨3进行备份,是因为这个时间段网站的访问量是最低。也就是说在很少人访问的情况下做备份操作。
 
出处:http://jimmyli.blog.51cto.com/ Jimmy Li Blog 。欢迎朋友一起交流,讨论。扣扣:柒⑥柒陆叁⑤叁伍

 
MYsql Binlog
  1. /etc/my.cnf中的mysqld部分加入:
  2. [mysqld]
  3. log-bin=../logs/mysql-bin
  4. max-binlog-size=512M
  5.  
  6. windows下开启binlog
  7. %mysql%/my.ini中的mysqld部分加入:
  8. [mysqld]
  9. log-bin =../logs/mysql-bin
  10. max-binlog-size=512M

 

 


脚本一:
网站及数据库自动本地备份并FTP上传备份Shell脚本,完整的实例:
========================================================================
 
Shell
  1. #!/bin/bash
  2. #Funciont: Backup website and mysql database
  3. #Author: Jimmy Li
  4. #Website: http://jimmyli.blog.51cto.com/
  5. #IMPORTANT!!!Please Setting the following Values!
  6. Backup_Dir1=/data/wwwroot/jimmyli.jimmyli.jimmyli.blog.51cto.com
  7. MYSQL_UserName=root
  8. MYSQL_PassWord=你的mysql数据库root密码
  9. Backup_Database_Name1=jimmyli.jimmyli.jimmyli.blog.51cto.com
  10. FTP_HostName=jimmyli.jimmyli.jimmyli.blog.51cto.com
  11. FTP_UserName=jimmyli.jimmyli.jimmyli.blog.51cto.com
  12. FTP_PassWord=jimmyli.jimmyli.jimmyli.blog.51cto.com
  13. FTP_BackupDir=jimmyli.jimmyli.jimmyli.blog.51cto.com
  14. TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
  15. TodayDBBackup=db-*-$(date +"%Y%m%d").sql
  16. OldWWWBackup=www-*-$(date -d -30day +"%Y%m%d").tar.gz
  17. OldDBBackup=db-*-$(date -d -30day +"%Y%m%d").sql
  18. tar zcf /home/backup/www-$Backup_Dir1-$(date +"%Y%m%d").tar.gz -C /home/wwwroot/ $Backup_Dir1 --exclude=soft
  19. /usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 > /home/backup/db-$Backup_Database_Name1-$(date +"%Y%m%d").sql
  20. rm $OldWWWBackup
  21. rm $OldDBBackup
  22. cd /home/backup/
  23. lftp $FTP_HostName -u $FTP_UserName,$FTP_PassWord << EOF
  24. cd $FTP_BackupDir
  25. mrm $OldWWWBackup
  26. mrm $OldDBBackup
  27. mput $TodayWWWBackup
  28. mput $TodayDBBackup
  29. bye
  30. EOF

 
备份脚本进行详细解说,注释参考 http://jimmyli.blog.51cto.com/3190309/691069 《构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)[连载之电子商务系统架构]》
========================================================================
 

 

网站运维异地备份方案及故障应急备用镜像站
MYSQL数据库自动本地/异地双备份/MYSQL增量备份[连载之构建百万访问量电子商务网站]
 
定期检查异地备份故障应急时,启用应急Web服务
连接:http://jimmyli.blog.51cto.com/3190309/584992 网站运维异地备份方案及故障应急备用镜像站




     本文转自jimmy_lixw 51CTO博客,原文链接:http://blog.51cto.com/jimmyli/888630,如需转载请自行联系原作者