小型Drupal數(shù)據(jù)庫備份以及大型站點MySQL備份策略分享
來源:易賢網(wǎng) 閱讀:762 次 日期:2014-11-25 10:11:27
溫馨提示:易賢網(wǎng)小編為您整理了“小型Drupal數(shù)據(jù)庫備份以及大型站點MySQL備份策略分享”,方便廣大網(wǎng)友查閱!

中小站點簡單備份策略

基于drupal的中小行網(wǎng)站,我們可以使用backup_migrate模塊,該模塊提供了定期備份的功能,備份的時間、保留多少個備份等等設置,設置好之后,定期執(zhí)行cron即可備份成功。 一般的Drupal小站,我們只需使用svn即可,在服務器端,我們把備份好的數(shù)據(jù)提交到svn,就可以達到備份的目的。由于Drupal的備份模塊可以設置備份保留的文件份數(shù),因此不會造成太多的備份文件,從而導致svn很大。

下面是一個簡單的備份腳本,放置到站點根目錄,然后加到crontab每天執(zhí)行即可。

?1234567891011 #!/bin/bash date #start date DRUSH_PHP=/bin/php #php path export DRUSH_PHP drush cronsvn 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備份策略

如果是數(shù)據(jù)庫稍大的站點,使用svn臨時備份就略顯單薄,這時需要使用MySQL備份策略,一般情況下我們需要把整個數(shù)據(jù)庫都備份壓縮,然后定期轉(zhuǎn)移到備份數(shù)據(jù)庫或者放到其他的云服務器,這里給出一個簡單的PHP示例代碼。

?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 #!/usr/bin/php -q <?php $to = ""; $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

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

更多信息請查看IT技術專欄

更多信息請查看數(shù)據(jù)庫

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權所有:易賢網(wǎng)