mysqlhotcopy热备份MySQL数据库

时间:2008-07-20 10:53:34   来源:  作者:  点击:次  出处:技术无忧
关键字:mysqlhotcopy 备份 数据库

一提起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 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面