linux下通過mysqldump備份mysql資料庫成sql檔案
階段1:傻瓜式全備份mysqldump -h ip地址 -uusername -ppassword -A >~/name.sql此種情況將整個資料庫(結構和資料)匯出備份成一個sql檔案-----------------------------------------------------------------------------------------------------------------------------------------------階段2:適當的調整參數達到不同的備份效果我們先help一下mysqldump --help由於help輸出過多就不一一列舉出來了 通過遠端連線備份 -h 需要備份伺服器的地址 -u 允許遠端連線的帳號 -p允許遠端連線帳號的密碼 -A 全備份 常用參數的說明-A, --all-databases 備份所有資料庫--add-drop-database 在每個create database 語句之前增加一個drop database。--add-drop-table 在每個create table 語句之前增加一個drop table。--add-locks 在每個表匯出之前增加LOCK TABLES並且之後UNLOCK TABLE。(為了使得更快地插入到MySQL)--default-character-set=name 設定匯出資料的字元集--opt 同--quick --add-drop-table --add-locks --extended-insert --lock-tables。應該給你為讀入一個MySQL伺服器的儘可能最快的匯出。-e, --extended-insert 使用全新多行INSERT文法。給出更緊縮並且更快的插入語句)。產生的檔案insert語句中回事批量的,提高匯入時的速度--hex-blob 使用十六進位格式匯出二進位字串欄位。如果有位元據就必須使用本選項。影響到的欄位類型有 BINARY、VARBINARY、BLOB。--quick,-q 該選項在匯出大表時很有用,它強制 mysqldump 從伺服器查詢取得記錄直接輸出而不是取得所有記錄後將它們緩衝到記憶體中-t, --no-create-info 只匯出資料-d, --no-data 只匯出結構----------------------------------------------------------------------------------------------------------------------------------------------階段3:備份制定定資料庫和制定資料庫的某個表mysqldump -h ip地址 -uusername -ppassword databasename >~/name.sqlmysqldump -h ip地址 -uusername -ppassword databasename tablename >~/name.sql----------------------------------------------------------------------------------------------------------------------------------------------階段4.1:通過讀取文本來分庫備份資料庫成不同的sql檔案例如我們分別有資料庫db1 db2 db3 db4 db5。。。。。。db100當我們每個庫資料量都不小的時候需要按資料庫分別備份,我們也不可能100個庫分別寫成100個備份的指令碼運行,這樣我們就需要結合shell指令碼中的迴圈語句來操作cat filename.txt |while read ido備份指令碼,例如:mysqldump -h ip地址 -uusername -ppassword $i >~/name.sqldone其中filename.txt中儲存資料庫的庫名,每行一個。通過這樣的做法再結合linux的crond服務我們就可以自動備份了階段4.2如果需要分庫分表備份那該這麼辦呢這時候做法和分庫的時候一樣,分別按每個庫產生相應表的表明檔案一行一個分別命名為db1.txt db2.txt db3.txt db4.txt db5.txt。。。。。。。db100.txt通過兩次迴圈分別進行分庫分表的備份 cat filename.txt |while read idomkdir $icat $i.txt|while read ado備份指令碼,例如:mysqldump -h ip地址 -uusername -ppassword $i $a >$i/$a.sqldonedone當然我們有時候需要記錄下備份的時間fn=$(date +"%Y-%m-%d_%H:%M") cat filename.txt |while read idomkdir $icat $i.txt|while read ado備份指令碼,例如:mysqldump -h ip地址 -uusername -ppassword $i $a >$i/$a$fn.sqldonedone --------------------------------------------------------------------------------------------------------------------------------------------------階段5:經過第4階段之後我們的備份更加細緻,那部分的資料出問題我們就恢複那部分的(雖然顆粒度還是有些粗)但是我們是不是覺得第4階段的備份還是很複雜,例如我們存庫名和表明的檔案就是一個龐大的工程,建立庫我們得在庫檔案中添加一行建立表我們得到某個庫下面的表的檔案中添加一條,這樣既繁瑣又容易出錯,而且容易忘記,維護起來很麻煩。現在我們有個辦法可以讓他自動列出庫和庫下的表mysql -e執行mysql -e "show databases"得到如下結果+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test |+--------------------+但是這樣的結果我們沒法用,所需要去掉外圍的條條框框的東西mysql -e "show databases"|sed '1d'information_schemamysqlperformance_schematest for db in `mysql -e "show databases"|sed '1d'`do備份指令碼,例如:mysqldump -h ip地址 -uusername -ppassword $db >name.sqldone參照這個我們同樣可以分庫分表備份mysql databasename -e "show tables"|sed '1d' fn=$(date +"%Y-%m-%d_%H:%M")for db in `mysql -e "show databases"|sed '1d'`domkdir $dbfor tables in `mysql $db -e "show tables"|sed '1d'`do備份指令碼,例如:mysqldump -h ip地址 -uusername -ppassword $db $tables >$db/$tables$fn.sqldonedone 暫且完畢,請多指正,如有其它更好方式請留言,一起進步
本文出自 “天馬行空” 部落格,請務必保留此出處http://zhongnan83.blog.51cto.com/5988158/1137166