程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql中mysqlhotcopy備份使用說明

mysql中mysqlhotcopy備份使用說明

編輯:MySQL綜合教程

在mysql中備份數據庫有mysqldump與mysqlhotcopy常用方法,不過mysqldump是mysql安裝好後可直接使用的,頁mysqlhotcopy需要安裝perl支持,因為mysqlhotcopy是prel語言寫的.

1安裝。mysql已經安裝好,在/usr/local/mysql目錄下

 代碼如下 復制代碼

yum -y install perl perl-DBI

wget http://file.bKjia.c0m/upload/2013/12/DBD-mysql-3.0002.tar.gz

tar zxvf  DBD-mysql-3.0002.tar.gz

cd DBD-mysql-3.0002

perl Makefile.PL  –mysql_config=/usr/local/mysql/bin/mysql_config

make

make test

make install

2備份某個數據庫

 代碼如下 復制代碼

mkdir -p /data/word/
/usr/local/mysql/bin/mysqlhotcopy –user=root –password=123456  word /data/word

可以打包,假如打包名稱為word.tar.gz

3恢復

停止mysql數據庫

 

修改權限。啟動mysql

例,mysqlhotcopy + binlog 實現mysql增量備份

mysqlhotcopy只是簡單的緩存寫入和文件復制的過程,占用資源和備份速度比mysqldump快很多很多。特別適合大的數據庫,它使用LOCK TABLES、FLUSH TABLES和cp或scp來快速備份數據庫。它是備份數據庫或單個表的最快的途徑,只能運行在數據庫目錄所在的機器上。

注意:mysqlhotcopy只支持MyISAM 引擎。

1. 安裝依賴包

mysqlhotcopy是perl語言寫的,因此需要安裝perl的連接mysql的驅動:

 代碼如下 復制代碼

# yum install perl-DBI.x86_64 
# yum install perl-DBD-MySQL.x86_64

2 mysqlhotcopy常用參數: 

-–allowold 如果目標存在不退出(加上一個_old後綴重新命名它)
-–addtodest 增量備份,新的備份自動覆蓋掉原?淼氖?荩?喽雜?llowold
-–checkpoint=db_name.tbl_name 在指定的數據庫,表中插入檢查點條目。
-–debug 啟用調試輸出。
-–dryrun,-n 報告動作而不執行它們。
-–flushlog 所有表鎖定後刷新日志。
-–keepold 完成後不刪除以前(重新命名的)的目標。
-–method=command 復制方法(cp或scp)。
-–noindices 備份中不包括全部索引文件。這樣使備份更小、更快。可以在以後用myisamchk -rq重新構建索引。
-–user=user_name,-u user_name 當連接服務器時使用的MySQL用戶名。
-–password=password,-p password 當連接服務器時使用的密碼。請注意該選項的密碼值是不可選的,不象其它MySQL程序。
-–port=port_num,-P port_num 當連接本地服務器時使用的TCP/IP端口號。
-–quiet,-q 除了出現錯誤時保持沉默。
-–regexp=expr 復制所有數據庫名匹配給出的正則表達式的數據庫。
-–socket=path,-S path 用於連接的Unix套接字文件。
-–suffix=str 所復制的數據庫名的後綴。
-–tmpdir=path 臨時目錄(代替/tmp)。
–resetmaster 所有表鎖定後reset二進制日志
–resetslave 所有表鎖定後reset master.info
–record_log_pos=db.table 指定記錄slave和master信息的表

3. 創建記錄slave和master信息的表

 代碼如下 復制代碼

CREATE TABLE `mysqlhotcopy_log_pos` (
 `host` varchar(60) NOT NULL,
 `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 `log_file` varchar(32) DEFAULT NULL,
 `log_pos` int(11) DEFAULT NULL,
 `master_host` varchar(60) DEFAULT NULL,
 `master_log_file` varchar(32) DEFAULT NULL,
 `master_log_pos` int(11) DEFAULT NULL,
 `relay_log_file` varchar(32) DEFAULT NULL,
 `relog_log_pos` int(11) DEFAULT NULL,
 PRIMARY KEY (`host`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


 

注意:mysqlhotcopy腳本沒有記錄relay_log_file和relog_log_pos值,同時,也不會把這些信息寫入到文件。後面記錄relay log和pos值信息和寫入到文件是因我改了mysqlhotcopy腳本內容。

4. 專用用戶權限

 代碼如下 復制代碼

grant select, reload, lock tables on *.* to 'mysqlbackup'@'localhost' identified by 'www.bKjia.c0m'; 
grant select, delete, update, insert on mysql.mysqlhotcopy_log_pos to 'mysqlbackup'@'localhost' identified by 'www.bKjia.c0m';

5. 正則使用

如果只想熱備其中的一部分數據就有可能用到正則了.

5.1 數據庫名匹配,比如:備份以ttlsa開頭的庫,可以使用:

 代碼如下 復制代碼

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.bKjia.c0m' --regexp= ^ttlsa /backup/mysqlback


備份以[a-f]開頭的庫,可以使用:

 代碼如下 復制代碼

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.bKjia.c0m' --regexp=^[a-f] /backup/mysqlback

5.2 備份某個數據庫中的某些表:

備份ttlsa_com庫以user開頭的表:

 代碼如下 復制代碼

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.bKjia.c0m' ttlsa_com./^user/ /backup/mysqlback

備份ttlsa_com庫除user_log開頭的表:

 代碼如下 復制代碼

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.bKjia.c0m' ttlsa_com./~^user_log/ /backup/mysqlback


備份ttlsa_com庫以user_0,user_1,user_2……,user_9開頭的表:

 代碼如下 復制代碼

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.bKjia.c0m' ttlsa_com./^(user_[0-9])/ /backup/mysqlback

 
6. 記錄slave和master信息

 代碼如下 復制代碼

# perl ./mysqlhotcopy -u mysqlbackup -p www.bKjia.c0m -S /tmp/mysql.sock --record_log_pos=mysql.mysqlhotcopy_log_pos --keepold --record_log_pos2file --flushlog --regexp="[a-zA-Z0-9_-]" /backup/mysqlback/mysqlhotcopy_20131114_041307


注意:–record_log_pos2file參數是我修改mysqlhotcopy加的。

7. 增量備份實現

根據6上面的master、slave信息記錄,來實現增量備份。

 代碼如下 復制代碼

# mysqlbinlog --start-position=POS BIN_LOG_FILE

8. 簡單備份腳本

 代碼如下 復制代碼

#!/bin/bash
 
mysqlhotcopy="/usr/local/mysql/bin/mysqlhotcopy2"
user="mysqlbackup"
password="www.bKjia.c0m"
socket="/tmp/mysql.sock"
 
backupdir="/backup/mysqlback"
datadir="mysqlhotcopy_`date +%Y%m%d_%I%M%S`"
echo $datadir
target="$backupdir/$datadir"
retention_days_local="5"
 
status=($(mysql -u$user -p${password} -S $socket -e "show slave statusG" --skip-column-names | egrep  "Slave_IO_Running|Slave_SQL_Running" | awk '{print $2}'))
 
if [ "${status[0]}" == "Yes" ] && [ "${status[1]}" == "Yes" ]; then
   mkdir -p $target
   $mysqlhotcopy -u $user -p $password -S $socket  --record_log_pos=mysql.mysqlhotcopy_log_pos --keepold --record_log_pos2file --flushlog --regexp="[a-zA-Z0-9_-]" $target
   find $backupdir -name "^mysqlhotcopy_*_*" -type d -mtime +${retention_days_local} |  xargs rm -rf
else
  echo "slave error"
fi


 

與mysqldump比較:


1、前者是一個快速文件意義上的COPY,後者是一個數據庫端的SQL語句集合。
  2、前者只能運行在數據庫目錄所在的機器上,後者可以用在遠程客戶端,不過備份的文件還是保存在服務器上。
  3、相同的地方都是在線執行 LOCK TABLES 以及 UNLOCK TABLES
  4、前者恢復只需要COPY備份文件到源目錄覆蓋即可,後者需要導入SQL文件到原庫中。(source 或 mysql < bakfile.sql)
  5、前者只適用於 MyISAM 引擎,而後則則可同時使用於MyISAM引擎和InodDB引擎.
  6、前者在使用前必須安裝perl-DBD-mysql包,而後者則不需要.

tar zxvf  word.tar.gz

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved