首页 > 开发 > Mysql > 正文

小型Drupal数据库备份以及大型站点MySQL备份策略分享

2019-10-19 15:36:29
字体:
来源:转载
供稿:网友
为了防止web服务器出现故障而引起的数据丢失,数据库备份显得非常重要,以免出现重大损失。本文分析研究一下小型的Drupal站的备份策略以及大型站点的mysql备份策略
 
 

中小站点简单备份策略

基于drupal的中小行网站,我们可以使用backup_migrate模块,该模块提供了定期备份的功能,备份的时间、保留多少个备份等等设置,设置好之后,定期执行cron即可备份成功。 一般的Drupal小站,我们只需使用svn即可,在服务器端,我们把备份好的数据提交到svn,就可以达到备份的目的。由于Drupal的备份模块可以设置备份保留的文件份数,因此不会造成太多的备份文件,从而导致svn很大。

下面是一个简单的备份脚本,放置到站点根目录,然后加到crontab每天执行即可。
 

  1. #!/bin/bash 
  2.    
  3. date #start date 
  4. DRUSH_PHP=/bin/php #php path 
  5. export DRUSH_PHP 
  6.    
  7. drush cron 
  8. svn st sites/default/files/backup_migrate/scheduled/ | grep '^!' | awk '{print $2}' | xargs svn delete --force 
  9. svn add sites/default/files/backup_migrate/scheduled/* 
  10. svn ci sites/default/files/backup_migrate/scheduled/ -m 'add backup files' 
  11. date #end date 
crontab的设置如下

 

复制代码代码如下:

0  0 * * * cd /www/web/html/ && bash cron.sh > cron.log 2>&1

 

大型站点MySQL备份策略

如果是数据库稍大的站点,使用svn临时备份就略显单薄,这时需要使用MySQL备份策略,一般情况下我们需要把整个数据库都备份压缩,然后定期转移到备份数据库或者放到其他的云服务器,这里给出一个简单的PHP示例代码。
 

  1. #!/usr/bin/php -q 
  2. <?php 
  3.    
  4. $to = "gaoxinzhao@gmail.com"; 
  5. $hostname = exec('/bin/hostname'); 
  6. $mycnf = "/home/robbin/.my.cnf"; 
  7.    
  8. $ignore = array('information_schema', 'test', 'mysql', 'wdcpdb'); 
  9.    
  10. function trimw($str) { 
  11.  $str = str_replace(array("n", "r", "t", " ", "o", "xOB"), '', $str); 
  12.  return $str; 
  13.    
  14. if (!file_exists($mycnf)) { 
  15.  mail($to, "No .my.cnf exists on $hostname", "MySQL cannot dump because .my.cnf is missing on $hostname .") ; 
  16.  exit("cant get user creds"); 
  17.    
  18. $myconf = file_get_contents($mycnf) or die( "Failed to open bmesh_admin's .my.cnf" ); 
  19.    
  20. preg_match( "/buser(.*)/", $myconf, $matches ) or die( mail($to, "No username in .my.cnf on $hostname", "MySQL cannot dump on $hostname")); 
  21.    
  22. $usr = (explode('=', $matches[0])); 
  23. $user = trimw($usr[1]); 
  24.    
  25. preg_match( "/bpassword(.*)/", $myconf, $matches ) or die( mail($to, "No password in .my.cnf on $hostname", "MySQL cannot dump on $hostname")); 
  26.    
  27. $pass = (explode('=', $matches[0])); 
  28. $password = trimw($pass[1]); 
  29.    
  30. mysql_connect("localhost",$user,$password) or die ("could not connect: " . mysql_error()); 
  31. mysql_select_db("mysql"); 
  32. $result = mysql_query("show databases"); 
  33.    
  34. $bpath = "/home/robbin/backup/mysql"; 
  35. $btime = date("Y-m-d H:i:s"); 
  36. $bstamp = strtotime($btime); 
  37. $byear = date("Y", $bstamp); 
  38. $bmonth = date("m", $bstamp); 
  39. $bday  = date("d", $bstamp); 
  40. $btod  = date("H-i-s", $bstamp); 
  41.    
  42. while ($res = mysql_fetch_array($result)) 
  43.     $myDb = $res["Database"]; 
  44.     if (in_array($myDb, $ignore)) continue; 
  45.     $mdir = "$bpath/$byear/$bmonth/$bday/$btod/$myDb"; 
  46.     $out = `mkdir -p $mdir`; 
  47.     $myFile = $myDb . ".sql"; 
  48.     $bldCmd = "cd $mdir ; "; 
  49.     $bldCmd .= "mysqldump -u$user -p$password --single-transaction --add-drop-table -R -c -Q $myDb > $myFile ;"; 
  50.     //$bldCmd .= "chmod 644 $myFile ; "; 
  51.     //$bldCmd .= "chown root:root $myFile ; "; 
  52.     $bldCmd .= "gzip -9 $myFile"; 
  53.     print "Backing up $myDbn"; 
  54.     print "Securing $myDbn"; 
  55.     $out = `$bldCmd`; 
  56. $out = `chmod 700 $bpath/$byear`; 
  57. print "$outn"; 
  58. print "Backups are in $bpathn"; 
crontab的设置

 

复制代码代码如下:

0 1 * * * /home/robbin/bin/mysql_backup.php

 

此外我们需要把备份的数据还要定期传送到其他服务器上,才会避免服务器崩溃而引发数据丢失。备份及时网站才有保证,这里仅仅只是笔者的一点点操作分享,大家有更好的备份策略,欢迎共享。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表