小型Drupal数据库备份以及大型站点MySQL备份策略分享
程序员文章站
2024-02-29 23:01:22
中小站点简单备份策略
基于drupal的中小行网站,我们可以使用backup_migrate模块,该模块提供了定期备份的功能,备份的时间、保留多少个备份等等设置,设置好之...
中小站点简单备份策略
基于drupal的中小行网站,我们可以使用backup_migrate模块,该模块提供了定期备份的功能,备份的时间、保留多少个备份等等设置,设置好之后,定期执行cron即可备份成功。 一般的drupal小站,我们只需使用svn即可,在服务器端,我们把备份好的数据提交到svn,就可以达到备份的目的。由于drupal的备份模块可以设置备份保留的文件份数,因此不会造成太多的备份文件,从而导致svn很大。
下面是一个简单的备份脚本,放置到站点根目录,然后加到crontab每天执行即可。
#!/bin/bash date #start date drush_php=/bin/php #php path export drush_php drush cron svn st sites/default/files/backup_migrate/scheduled/ | grep '^!' | awk '{print $2}' | xargs svn delete --force svn add sites/default/files/backup_migrate/scheduled/* svn ci sites/default/files/backup_migrate/scheduled/ -m 'add backup files' date #end date
crontab的设置如下
复制代码 代码如下:
0 0 * * * cd /www/web/html/ && bash cron.sh > cron.log 2>&1
大型站点mysql备份策略
如果是数据库稍大的站点,使用svn临时备份就略显单薄,这时需要使用mysql备份策略,一般情况下我们需要把整个数据库都备份压缩,然后定期转移到备份数据库或者放到其他的云服务器,这里给出一个简单的php示例代码。
#!/usr/bin/php -q <?php $to = "gaoxinzhao@gmail.com"; $hostname = exec('/bin/hostname'); $mycnf = "/home/robbin/.my.cnf"; $ignore = array('information_schema', 'test', 'mysql', 'wdcpdb'); function trimw($str) { $str = str_replace(array("n", "r", "t", " ", "o", "xob"), '', $str); return $str; } if (!file_exists($mycnf)) { mail($to, "no .my.cnf exists on $hostname", "mysql cannot dump because .my.cnf is missing on $hostname .") ; exit("cant get user creds"); } $myconf = file_get_contents($mycnf) or die( "failed to open bmesh_admin's .my.cnf" ); preg_match( "/buser(.*)/", $myconf, $matches ) or die( mail($to, "no username in .my.cnf on $hostname", "mysql cannot dump on $hostname")); $usr = (explode('=', $matches[0])); $user = trimw($usr[1]); preg_match( "/bpassword(.*)/", $myconf, $matches ) or die( mail($to, "no password in .my.cnf on $hostname", "mysql cannot dump on $hostname")); $pass = (explode('=', $matches[0])); $password = trimw($pass[1]); mysql_connect("localhost",$user,$password) or die ("could not connect: " . mysql_error()); mysql_select_db("mysql"); $result = mysql_query("show databases"); $bpath = "/home/robbin/backup/mysql"; $btime = date("y-m-d h:i:s"); $bstamp = strtotime($btime); $byear = date("y", $bstamp); $bmonth = date("m", $bstamp); $bday = date("d", $bstamp); $btod = date("h-i-s", $bstamp); while ($res = mysql_fetch_array($result)) { $mydb = $res["database"]; if (in_array($mydb, $ignore)) continue; $mdir = "$bpath/$byear/$bmonth/$bday/$btod/$mydb"; $out = `mkdir -p $mdir`; $myfile = $mydb . ".sql"; $bldcmd = "cd $mdir ; "; $bldcmd .= "mysqldump -u$user -p$password --single-transaction --add-drop-table -r -c -q $mydb > $myfile ;"; //$bldcmd .= "chmod 644 $myfile ; "; //$bldcmd .= "chown root:root $myfile ; "; $bldcmd .= "gzip -9 $myfile"; print "backing up $mydbn"; print "securing $mydbn"; $out = `$bldcmd`; } $out = `chmod 700 $bpath/$byear`; print "$outn"; print "backups are in $bpathn";
crontab的设置
复制代码 代码如下:
0 1 * * * /home/robbin/bin/mysql_backup.php
此外我们需要把备份的数据还要定期传送到其他服务器上,才会避免服务器崩溃而引发数据丢失。备份及时网站才有保证,这里仅仅只是笔者的一点点操作分享,大家有更好的备份策略,欢迎共享。
上一篇: Monkeyrunner 常用按键总结