CentOS 用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的功能遠比我上面簡單介紹的強大,比如支持正則運算式的表名等等,詳細的請看mysqlhotcopy的兩個文檔,後者要詳細一些。在Linux下可以直接運行"perldoc mysqlhotcopy"查看。
詳細指令參考
以下是使用 mysqlhotcopy 對 MySQL 資料庫進行備份,而不是使用 mysqldump 將資料庫匯出成 SQL 檔。mysqlhotcopy 會先 lock table,完成後再 un-lock。
使用以下指令複雜 MySQL 資料到本機的其化目錄:
mysqlhotcopy –user={username} –password={password} {database} {path}
如果想將 MySQL 資料經 SSH 傳送到其他伺服器,可以這樣做:
mysqlhotcopy –method=scp –user={username} –password={password} {database} {ssh-username}@{ssh-server}:{path}
另一種範例
在 /etc/my.cnf 中加入 mysqlhotcopy 資訊
[mysqlhotcopy]
user=root
password=xxxx
mysqlhotcopy –u root -p(若未設定 my.cnf 則要輸入密碼) --addtodest(增量備份) mysql(要備份的目錄) /backup/mysqlhotcopy (備份的目的地)
[root@mgr mysqlhotcopy]# mysqlhotcopy -u root mysql /backup/mysqlhotcopy
Locked 21 tables in 1 seconds.
Flushed tables (`mysql`.`columns_priv`, `mysql`.`db`, `mysql`.`event`, `mysql`.`func`, `mysql`.`help_category`, `mysql`.`help_keyword`, `mysql`.`help_relation`, `mysql`.`help_topic`, `mysql`.`host`, `mysql`.`ndb_binlog_index`, `mysql`.`plugin`, `mysql`.`proc`, `mysql`.`procs_priv`, `mysql`.`servers`, `mysql`.`tables_priv`, `mysql`.`time_zone`, `mysql`.`time_zone_leap_second`, `mysql`.`time_zone_name`, `mysql`.`time_zone_transition`, `mysql`.`time_zone_transition_type`, `mysql`.`user`) in 0 seconds.
Copying 69 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 21 tables (69 files) in 0 seconds (1 seconds overall).
https://dev.mysql.com/doc/refman/5.0/en/mysqlhotcopy.html
我是用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的功能遠比我上面簡單介紹的強大,比如支持正則運算式的表名等等,詳細的請看mysqlhotcopy的兩個文檔,後者要詳細一些。在Linux下可以直接運行"perldoc mysqlhotcopy"查看。
詳細指令參考
以下是使用 mysqlhotcopy 對 MySQL 資料庫進行備份,而不是使用 mysqldump 將資料庫匯出成 SQL 檔。mysqlhotcopy 會先 lock table,完成後再 un-lock。
使用以下指令複雜 MySQL 資料到本機的其化目錄:
mysqlhotcopy –user={username} –password={password} {database} {path}
如果想將 MySQL 資料經 SSH 傳送到其他伺服器,可以這樣做:
mysqlhotcopy –method=scp –user={username} –password={password} {database} {ssh-username}@{ssh-server}:{path}
另一種範例
在 /etc/my.cnf 中加入 mysqlhotcopy 資訊
[mysqlhotcopy]
user=root
password=xxxx
mysqlhotcopy –u root -p(若未設定 my.cnf 則要輸入密碼) --addtodest(增量備份) mysql(要備份的目錄) /backup/mysqlhotcopy (備份的目的地)
[root@mgr mysqlhotcopy]# mysqlhotcopy -u root mysql /backup/mysqlhotcopy
Locked 21 tables in 1 seconds.
Flushed tables (`mysql`.`columns_priv`, `mysql`.`db`, `mysql`.`event`, `mysql`.`func`, `mysql`.`help_category`, `mysql`.`help_keyword`, `mysql`.`help_relation`, `mysql`.`help_topic`, `mysql`.`host`, `mysql`.`ndb_binlog_index`, `mysql`.`plugin`, `mysql`.`proc`, `mysql`.`procs_priv`, `mysql`.`servers`, `mysql`.`tables_priv`, `mysql`.`time_zone`, `mysql`.`time_zone_leap_second`, `mysql`.`time_zone_name`, `mysql`.`time_zone_transition`, `mysql`.`time_zone_transition_type`, `mysql`.`user`) in 0 seconds.
Copying 69 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 21 tables (69 files) in 0 seconds (1 seconds overall).
表4.13
mysqlhotcopy的
選項格式 | 描述 |
---|---|
--addtodest | 不要重命名目標目錄(如果存在的話); 僅僅是將文件添加到它 |
--allowold | 如果目標存在不放棄; 加上一個_old後綴重新命名它 |
--checkpoint | 插入檢查點條目 |
--chroot | mysqld的運作的chroot監牢的基本目錄 |
--debug | 寫入調試日誌 |
--dryrun | 報告動作而不執行它們 |
--flushlog | 鎖定所有表後刷新日誌 |
--help | 顯示幫助信息後退出 |
--host | 連接到MySQL服務器給定主機上 |
--keepold | 不要刪除以前(重新命名)的目標時, |
--method | 該方法用於複製文件 |
--noindices | 請不要在備份中包含完整的索引文件 |
--password | 密碼連接到服務器時使用 |
--port | 的TCP / IP用於連接端口號 |
--quiet | 是無聲的,除了錯誤 |
--regexp | 複製所有數據庫與匹配給定的正則表達式的名字 |
--resetmaster | 鎖定所有表後復位二進制日誌 |
--resetslave | 鎖定所有表後重置master.info文件 |
--socket | 連接到本地主機,Unix的套接字文件 |
--tmpdir | 臨時目錄 |
--user | 連接到服務器時使用的MySQL用戶名 |
https://dev.mysql.com/doc/refman/5.0/en/mysqlhotcopy.html
留言
張貼留言