小型Drupal數據庫備份以及大型站點MySQL備份策略教程

爲了防止web伺服器出現故障而引起的數據丟失,數據庫備份顯得非常重要,以免出現重大損失。本文分析研究一下小型的Drupal站的備份策略以及大型站點的mysql備份策略

中小站點簡單備份策略
基于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


此外我們需要把備份的數據還要定期傳送到其他伺服器上,才會避免伺服器崩潰而引發數據丟失。備份及時網站才有保證,這裏僅僅只是筆者的一點點操作分享,大家有更好的備份策略,歡迎共享。

更多相關文章
  • 本文章給大家介紹一下關于數據庫sql語句to_char優化[mysql和oracle ]方法,有需要了解的同學可參考.最早發現這個問題是在買買提分析中,如果 在數據庫sql語句中用 代碼如下 select * fro
  • 關于Linux遠程伺服器Mysql數據庫定時備份和刪除的資料,網上有很多,但是很多步驟不夠詳細,而且很多錯誤,不適合新手學習.自己在這學習這方面走了不少彎,現在終于琢磨了點名堂,所以寫了這個教程,方便新手學習.1.Linux伺服器一般是ssh協定,如果本地也是Linux環境,可以直接通過shell連 ...
  • 備份數據庫在linux中我們有很多辦法,下面我要介紹的是利用crontab定時任務配合我下面分享腳本來備份mysql數據庫的同時並定期檢查並刪除10天前的備份文件.加入crontab定時任務,每天執行.達到的效果是:每天備份數據庫到指定目錄,刪除10天前備份的文件.以下是腳本內容: 代碼如下 #!/
  • 分頁在數據顯示常用到,本文是我總結的常用的三個數據庫(ORACLE/mysql/sql server)的sql分頁查詢語句.ORACLE 分頁查詢sql語句下面這個效率很低 代碼如下 SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM
  • DataGuard是甲骨文推出的一種高可用性數據庫方案,是在主節點與備用節點間通過日志同步來保證數據的同步,可以實現數據庫快速切換與災難性恢複.dataguard環境下使用alter user sys identif
  • 在mysql中自帶了 mysqldum命令可直接能數據庫進行備份和恢複操作,下面我來詳細的介紹關于MySQL中mysqldum命令的用法.1.mysqldump1.1 備份mysqldump 是采用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合
  • mysql教程 快速數據庫教程備份與自動備份bat處理方法,下面第一個實例是bat批處理方法,後面是常用的sql數據各種備份的命令.@echo offecho.echo MySQL數據庫備份echo *****************************echo.echo 今天是 %date%e ...
  • 備份mysql教程數據庫教程的命令mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 備份mysql數據庫爲帶刪除表的格式
一周排行
  • 本文章介紹了在java中IP地址轉換十進制數及把10進制再轉換成IP地址的程序代碼吧.先看實例 代碼如下 class ip { private static long iptolong(string strip) /
  • 蘋果iTunes不能備份iphone怎麽辦iTunes備份失敗解決辦法
    蘋果iTunes不能備份iphone怎麽辦?我們常使用itunes來備份iphone設備中 ...
  • 下文重點介紹關于centos系統中tomcat的ssl配置步驟,希望這篇文章能幫助到快速在centos中配置ssl哦.最近因爲用CAS做單點登錄,需要配置SSL,過程是比較簡單的,記錄下各個步驟的含義,以免日後忘記. ...
  • mysql中不是所有長度的sql語句都會成功的處理,有時候會根據配置文件的max_allowed_packet值限制server接受的數據包大小.有時候大的插入和更新會被max_allowed_packet 參數限制 ...
  • 在mysql中如果我們表用久了可能會發現後面有一個多余的字節數據會越大,同時久了表的查詢速度也比較慢了,那麽我們可以使用mysqlcheck是mysql自帶的可以檢查和修複MyISAM表,並且它還可以優化和分析表,m ...
  • 本文我們來分享一個Python讀取ini文件來操作Mysql的發郵件實例,重點還是在操作數據庫,當然你可能有其他的操作Mysql方式,不過這種方式個人感覺也是不錯的.Python操作Mysql首先,我習慣將配置信息寫 ...
  • Percona 爲 MySQL 數據庫伺服器進行了改進,在功能和效能上較 MySQL 有著很顯著的提升.該版本提升了在高負載情況下的 InnoDB 的效能.爲 DBA 提供一些非常有用的效能診斷工具:另外有更多的參數
  • java.uti.Arrays 包含用來操作數組(比如排序和搜索)的各種方法.這篇文章我們就來研究一些大師們寫的排序算法.(1) 基本數據類型數組的排序,如Arrays.sort(int[])等.采用了一種經過調優的
  • 本文章來給各位同學推薦一個不錯的播放Wav音頻文件實例程序,用java寫的各位有需要了朋友可參考. 代碼如下 import java.io.File; import java.io.FileInputStream;
  • iOS5.0設備與iTunes WiFi同步教程
    蘋果官方iOS5.0系統版本中就增加了iTunes與iPhone/ipad設備WiFi同步