小型Drupal數(shù)據(jù)庫(kù)備份以及大型站點(diǎn)MySQL備份策略分享
中小站點(diǎn)簡(jiǎn)單備份策略
基于drupal的中小行網(wǎng)站,我們可以使用backup_migrate模塊,該模塊提供了定期備份的功能,備份的時(shí)間、保留多少個(gè)備份等等設(shè)置,設(shè)置好之后,定期執(zhí)行cron即可備份成功。 一般的Drupal小站,我們只需使用svn即可,在服務(wù)器端,我們把備份好的數(shù)據(jù)提交到svn,就可以達(dá)到備份的目的。由于Drupal的備份模塊可以設(shè)置備份保留的文件份數(shù),因此不會(huì)造成太多的備份文件,從而導(dǎo)致svn很大。
下面是一個(gè)簡(jiǎn)單的備份腳本,放置到站點(diǎn)根目錄,然后加到crontab每天執(zhí)行即可。
#!/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的設(shè)置如下
0 0 * * * cd /www/web/html/ && bash cron.sh > cron.log 2>&1
大型站點(diǎn)MySQL備份策略
如果是數(shù)據(jù)庫(kù)稍大的站點(diǎn),使用svn臨時(shí)備份就略顯單薄,這時(shí)需要使用MySQL備份策略,一般情況下我們需要把整個(gè)數(shù)據(jù)庫(kù)都備份壓縮,然后定期轉(zhuǎn)移到備份數(shù)據(jù)庫(kù)或者放到其他的云服務(wù)器,這里給出一個(gè)簡(jiǎn)單的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的設(shè)置
0 1 * * * /home/robbin/bin/mysql_backup.php
此外我們需要把備份的數(shù)據(jù)還要定期傳送到其他服務(wù)器上,才會(huì)避免服務(wù)器崩潰而引發(fā)數(shù)據(jù)丟失。備份及時(shí)網(wǎng)站才有保證,這里僅僅只是筆者的一點(diǎn)點(diǎn)操作分享,大家有更好的備份策略,歡迎共享。
相關(guān)文章
MySQL redo死鎖問(wèn)題排查及解決過(guò)程分析
被告知在多實(shí)例場(chǎng)景下 MySQL Server hang 住,無(wú)法測(cè)試下去,原生版本不存在這個(gè)問(wèn)題,而新版本上出現(xiàn)了這個(gè)問(wèn)題,不禁心頭一顫,心中不禁感到奇怪,還好現(xiàn)場(chǎng)環(huán)境還在,為排查問(wèn)題提供了一個(gè)好的環(huán)境,隨即便投入到緊張的問(wèn)題排查過(guò)程當(dāng)中2016-10-10
mysql數(shù)據(jù)庫(kù)查詢優(yōu)化 mysql效率
MySQL由于它本身的小巧和操作的高效, 在數(shù)據(jù)庫(kù)應(yīng)用中越來(lái)越多的被采用.我在開(kāi)發(fā)一個(gè)P2P應(yīng)用的時(shí)候曾經(jīng)使用MySQL來(lái)保存P2P節(jié)點(diǎn),由于P2P的應(yīng)用中,結(jié)點(diǎn)數(shù)動(dòng)輒上萬(wàn)個(gè),而且節(jié)點(diǎn)變化頻繁,因此一定要保持查詢和插入的高效.以下是我在使用過(guò)程中做的提高效率的三個(gè)有效的嘗試. 1. 使用statement進(jìn)行綁定查詢 2. 隨機(jī)的獲取記錄 3. 使用連接池管理連接.2008-01-01
mysql分頁(yè)的limit參數(shù)簡(jiǎn)單示例
這篇文章主要給大家介紹了關(guān)于mysql分頁(yè)的limit參數(shù)的相關(guān)資料,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

