各位用户为了找寻关于小型Drupal数据库备份以及大型站点MySQL备份策略分享的资料费劲了很多周折。这里教程网为您整理了关于小型Drupal数据库备份以及大型站点MySQL备份策略分享的相关资料,仅供查阅,以下为您介绍关于小型Drupal数据库备份以及大型站点MySQL备份策略分享的详细内容
中小站点简单备份策略
基于drupal的中小行网站,我们可以使用backup_migrate模块,该模块提供了定期备份的功能,备份的时间、保留多少个备份等等设置,设置好之后,定期执行cron即可备份成功。 一般的Drupal小站,我们只需使用svn即可,在服务器端,我们把备份好的数据提交到svn,就可以达到备份的目的。由于Drupal的备份模块可以设置备份保留的文件份数,因此不会造成太多的备份文件,从而导致svn很大。
下面是一个简单的备份脚本,放置到站点根目录,然后加到crontab每天执行即可。
? 1 2 3 4 5 6 7 8 9 10 11#!/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示例代码。
? 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#!/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
此外我们需要把备份的数据还要定期传送到其他服务器上,才会避免服务器崩溃而引发数据丢失。备份及时网站才有保证,这里仅仅只是笔者的一点点操作分享,大家有更好的备份策略,欢迎共享。