Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2316382
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: Mysql/postgreSQL

2010-11-24 09:20:05

http://blog.longwin.com.tw/archives/000416.html

使用mysqlhotcopy熱備份MySQL資料庫
為了找這個東西.. 不小心找到剛剛貼的兩個好站 ~~
不過總算找到我要的東西了~~ XD

以下內容轉載自: 使用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"查看。
From mysql.com
From
TO-DO: 下一步通過crontab做一個定期備份,還要學習一下:P
阅读(3366) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

sss02132010-11-29 13:58:05

neobilly: 跑一下看看,我认为这个错误比较诡异,varchar是怎么计算长度的呢?.....
varchar定义的字符的长度,不是字节,比如你定义a varchar(10),那么a就能存10个字符,如“abcdefghij”

sss02132010-11-29 13:56:32

neobilly: 跑一下看看,我认为这个错误比较诡异,varchar是怎么计算长度的呢?.....
你好,在我电脑上是可以通过的,没有错误呵呵,已经创建成功了

neobilly2010-11-24 21:24:55

跑一下看看,我认为这个错误比较诡异,varchar是怎么计算长度的呢?

neobilly2010-11-24 21:23:45

CREATE TABLE `graph_path` (
  `id` int(11) NOT NULL auto_increment,
  `term1_id` int(11) NOT NULL,
  `term2_id` int(11) NOT NULL,
  `relationship_type_id` int(11) default NULL,
  `distance` int(11) default NULL,
  `relation_distance` int(11) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `graph_path0` (`id`),
  KEY `relationship_typ

sss02132010-11-24 11:40:13

neobilly: 有一个问题想请教一下,关于ERROR 1071,有兴趣帮忙吗?.....
请描述详细些,呵呵