小型DrupalDatabase Backup以及大型網站MySQL備份策略分享_Mysql

來源:互聯網
上載者:User

中小網站簡單備份策略

基於drupal的中小行網站,我們可以使用backup_migrate模組,該模組提供了定期備份的功能,備份的時間、保留多少個備份等等設定,設定好之後,定期執行cron即可備份成功。 一般的Drupal小站,我們只需使用svn即可,在伺服器端,我們把備份好的資料提交到svn,就可以達到備份的目的。由於Drupal的備份模組可以設定備份保留的檔案份數,因此不會造成太多的備份檔案,從而導致svn很大。

下面是一個簡單的備份指令碼,放置到網站根目錄,然後加到crontab每天執行即可。

#!/bin/bash date #start dateDRUSH_PHP=/bin/php #php pathexport DRUSH_PHP drush cronsvn st sites/default/files/backup_migrate/scheduled/ | grep '^!' | awk '{print $2}' | xargs svn delete --forcesvn 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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.