mysqlhotcopy热备份MySQL数据库
一提起mysql的备份,大家最多想到的就是mysqldump,不过导成文本文件虽然便于存放,但是速度很慢的。最快的备份方法自然是直接把数据目录copy一份了。但是一般来说,都要关闭MySQL的服务才能做,不然在你copy的时候刚好还有人读写表那麻烦就大了。下面简单介绍一下我试用mysql自带的热备份工具mysqlhotcopy的一些心得。~
我是用root用户完成备份操作的。(是不是应该使用mysql用户来做操作更安全一些?待尝试)
首先要在root的home目录下建立一个.my.cnf文件,以便让mysqlhotcopy从中读取用户名/密码。
[mysqlhotcopy]
user=root
password=YourPasswordGoesHere
然后安全起见,chmod一下。
chmod 600 ~/.my.cnf
mysqlhotcopy可以把执行的操作记录入数据库中,所以我建立了下面这个DB/Table:
CREATE DATABASE `dbinfo`;
USE dbinfo;
CREATE TABLE `checkpoint` (
`time_stamp` timestamp(14) NOT NULL,
`src` varchar(32) NOT NULL default \'\',
`dest` varchar(60) NOT NULL default \'\',
`msg` varchar(255) NOT NULL default \'\',
PRIMARY KEY (`time_stamp`)
) TYPE=MyISAM;
然后建立一个备份目录。如果不指定备份目录,mysqlhotcopy会在原来的位置备份(Redhat下面是/var/lib/mysql/),只不过目录名后面加上了 _old 这个后缀。
好了一切准备妥当,测试一下:
mysqlhotcopy --checkpoint dbinfo.checkpoint --addtodest db_douzi_org /var/db_backup
简单说明一下:
–checkpoint dbinfo.checkpoint 这个是指定存放操作记录的数据库/表
–addtodest 增量备份,新的备份自动覆盖掉原来的
db_douzi_org 我要备份的数据库名,如果有多个,依次写就行
/var/db_backup 备份目录
下面是我一次执行的输出:
Locked 34 tables in 0 seconds.
Flushed tables (`db_douzi_org`.`mt_author`, ...) in 0 seconds.
Copying 102 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 34 tables (102 files) in 0 seconds (0 seconds overall).
我这个数据库很小,才1MB多,我另外测试了一个186MB的数据库,完成也只用了8秒的时间,效率很高。
恢复数据库也很容易,直接把目录cp到MySQL的数据库目录就可以了,Redhat下面是/var/lib/mysql/。
但是请注意,mysqlhotcopy刚刚被发现有一个严重的漏洞,我原来所使用的4.0.20版本也不幸中弹,赶快升级到4.0.21版本吧。
mysqlhotcopy的功能远比我上面简单介绍的强大,比如支持正则表达式的表名等等,详细的请看mysqlhotcopy的两个文档,后者要详细一些。在Linux下可以直接运行”perldoc mysqlhotcopy”查看。











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面