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

Mysql 數據庫經常使用備份辦法和留意事項

編輯:MySQL綜合教程

Mysql 數據庫經常使用備份辦法和留意事項。本站提示廣大學習愛好者:(Mysql 數據庫經常使用備份辦法和留意事項)文章只能為提供參考,不一定能成為您想要的結果。以下是Mysql 數據庫經常使用備份辦法和留意事項正文


Mysql數據庫備份的經常使用3種辦法:
1、直接拷貝(cp、tar,gzip,cpio)
2、mysqldump
3、mysqlhotcopy

1.應用直接拷貝數據庫備份
典范的如cp、tar或cpio適用法式。
當你應用直接備份辦法時,必需包管表不在被應用。假如辦事器在你正在拷貝一個表時轉變它,拷貝就掉去意義。
包管你的拷貝完全性的最好辦法是封閉辦事器,拷貝文件,然後重啟辦事器。假如你不想封閉辦事器,要在履行表檢討的同時鎖定辦事器。假如辦事器在運轉,雷同的制約也實用於拷貝文件,並且你應當應用雷同的鎖定協定讓辦事器“寧靜上去”。
當你完成了備份時,須要重啟辦事器(假如封閉了它)或釋放加在表上的鎖定(假如你讓辦事器運轉)。
要用直接拷貝文件把一個數據庫從一台機械拷貝到另外一台機械上,只是將文件拷貝到另外一台辦事器主機的恰當數據目次下便可。要確保文件是MyIASM格局或兩台機械有雷同的硬件構造,不然你的數據庫在另外一台主機上有奇異的內容。你也應當包管在另外一台機械上的辦事器在你正在裝置數據庫表時不拜訪它們。
2.mysqldump
根本語法:
Shell> mysqldump [OPTIONS] database [tables] > data_backup.sql (不指定命據庫名表現全體備份)
例如:
mysqldump -uroot -p --default-character-set=cp932 --opt --extended-insert=false --hex-blob -R -x mysql > E:\mysql.sql
輸入文件的開首看起來象如許:
# MySQL Dump 6.0
#
# Host: localhost Database: samp_db
#---------------------------------------
# Server version 3.23.2-alpha-log
#
# Table structure for table 'absence'
#
CREATE TABLE absence(
student_id int(10) unsigned DEFAULT '0' NOT NULL,
date date DEFAULT '0000-00-00' NOT NULL,
PRIMARY KEY (student_id,date)
);
#
# Dumping data for table 'absence'
#
INSERT INTO absence VALUES (3,'1999-09-03');
INSERT INTO absence VALUES (5,'1999-09-03');
INSERT INTO absence VALUES (10,'1999-09-08');
...... 
文件剩下的部門有更多的INSERT和CREATE TABLE語句構成。例:
%mysqldump samp_db >/opt/mysqldatabak/samp_db.2006-5-15
%mysqldump samp_db | gzip >/usr/archives/mysql/samp_db.1999-10-02.gz #發生緊縮備份
%mysqldump samp_db student score event absence >grapbook.sql #備份數據庫的某些表
%mysqladmin -h boa.snake.net create samp_db
%mysqldump samp_db | mysql -h boa.snake.net samp_db #直接恢復到另外一個辦事器上應用--add-drop-table選項告知辦事器將DROP TABLE IF EXISTS語句寫入備份文件,如許當我們今後用來恢單數據庫時,假如表曾經存在,你不會獲得一個毛病。
%mysqldump --add-drop-table samp_db | mysql -h boa.snake.net samp_db
mysqldump其它有效的選項包含:
--flush-logs和--lock-tables組合將對你的數據庫檢討點有贊助。--lock-tables鎖定你正在傾倒的一切表,而--flush-logs封閉偏重新翻開更新日記文件,新的更新日記將只包含從備份點起的修正數據庫的查詢。這將設置你的更新日記檢討點位備份時光。(但是假如你有須要履行個更新的客戶,鎖定一切表對備份時代的客戶拜訪不是件功德。)
假如你應用--flush-logs設置檢討點到備份時,有能夠最好是傾倒全部數據庫。假如你傾倒零丁的文件,較難將更新日記檢討點與備份文件同步。在恢復時代,你平日按數據庫為基本提取更新日記內容,對單個表沒有提取更新的選擇,所以你必需本身提取它們。
缺省地,mysqldump在寫入前將一個表的全部內容讀進內存。這平日確切不用要,而且現實上假如你有一個年夜表,簡直是掉敗的。你可用--quick選項告知mysqldump只需它檢索出一行就寫出每行。為了進一步優化傾倒進程,應用--opt而不是--quick。--opt選項翻開其它選項,加快數據的傾倒和把它們讀回。
用--opt實行備份能夠是最經常使用的辦法,由於備份速度上的優勢。但是,要正告你,--opt選項確切有價值,--opt優化的是你的備份進程,不是其他客戶對數據庫的拜訪。--opt選項經由過程一次鎖定一切表阻攔任何人更新你正在傾倒的任何表。你可在普通數據庫拜訪上很輕易看到其後果。
一個具有--opt的相反後果的選項是--dedayed。該選項使得mysqldump寫出INSERT DELAYED語句而不是INSERT語句。假如你將數據文件裝入另外一個數據庫而且你想使這個操尴尬刁難能夠湧現在該數據庫中的查詢的影響最小,--delayed對此很有贊助。
--compress選項在你拷貝數據庫到另外一台機械上時很有贊助,由於它削減收集傳輸字節的數目。上面有一個例子,留意到--compress對與遠端主機上的辦事器通訊的法式才給出,而不是對與當地主機銜接的法式:
%mysqldump --opt samp_db | mysql --compress -h boa.snake.net samp_db
mysqldump有許多其它選項,重要參數:
--compatible=name
它告知 mysqldump,導出的數據將和哪一種數據庫或哪一個舊版本的 MySQL 辦事器相兼容。值可認為 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要應用幾個值,用逗號將它們離隔。固然了,它其實不包管能完整兼容,而是盡可能兼容。
--complete-insert,-c
導出的數據采取包括字段名的完全 INSERT 方法,也就是把一切的值都寫在一行。這麼做能進步拔出效力,然則能夠會遭到 max_allowed_packet 參數的影響而招致拔出掉敗。是以,須要謹嚴應用該參數,至多我不推舉。
--extended-insert = true|false
默許情形下,mysqldump 開啟 --complete-insert 形式,是以不想用它的的話,就應用本選項,設定它的值為 false 便可。
--default-character-set=charset
指定導出數據時采取何種字符集,假如數據表不是采取默許的 latin1 字符集的話,那末導出時必需指定該選項,不然再次導入數據後將發生亂碼成績。
--disable-keys
告知 mysqldump 在 INSERT 語句的開首和開頭增長 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 語句,這能年夜年夜進步拔出語句的速度,由於它是在拔出完一切數據後才重建索引的。該選項只合適 MyISAM 表。
--hex-blob
應用十六進制格局導出二進制字符串字段。假如有二進制數據就必需應用本選項。影響到的字段類型有 BINARY、VARBINARY、BLOB。
--lock-all-tables,-x
在開端導出之前,提交要求鎖定一切數據庫中的一切表,以包管數據的分歧性。這是一個全局讀鎖,而且主動封閉 --single-transaction 和 --lock-tables 選項。
--lock-tables
它和 --lock-all-tables 相似,不外是鎖定以後導出的數據表,而不是一會兒鎖定全體庫下的表。本選項只實用於 MyISAM 表,假如是 Innodb 表可以用 --single-transaction 選項。
--no-create-info,-t
只導出數據,而不添加 CREATE TABLE 語句。
--no-data,-d
不導出任何數據,只導出數據庫表構造。
--opt
這只是一個快捷選項,同等於同時添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項。本選項能讓 mysqldump 很快的導出數據,而且導出的數據能很快導回。該選項默許開啟,但可以用 --skip-opt 禁用。留意,假如運轉 mysqldump 沒有指定 --quick 或 --opt 選項,則會將全部成果集放在內存中。假如導出年夜數據庫的話能夠會湧現成績。
--quick,-q
該選項在導出年夜表時很有效,它強迫 mysqldump 從辦事器查詢獲得記載直接輸入而不是獲得一切記載後將它們緩存到內存中。
--routines,-R
導出存儲進程和自界說函數。
--single-transaction
該選項在導出數據之條件交一個 BEGIN SQL語句,BEGIN 不會壅塞任何運用法式且能包管導出時數據庫的分歧性狀況。它只實用於事務表,例如 InnoDB 和 BDB。
本選項和 --lock-tables 選項是互斥的,由於 LOCK TABLES 會使任何掛起的事務隱含提交。
要想導出年夜表的話,應聯合應用 --quick 選項。
--triggers
同時導出觸發器。該選項默許啟用,用 --skip-triggers 禁用它。
3.mysqlhotcopy備份
mysqlhotcopy是一個Perl劇本,最後由Tim Bunce編寫並供給。它應用LOCK TABLES、FLUSH TABLES和cp或scp來疾速備份數據庫。它是備份數據庫或單個表的最快的門路,但它只能運轉在數據庫目次地點的機械上。mysqlhotcopy只用於備份MyISAM。它運轉在Unix和NetWare中
應用辦法見上面的劇本.參加crotab中吧.
#!/bin/sh
# Name:mysqlbackup.sh
# PS:MySQL DataBase Backup,Use mysqlhotcopy script.
# Last Modify:2008-06-12
# 界說變量,請依據詳細情形修正
# 界說劇本地點目次
scriptsDir=`pwd`
# 數據庫的數據目次
dataDir=/var/lib/mysql
# 數據備份目次
tmpBackupDir=/tmp/mysqlblackup
backupDir=/backup/mysql
# 用來備份數據庫的用戶名和暗碼
mysqlUser=root
mysqlPWD='you password'
# 假如暫時備份目次存在,清空它,假如不存在則創立它
if [[ -e $tmpBackupDir ]]; then
rm -rf $tmpBackupDir/*
else
mkdir $tmpBackupDir
fi
# 假如備份目次不存在則創立它
if [[ ! -e $backupDir ]];then
mkdir $backupDir
fi
# 獲得數據庫備份列表,在此可以過濾不想備份的數據庫
for databases in `find $dataDir -type d | \
sed -e "s/\/var\/lib\/mysql\///" | \
sed -e "s/test//"`; do
if [[ $databases == "" ]]; then
continue
else
# 備份數據庫
/usr/bin/mysqlhotcopy --user=$mysqlUser --password=$mysqlPWD -q "$databases" $tmpBackupDir
dateTime=`date "+%Y.%m.%d %H:%M:%S"`
echo "$dateTime Database:$databases backup success!" >>MySQLBackup.log
fi
done
# 緊縮備份文件
date=`date -I`
cd $tmpBackupDir
tar czf $backupDir/mysql-$date.tar.gz ./
#End完成
參加到crontab中設置每周5運轉
0 0 * * 5 /backup/blackup.sh
留意:恢單數據庫到備份時的狀況
mysqlhotcopy 備份出來的是全部數據庫目次,應用時可以直接拷貝到 mysqld 指定的 datadir (在這裡是 /var/lib/mysql/)目次下便可,同時要留意權限的成績,以下例:
shell> cp -rf db_name /var/lib/mysql/
shell> chown -R mysql:mysql /var/lib/mysql/ (將 db_name 目次的屬主改成 mysqld 運轉用戶)
本套備份戰略只能恢單數據庫到最初一次備份時的狀況,要想在瓦解時喪失的數據盡可能少應當更頻仍的停止備份,要想恢單數據到瓦解時的狀況請應用主從復制機制(replication)。
小技能:
不想寫暗碼在shell中的話,可以在root的home目次下樹立一個.my.cnf文件,以便讓mysqlhotcopy從中讀取用戶名/暗碼。
[mysqlhotcopy]
user=root
password=YourPassword
然後平安起見,chmod一下。
chmod 600 ~/.my.cnf
附:mysqlhotcopy經常使用參數:
· --allowold 假如目的存在不廢棄(加上一個_old後綴從新定名它)。
· --checkpoint=db_name.tbl_name 在指定的db_name.tbl_name拔出檢討點條目。
· ---debug 啟用調試輸入。
· --dryrun,-n 申報舉措而不履行它們。
· --flushlog 一切表鎖定後刷新日記。
· --keepold 完成後不刪除之前(從新定名的)的目的。
· -- method=command 復制辦法(cp或scp)。
· --noindices 備份中不包含全體索引文件。如許使備份更小、更快。可以在今後用myisamchk -rq從新構建索引。
· --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)。
· --user=user_name,-u user_name 當銜接辦事器時應用的MySQL用戶名。
mysqlhotcopy從選項文件讀取[client]和[mysqlhotcopy]選項組。要想履行mysqlhotcopy,你必需可以拜訪備份的表文件,具有那些表的SELECT權限和RELOAD權限(以便可以或許履行FLUSH TABLES)。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved