学堂首页 | 网站开发 | 工具应用 | 站长时代 | 免费资源 | 网络安全 | 服务器类 | 新闻资讯 | 素材欣赏
您的位置: 中国建站大全 -> 网站开发设计 -> 数据库开发 -> MySQl如何备份恢复(完全+增量备份策略)

MySQl如何备份恢复(完全+增量备份策略)

作者:佚名  来源:本站整理  发布时间:2008-2-19 6:55:58  发布人:网络

在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。本文主要对MyISAM表做备份恢复。


 

 


 

 


 

备份策略一:直接拷贝数据库文件(不推荐)


 

备份策略二:使用mysqlhotcopy备份数据库(完全备份,适合小型数据库备份)


 

备份策略三:使用mysqldump备份数据库(完全+增量备份,适合中型数据库备份)


 

备份策略四:使用主从复制机制(replication)(实现数据库实时备份)


 


 


 

 


备份策略一、直接拷贝数据库文件
直接拷贝数据文件最为直接、快速、方便,但缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在备份文件前,执行以下 SQL 语句:
FLUSH TABLES WITH READ LOCK;
也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。


备份策略二、使用mysqlhotcopy备份数据库
mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上,并且mysqlhotcopy 只能用于备份 MyISAM表。
 

本备份策略适合于小型数据库的备份,数据量不大,可以采用mysqlhotcopy程序每天进行一次完全备份。


 

备份策略布置:


 

(1)、安装DBD-mysql perl模块,支持mysqlhotcopy脚本连接到MySQL数据库。


 

shell> tar -xzvf  DBD-mysql-4.005.tar.gz


 

shell> cd DBD-mysql-4.005


 

shell> unset LANG


 

shell> perl Makefile.PL -mysql_config=/usr/local/mysql/bin/mysql_config -testuser=root -testpassword=UserPWD


 

shell> make


 

shell> make test


 

shell> make install


 

(2)、设置crontab任务,每天执行备份脚本


 

shell> crontab -e


 

0 3 * * * /root/MySQLBackup/mysqlbackup.sh >/dev/null 2>&1


 

每天凌晨3:00执行备份脚本。



 

mysqlbackup.sh注释:


 

#!/bin/sh


# Name:mysqlbackup.sh


# PS:MySQL DataBase Backup,Use mysqlhotcopy script.


# Write by:i.Stone


# Last Modify:2007-11-15


#


# 定义变量,请根据具体情况修改


# 定义脚本所在目录


scriptsDir=`pwd`


# 数据库的数据目录


dataDir=/usr/local/mysql/data/


# 数据备份目录


tmpBackupDir=/tmp/tmpbackup/


backupDir=/tmp/mysqlbackup/


# 用来备份数据库的用户名和密码


mysqlUser=root


mysqlPWD=111111


# 定义eMail地址


eMail=alter@somode.com


 


# 如果临时备份目录存在,清空它,如果不存在则创建它


if [[ -e $tmpBackupDir ]]; then


  rm -rf $tmpBackupDir/*


else


  mkdir $tmpBackupDir


fi


# 如果备份目录不存在则创建它


if [[ ! -e $backupDir ]];then



mkdir $backupDir


fi


 


# 清空MySQLBackup.log


if [[ -s MySQLBackup.log ]]; then


  cat /dev/null >MySQLBackup.log


fi


 


# 得到数据库备份列表,在此可以过滤不想备份的数据库


for databases in `find $dataDir -type d | \


  sed -e "s/\/usr\/local\/mysql\/data\///" | \


  sed -e "s/test//"`; do


 


  if [[ $databases == "" ]]; then


    continue


  else


# 备份数据库


    /usr/local/mysql/bin/mysqlhotcopy --user=$mysqlUser --password=$mysqlPWD -q "$databases" $tmpBackupDir


    dateTime=`date "+%Y.%m.%d %H:%M:%S"`


    echo "$dateTime Databasedatabases backup success!" >>MySQLBackup.log


  fi


done


 


# 压缩备份文件


date=`date -I`


cd $tmpBackupDir


tar czf $backupDir/mysql-$date.tar.gz ./


 


# 发送邮件通知


if [[ -s MySQLBackup.log ]]; then


  cat MySQLBackup.log | mail -s "MySQL Backup" $eMail


fi


 


# 使用smbclientmv.sh脚本上传数据库备份到备份服务器


# $scriptsDir/smbclientmv.sh


 


 


 

 


 

smbclientmv.sh注释:


 

#!/bin/sh


# Name:smbclientmv.sh


# PS:Move the data to Backup Server.


# Write by:i.Stone


# Last Modify:2007-11-15


#


# 定义变量


# 备份服务器名


BackupServer="BackupServerName"


# 共享文件夹名


BackupShare="ShareName"


# 备份服务器的访问用户名和密码


BackupUser="SMBUser"


BackupPW="SMBPassword"


# 定义备份目录


BackupDir=/tmp/mysqlbackup


date=`date -I`


 


# Move the data to BackupServer


smbclient //$BackupServer/$BackupShare \


$BackupPW -d0 -W WORKGROUP -U $BackupUser \


-c "put $BackupDir/mysql-$date.tar.gz \


mysql-$date.tar.gz"


 


# Delete temp files


rm -f $BackupDir/mysql-$date.tar.gz


 


 

 


 

(3)、恢复数据库到备份时的状态


mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:
shell> cp -rf db_name /usr/local/mysql/data/
 

shell> chown -R mysql:mysql /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)


 

本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。

[1] [2]  下一页

将本文收藏到QQ书签与更多好友分享

上一篇:Drbd+heartbeat+mysql replication来构建mysql的高可用性

下一篇:用DataSet.ReadXml读取无Scheme的XML提速方法   

  • · 注册码大全二
  • · 注册码大全四
  • · 注册码大全一
  • · 要10G免费网络硬盘的请进来!...
  • · 通过google 赶快来赚美金
  • · 注册码大全十
  • · 注册码大全三
  • · 头像-qq头像(qq新头像)4
  • · 让你轻松架设FTP服务器1
  • · 梦幻背景图片7
  • · 标签增加CSS的overflow属...
  • · 街头小纠纷引发网络大战...
  • · 淡淡花图片
  • · 用PHP+java实现自动新闻...
  • · DreamwaverMX与ASP.NET(...
  • · Google CEO预警引恐慌 称...
  • · Flash 动作脚本之:资料速...
  • · 让你的PHP4和PHP5共存
  • · ASP漏洞全接触(2)
  • · 在字符串中把网址改成超...