小型Drupal数据库备份以及大型站点MySQL备份策略分享

所属分类: 数据库 / Mysql 阅读数: 1733
收藏 0 赞 0 分享

中小站点简单备份策略

基于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

此外我们需要把备份的数据还要定期传送到其他服务器上,才会避免服务器崩溃而引发数据丢失。备份及时网站才有保证,这里仅仅只是笔者的一点点操作分享,大家有更好的备份策略,欢迎共享。

更多精彩内容其他人还在看

MySQL中的基本查询语句学习笔记

这篇文章主要介绍了MySQL中的基本查询语句学习笔记,包括使用limit限制查询结果条数和合并查询结果的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

详解MySQL中的分组查询与连接查询语句

这篇文章主要介绍了MySQL中的分组查询与连接查询语句,同时还介绍了一些统计函数的用法,需要的朋友可以参考下
收藏 0 赞 0 分享

linux下安装升级mysql到新版本(5.1-5.7)

这篇文章主要介绍了linux下安装升级mysql到新版本(5.1-5.7),需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL备份时排除指定数据库的方法

这篇文章主要介绍了MySQL备份时排除指定数据库的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Mysql数据库之索引优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。本文给大家介绍mysql数据库之索引优化,感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

Mysql性能优化方案分享

这篇文章主要为大家分享了Mysql性能优化方案,帮助大家进行Mysql性能优化,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

MySQL中一些常用的数据表操作语句笔记

这篇文章主要介绍了MySQL中一些常用的数据表操作语句笔记,其中重点讲解了删除关联表的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql版本5.5.x升级到5.6.x步骤分享

在我做的一个项目中,最近我对生产服务器上的一系列系统软件进行了升级,包括git、nginx、MySQL和PHP。这篇文章讲的是升级MySQL的过程,其他软件的升级将在其他文章中介绍。
收藏 0 赞 0 分享

Mysql IO 内存方面的优化

这篇文章主要介绍了Mysql IO 内存方面的优化 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Mysql忘记root密码怎么办

MySQL有时候忘记了root密码是一件伤感的事,下面通过本文给大家介绍Mysql忘记root密码怎么办的相关知识,需要的朋友参考下
收藏 0 赞 0 分享
查看更多