国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql中mysqlhotcopy備份使用說明

2024-07-24 12:36:49
字體:
來源:轉載
供稿:網友

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

1,安裝,mysql已經安裝好m在/usr/local/mysql目錄下,代碼如下:

  1. yum -y install perl perl-DBI 
  2. wget http://file.Vevb.com/upload/2013/12/DBD-mysql-3.0002.tar.gz 
  3. tar zxvf  DBD-mysql-3.0002.tar.gz 
  4. cd DBD-mysql-3.0002 
  5. perl Makefile.PL  –mysql_config=/usr/local/mysql/bin/mysql_config 
  6. make 
  7. make test 
  8. make install 

2,備份某個數據庫,代碼如下:

  1. mkdir -p /data/word/ 
  2. /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 增量備份,新的備份自動覆蓋掉原備份.

-–checkpoint=db_name.tbl_name 在指定的數據庫,表中插入檢查點條目。

-–debug 啟用調試輸出。

-–dryrun,-n 報告動作而不執行它們。

-–flushlog 所有表鎖定后刷新日志。

-–keepold 完成后不刪除以前(重新命名的)的目標。

-–method=command 復制方法(cp或scp)。

-–noindices 備份中不包括全部索引文件。這樣使備份更小、更快??梢栽谝院笥胢yisamchk -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信息的表,代碼如下:

  1. CREATE TABLE `mysqlhotcopy_log_pos` (  
  2.  `host` varchar(60) NOT NULL,  
  3.  `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
  4.  `log_file` varchar(32) DEFAULT NULL,  
  5.  `log_pos` int(11) DEFAULT NULL,  
  6.  `master_host` varchar(60) DEFAULT NULL,  
  7.  `master_log_file` varchar(32) DEFAULT NULL,  
  8.  `master_log_pos` int(11) DEFAULT NULL,  
  9.  `relay_log_file` varchar(32) DEFAULT NULL,  
  10.  `relog_log_pos` int(11) DEFAULT NULL,  
  11.  PRIMARY KEY (`host`)  
  12. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 

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

4.專用用戶權限,代碼如下:

  1. grant select, reload, lock tables on *.* to 'mysqlbackup'@'localhost' identified by 'm.survivalescaperooms.com';   
  2. grant selectdeleteupdateinsert on mysql.mysqlhotcopy_log_pos to 'mysqlbackup'@'localhost' identified by 'm.survivalescaperooms.com'

5.正則使用

如果只想熱備其中的一部分數據就有可能用到正則了,5.1 數據庫名匹配,比如:備份以ttlsa開頭的庫,可以使用:

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='m.survivalescaperooms.com' --regexp= ^ttlsa /backup/mysqlback

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

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='m.survivalescaperooms.com' --regexp=^[a-f] /backup/mysqlback

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

備份ttlsa_com庫以user開頭的表,代碼如下:

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='m.survivalescaperooms.com' ttlsa_com./^user/ /backup/mysqlback

備份ttlsa_com庫除user_log開頭的表,代碼如下:

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='m.survivalescaperooms.com' ttlsa_com./~^user_log/ /backup/mysqlback

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

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='m.survivalescaperooms.com' ttlsa_com./^(user_[0-9])/ /backup/mysqlback

6.記錄slave和master信息,代碼如下:

  1. # perl ./mysqlhotcopy -u mysqlbackup -p m.survivalescaperooms.com -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 
  2.  

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

7. 增量備份實現

根據6上面的master、slave信息記錄,來實現增量備份,代碼如下:

# mysqlbinlog --start-position=POS BIN_LOG_FILE

8. 簡單備份腳本,代碼如下:

  1. #!/bin/bash  
  2.    
  3. mysqlhotcopy="/usr/local/mysql/bin/mysqlhotcopy2" 
  4. user="mysqlbackup" 
  5. password="m.survivalescaperooms.com" 
  6. socket="/tmp/mysql.sock" 
  7.    
  8. backupdir="/backup/mysqlback" 
  9. datadir="mysqlhotcopy_`date +%Y%m%d_%I%M%S`" 
  10. echo $datadir  
  11. target="$backupdir/$datadir" 
  12. retention_days_local="5" 
  13.    
  14. 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}'))  
  15.    
  16. if [ "${status[0]}" == "Yes" ] && [ "${status[1]}" == "Yes" ]; then 
  17.    mkdir -p $target  
  18.    $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  
  19.    find $backupdir -name "^mysqlhotcopy_*_*" -type d -mtime +${retention_days_local} |  xargs rm -rf  
  20. else 
  21.   echo "slave error" 
  22. 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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 两当县| 福州市| 台北县| 时尚| 彩票| 彰化市| 姜堰市| 水富县| 虎林市| 犍为县| 关岭| 扬中市| 大港区| 察隅县| 吉隆县| 新安县| 渑池县| 建德市| 孟连| 无为县| 乌海市| 汉源县| 贡嘎县| 依兰县| 惠州市| 宜川县| 杭锦旗| 禄丰县| 甘谷县| 英超| 阜康市| 吉隆县| 长岛县| 商都县| 泸西县| 牡丹江市| 吴桥县| 广昌县| 合江县| 任丘市| 凤凰县|