- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MySQL 备份和规复策略
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。本文主要对MyISAM表做备份恢复。
?
备份策略一:直接拷贝数据库文件(不推荐)
备份策略二:
备份策略三:使用mysqldump备份数据库(完全+增量备份,适合中型数据库备份)
备份策略四:使用主从复制机制(replication)
?
脚本下载地址:点击下载脚本
?
备份策略一、直接拷贝数据库文件
直接拷贝数据文件最为直接、快速、方便,缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在文件前,执行以下?SQL?语句:
FLUSH?TABLES?WITH?READ?LOCK;
也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。
?
备份策略二、
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?21
每天凌晨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@
# 如果临时备份目录存在,清空它,如果不存在则创建它
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
???
文档评论(0)