1、爲何要用到備份和恢復?mysql
1.災難恢復;sql
2.審計;
3.測試;
備份:目的用於恢復;對備份數據作恢復測試,備份出來的數據不必定可以恢復;因此測試是頗有必要作;另外還須要根據實際狀況制定最優的備份和恢復策略
那麼MySQL備份須要備份那些數據呢?
主要包括:數據、配置文件、二進制日誌、事務日誌
數據庫
2、備份的類型
2.1 按備份時服務器是否繼續提供服務(數據庫服務是否在線)區分:
vim
熱備份(cold backup):備份時讀寫都不受影響緩存
溫備份(warm backup):備份時僅可進行讀操做安全
冷備份(cold backup):也叫離線備份,讀寫操做均停止服務器
不一樣的存儲引擎對備份的支持也是不同的,MyISAM存儲引擎可使用LVM快照功能配合實現熱備份,若是沒有LVM,則只能實現溫備份,而InnoDB則能夠徹底支持熱備,可以使用的熱備工具備:xtrabackup, mysqldump等
從數據的安全角度來講,離線備份(冷備份)是最安全的,且是最快速的.但離線備份須要中止服務,對業務帶來影響.session
若是MySQL服務器存在主從服務器,則可使用將從服務器停機進行冷備份,即保證服務,又保障數據數據安全
2.2 根據備份時的接口(直接備份數據文件仍是經過mysql服務器導出數據):
物理備份(physical backup):直接複製(歸檔)數據文件的備份方式;特色:速度快
邏輯備份(logical backup):把數據從庫中提出出來保存爲文本文件;特色:速度慢、丟失浮點數精度;方便使用文本處理工具直接對其處理、可移植能力強
2.3 根據備份的數據集:
徹底備份(full backup)
部分備份(partial backup)
2.4 按是否備份所有仍是隻備份數據部分數據區別:多線程
徹底備份(full backup):備份所有須要備份的數據
增量備份(increment backup):僅備份上次徹底備份或增量備份之後變化的數據
差別備份(differential backup):僅備份上次徹底備份依賴變化的數據
通常狀況下,根據備份策略組合使用:徹底+增量;徹底+差別
3、備份恢復策略及備份對象:
策略:
選擇備份方式///選擇備份時間///考慮到恢復成本///恢復時長///備份成本///鎖時間///備份時長///備份負載
對象:
數據///配置文件///代碼(存儲過程,存儲函數,觸發器)///OS相關的配置文件(如crontab配置計劃及相關的腳本)
4、備份工具介紹:
4.1 mysql備份工具:
mysqldump: 邏輯備份工具、MyISAM(溫)、InnoDB(熱備份)、Aria(溫備)
mysqldumper: 多線程的mysqldump
mysqlhotcopy:物理備份工具、溫備份
上述工具有份和恢復過程較慢、很難實現增量或差別備份
4.2 文件系統備工具:
cp/tar:物理備份
lvm-snapshot:接近於熱備的工具:由於要先請求全局鎖,然後建立快照,並在建立快照完成後釋放全局鎖;如:oracle
上述工具有份和恢復速度較快;可是很難實現增量備份,而且請求全局須要等待一段時間,在繁忙的服務器上尤爲如此;
4.3 SQL 語法備份
SELECT clause INTO OUTFILE '/path/to/somefile'
LOAD DATA INFILE '/path/from/somefile'
部分備份工具, 不會備份關係定義,僅備份表中的數據;
邏輯備份工具,略快於mysqldump.
4.4 第三方備份工具:
Innobase: 商業備份工具, innobackup
Xtrabackup: 由Percona提供的開源備份工具
對於InnoDB熱備,增量備份;MyISAM溫備,不支持增量;物理備份,速度快.
5、使用mysqldump對MySQL進行備份:
5.1 基本語法:
備份單個數據或單個數據中的指定表:
mysqldump [OPTIONS] database [tb1][tb2]… |
備份多個數據庫:
mysqldump [OPTIONS] --databases[OPTIONS] DB1 [DB2 DB3...] |
備份全部數據庫:
mysqldump [OPTIONS] --all-databases[OPTIONS] |
5.2 選項[OPTIONS]說明:
--all-databases | 導出所有數據庫。 |
--all-tablespaces | 導出所有表空間。 |
--no-tablespaces | 不導出任何表空間信息。 |
--add-drop-database | 每一個數據庫建立以前添加drop數據庫語句。 |
--add-drop-table | 每一個數據表建立以前添加drop數據表語句。(默認爲打開狀態,使用--skip-add-drop-table取消選項) |
--add-locks |
在每一個表導出以前增長LOCKTABLES而且以後UNLOCKTABLE。(默認爲打開狀態,使用--skip-add-locks取消選項) |
--allow-keywords | 容許建立是關鍵詞的列名字。這由表名前綴於每一個列名作到。 |
--apply-slave-statements | 在'CHANGEMASTER'前添加'STOPSLAVE',而且在導出的最後添加'STARTSLAVE'。 |
--character-sets-dir | 字符集文件的目錄 |
--comments | 附加註釋信息。默認爲打開,能夠用--skip-comments取消 |
--compatible | 導出的數據將和其它數據庫或舊版本的MySQL相兼容。值能夠爲ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,要使用幾個值,用逗號將它們隔開。它並不保證能徹底兼容,而是儘可能兼容。 |
--compact | 導出更少的輸出信息(用於調試)。去掉註釋和頭尾等結構。可使用選項:--skip-add-drop-table--skip-add-locks --skip-comments --skip-disable-keys |
--complete-insert | 使用完整的insert語句(包含列名稱)。這麼作能提升插入效率,可是可能會受到max_allowed_packet參數的影響而致使插入失敗。 |
--compress | 在客戶端和服務器之間啓用壓縮傳遞全部信息 |
--create-options | 在CREATETABLE語句中包括全部MySQL特性選項。(默認爲打開狀態) |
--databases | 導出幾個數據庫。參數後面全部名字參量都被看做數據庫名。 |
--debug | 輸出debug信息,用於調試。默認值爲:d:t:o,/tmp/mysqldump.trace |
--debug-check | 檢查內存和打開文件使用說明並退出。 |
--debug-info | 輸出調試信息並退出 |
--default-character-set | 設置默認字符集,默認值爲utf8 |
--delayed-insert | 採用延時插入方式(INSERTDELAYED)導出數據 |
--delete-master-logs | master備份後刪除日誌. 這個參數將自動激活--master-data。 |
--disable-keys | 對於每一個表,用/*!40000ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLEKEYS */;語句引用INSERT語句。這樣能夠更快地導入dump出來的文件,由於它是在插入全部行後建立索引的。該選項只適合MyISAM表,默認爲打開狀態。 |
--dump-slave | 該選項將致使主的binlog位置和文件名追加到導出數據的文件中。設置爲1時,將會以CHANGEMASTER命令輸出到數據文件;設置爲2時,在命令前增長說明信息。該選項將會打開--lock-all-tables,除非--single-transaction被指定。該選項會自動關閉--lock-tables選項。默認值爲0。 |
--events | 導出事件。 |
--extended-insert | 使用具備多個VALUES列的INSERT語法。這樣使導出文件更小,並加速導入時的速度。默認爲打開狀態,使用--skip-extended-insert取消選項。 |
--fields-terminated-by | 導出文件中忽略給定字段。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項 |
--fields-enclosed-by | 輸出文件中的各個字段用給定字符包裹。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項 |
--fields-optionally-enclosed-by | 輸出文件中的各個字段用給定字符選擇性包裹。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項 |
--fields-escaped-by | 輸出文件中的各個字段忽略給定字符。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項。 |
--flush-logs | 開始導出以前刷新日誌。 請注意:假如一次導出多個數據庫(使用選項--databases或者--all-databases),將會逐個數據庫刷新日誌。除使用--lock-all-tables或者--master-data外。在這種狀況下,日誌將會被刷新一次,相應的因此表同時被鎖定。所以,若是打算同時導出和刷新日誌應該使用--lock-all-tables或者--master-data和--flush-logs。 |
--flush-privileges | 在導出mysql數據庫以後,發出一條FLUSHPRIVILEGES 語句。爲了正確恢復,該選項應該用於導出mysql數據庫和依賴mysql數據庫數據的任什麼時候候 |
--force | 在導出過程當中忽略出現的SQL錯誤。 |
--help | 顯示幫助信息並退出。 |
--hex-blob | 使用十六進制格式導出二進制字符串字段。若是有二進制數據就必須使用該選項。影響到的字段類型有BINARY、VARBINARY、BLOB。 |
--host | 須要導出的主機信息 |
--ignore-table |
不導出指定表。指定忽略多個表時,須要重複屢次,每次一個表。每一個表必須同時指定數據庫和表名。例如:--ignore-table=database.table1--ignore-table=database.table2... |
--include-master-host-port | 在--dump-slave產生的'CHANGEMASTER TO..'語句中增長'MASTER_HOST=<host>,MASTER_PORT=<port>' |
--insert-ignore | 在插入行時使用INSERTIGNORE語句. |
--lines-terminated-by | 輸出文件的每行用給定字符串劃分。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項。 |
--lock-all-tables | 提交請求鎖定全部數據庫中的全部表,以保證數據的一致性。這是一個全局讀鎖,而且自動關閉--single-transaction和--lock-tables選項。 |
--lock-tables | 開始導出前,鎖定全部表。用READLOCAL鎖定表以容許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,--single-transaction是一個更好的選擇,由於它根本不須要鎖定表。 請注意當導出多個數據庫時,--lock-tables分別爲每一個數據庫鎖定表。所以,該選項不能保證導出文件中的表在數據庫之間的邏輯一致性。不一樣數據庫表的導出狀態能夠徹底不一樣。 |
--log-error | 附加警告和錯誤信息到給定文件 |
--master-data | 該選項將binlog的位置和文件名追加到輸出文件中。若是爲1,將會輸出CHANGEMASTER 命令;若是爲2,輸出的CHANGEMASTER命令前添加註釋信息。該選項將打開--lock-all-tables選項,除非--single-transaction也被指定(在這種狀況下,全局讀鎖在開始導出時得到很短的時間;其餘內容參考下面的--single-transaction選項)。該選項自動關閉--lock-tables選項,0則爲不記錄 |
--max_allowed_packet | 服務器發送和接受的最大包長度。 |
--net_buffer_length | TCP/IP和socket鏈接的緩存大小。 |
--no-autocommit | 使用autocommit/commit語句包裹表。 |
--no-create-db | 只導出數據,而不添加CREAT DATABASE 語句。 |
--no-create-info | 只導出數據,而不添加CREAT TABLE 語句。 |
--no-data | 不導出任何數據,只導出數據庫表結構。 |
--no-set-names | 等同於--skip-set-charset |
--opt | 等同於--add-drop-table,--add-locks, --create-options, --quick, --extended-insert, --lock-tables,--set-charset, --disable-keys 該選項默認開啓, 能夠用--skip-opt禁用. |
--order-by-primary | 若是存在主鍵,或者第一個惟一鍵,對每一個表的記錄進行排序。在導出MyISAM表到InnoDB表時有效,但會使得導出工做花費很長時間。 |
--order-by-primary |
若是存在主鍵,或者第一個惟一鍵,對每一個表的記錄進行排序。在導出MyISAM表到InnoDB表時有效,但會使得導出工做花費很長時間。 |
--password | 鏈接數據庫密碼,使用命名管道鏈接mysql |
--port | 鏈接數據庫端口號 |
--protocol | 使用的鏈接協議,包括:tcp,socket, pipe, memory. |
--quick | 不緩衝查詢,直接導出到標準輸出。默認爲打開狀態,使用--skip-quick取消該選項。 |
--quote-names | 使用(`)引發表和列名。默認爲打開狀態,使用--skip-quote-names取消該選項。 |
--replace | 使用REPLACEINTO 取代INSERTINTO. |
--result-file | 直接輸出到指定文件中。該選項應該用在使用回車換行對(\\r\\n)換行的系統上(例如:DOS,Windows)。該選項確保只有一行被使用。 |
--routines | 導出存儲過程以及自定義函數。 |
--set-charset | 添加'SETNAMES default_character_set'到輸出文件。默認爲打開狀態,使用--skip-set-charset關閉選項。 |
--single-transaction | 該選項在導出數據以前提交一個BEGINSQL語句,BEGIN不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於InnoDB存儲引擎。本選項和--lock-tables選項是互斥的,由於LOCKTABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick選項。 |
--dump-date | 將導出時間添加到輸出文件中。默認爲打開狀態,使用--skip-dump-date關閉選項。 |
--skip-opt | 禁用–opt選項. |
--socket | 指定鏈接mysql的socket文件位置,默認路徑/tmp/mysql.sock |
--tab | 爲每一個表在給定路徑建立tab分割的文本文件。注意:僅僅用於mysqldump和mysqld服務器運行在相同機器上。 |
--tables | 覆蓋--databases(-B)參數,指定須要導出的表名。 |
--triggers | 導出觸發器。該選項默認啓用,用--skip-triggers禁用它。 |
--tz-utc | 在導出頂部設置時區TIME_ZONE='+00:00',以保證在不一樣時區導出的TIMESTAMP數據或者數據被移動其餘時區時的正確性。 |
--user | 指定鏈接的用戶名。 |
--verbose | 輸出多種平臺信息。 |
--version | 輸出mysqldump版本信息並退出 |
--where | 只轉儲給定的WHERE條件選擇的記錄。請注意若是條件包含命令解釋符專用空格或字符,必定要將條件引用起來。 |
--xml | 導出XML格式. |
--plugin_dir | 客戶端插件的目錄,用於兼容不一樣的插件版本。 |
--default_auth | 客戶端插件默認使用權限。 |
以上部分選項來自於Internet! |
ok!在對與mysqldump選項整理完後經過實例來看一下它是如何實現完成一個備份過程的;
6、示例
在開始以前須要說明一下:
示例過程當中的系統爲CentOS6.5_x86-64,mysql爲10.0.10-MariaDB-log;
要想了解10.0.10-MariaDB請點擊:"https://mariadb.com/kb/zh-cn/mariadb-mariadb-/"
1準備工做:
(1).將二進制日誌文件與數據文件分離:
[root@MariaDB ~]# vim /etc/my.cnf #添加以下行: log-bin=/mydata/binlogs/maria-bin #二進制日誌目錄存放位置: [root@MariaDB ~]# mkdir /mydata/binlogs |
(2).將每一個數據庫的表空間獨立出來:
#添加以下行: [root@MariaDB ~]# vim /etc/my.cnf innodb_file_per_table |
(3).建立一個專門存放示例過程中的備份數據庫目錄:
[root@MariaDB ~]# mkdir /backups |
(4).首先導入一個底層存儲引擎爲Innodb的數據庫做爲示例使用:
#用的是剛安裝好的MariaDB [root@MariaDB ~]# service mysqld start Starting MySQL.. [ OK ][root@MariaDB ~]# mysql < hellodb.sql |
(5).驗證導入成功與否
[root@MariaDB ~]# mysql -uroot -p MariaDB [(none)]> SHOW DATABASES; 5 rows in set (0.00 sec) |
二、使用mysqldump實現備份恢復操做
(1).備份恢復單個庫(熱備)
#備份操做: [root@MariaDB ~]# mysqldump -uroot -hlocalhost -p --database hellodb --single-transaction --flush-logs > /backups/abc.sql Enter password: #模擬hellodb被誤刪除: [root@MariaDB ~]# mysql -uroot -p ........ ........ MariaDB [(none)]> \q #恢復操做: [root@MariaDB ~]# mysql -uroot -hlocalhost -p < /backups/hello.sql ........ ........ MariaDB [(none)]> USE hellodb; #OK!單庫備份恢復結束! |
(2).手動請求全局鎖備份恢復:
#請求全局鎖: MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec) #滾動日誌 MariaDB [(none)]> FLUSH LOGS; Query OK, 0 rows affected (0.01 sec) #日誌滾動完後須要看一下當前使用的是那一個二進制日誌文件,之後在恢復時只須要用到maria-bin.000005文件的365這個位置之後的文件就能夠了! MariaDB [(none)]> #備份操做 [root@MariaDB ~]# mysqldump --databases hellodb --master-data=2 > /backups/hello2.sql #釋放鎖: [root@MariaDB ~]# mysql -uroot -p Enter password: ........ ........ MariaDB [(none)]> UNLOCK TABLES; MariaDB [(none)]> #模擬數據庫刪除: [root@MariaDB ~]# mysql -uroot -p ........ ........ Query OK, 7 rows affected (0.08 sec) #恢復操做 [root@MariaDB ~]# mysql -uroot -hlocalhost -p < /backups/hello.sql ........ ........ MariaDB [(none)]> USE hellodb; |
(3).多個庫或指定庫備份與上面使用相同方法便可;在此不作演示!
--all-databases: 備份全部庫 --databases db1 db2 ...: 備份指定的多個庫 |
(4).即時點備份還原
#來一次完整備份: [root@MariaDB ~]# mysqldump --databases hellodb --single-transaction --flush-logs --master-data=2 > /backups/hello3.sql #對hellodb進行操做: MariaDB [(none)]> USE hellodb; Database changed MariaDB [hellodb]> #模擬數據庫刪除: MariaDB [hellodb]> DROP DATABASE hellodb; #在備份的時候加入了--master-data=2這個選項,因此它可以在備份數據文件/backups/hello3.sql中查看備份出來的數據文件能夠看到這樣一行信息: -- CHANGE MASTER TO MASTER_LOG_FILE='maria-bin.000006', MASTER_LOG_POS=365; 這行信息記錄了標記着我備份的那一刻是記錄到哪一個二進制文件的哪一個位置,但是個人修改數據庫操做是在這個點之後的,因而咱們找到這個二進制文件並指定這個起始位置就能夠恢復數據庫誤刪以前的記錄了: [root@MariaDB binlogs]# mysqlbinlog maria-bin.000006 | tail -15 #注意,在這個二進制文件的最後幾行信息: #140401 13:10:35 server id 1 end_log_pos 655 Xid = 1617 # at 693 [root@MariaDB binlogs]# #恢復操做: [root@MariaDB binlogs]# mysqlbinlog --start-position=365 --stop-position=655 maria-bin.000006 > /backups/hello4.increment.sql #進入mysql,關閉二進制日誌 [root@MariaDB binlogs]# mysql -uroot -p ........ ........ MariaDB [(none)]> SET SESSION sql_log_bin=0; //恢復過程當中無需開啓二進制文件; #導入數據: #先導入完整備份: MariaDB [(none)]> source /back/hello3.sql MariaDB [hellodb]> SHOW DATABASES; #此時新建的那張表尚未恢復回來 #導入增量備份: MariaDB [(hellodb)]> source /backups/hello4.increment.sql MariaDB [hellodb]> SHOW TABLES; 2 rows in set (0.00 sec) MariaDB [hellodb]> SET SESSION sql_log_bin=1; |
OK!至此mysqldump備份恢復實驗完成!
小結:
(1)在真實環境下應當關閉其它用戶的鏈接;在磁盤有足夠容量的狀況下儘可能保存二進制文件;
(2)在備份恢復時對於數據庫底層不一樣的存儲引擎需使用正確的方式進行操做
備份策略:基於mysqldump
備份:mysqldump+二進制日誌文件;
週日作一次徹底備份:備份的同時滾動日誌
週一至週六:備份二進制日誌;
恢復:
徹底備份+各二進制日誌文件中至此刻的事件
對MySQL配置文件,以及與MySQL相關的OS配置文件在每次修改後都應該直接進行備份;
lvm-snapshot:基於LVM快照的備份
說明:
1.事務日誌跟數據文件必須在同一個捲上;以下:
/dev/mapper/myvg-mylv1 on /mydata type ext4 (rw) /dev/mapper/myvg-mylv1 ext4 9.9G 325M 9.1G 4% /mydata [root@MariaDB ~]# ls /mydata/ binlogs data [root@MariaDB ~]# |
2.建立快照卷以前,要請求MySQL的全局鎖;在快照建立完成以後釋放鎖;
3.請求全局鎖完成以後,作一第二天志滾動;作二進制日誌文件及位置標記(手動進行);
備份恢復步驟:
1.請求全局鎖,並滾動日誌
[root@MariaDB ~]# mysql MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH LOGS; Query OK, 0 rows affected (0.05 sec) MariaDB [(none)]> |
2.作二進制日誌文件及位置標記(手動進行);
[root@MariaDB ~]# mysql -e 'SHOW MASTER STATUS' > /backups/bininfo.txt |
3.建立快照卷
[root@MariaDB ~]# lvcreate -L 500M -s -n mydata-snap -p r /dev/myvg/mylv1 Logical volume "mydata-snap" created [root@MariaDB ~]# lvs | grep mylv1 mydata-snap myvg sri-a-s--- 500.00m mylv1 0.00 mylv1 myvg owi-aos--- 10.00g [root@MariaDB ~]# |
4.釋放全局鎖
MariaDB [(none)]> UNLOCK TABLES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> |
五、掛載快照卷並備份
[root@MariaDB ~]# mount /dev/myvg/mydata-snap /mnt/ -o ro [root@MariaDB mnt]# cp -a data /backups/Backupdata-2014-04-01-14:53:16 |
六、備份完成以後,刪除快照卷
[root@MariaDB ~]# umount /mnt/ [root@MariaDB ~]# lvremove /dev/myvg/mydata-snap Do you really want to remove active logical volume mydata-snap? [y/n]: y Logical volume "mydata-snap" successfully removed [root@MariaDB ~]# |
7.備份完成並解鎖後建立數據庫,建立表
[root@MariaDB mnt]# mysql MariaDB [(none)]> CREATE DATABASE db1; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> USE db1; Database changed MariaDB [db1]> CREATE TABLE db_table1 (ID INT); Query OK, 0 rows affected (0.30 sec) MariaDB [db1]> INSERT INTO db_table1 VALUES (10),(20); Query OK, 2 rows affected (0.05 sec) Records: 2 Duplicates: 0 Warnings: 0 MariaDB [db1]> select * from db_table1; +------+ | ID | +------+ | 10 | | 20 | +------+ 2 rows in set (0.00 sec) MariaDB [db1]> |
8.模擬數據目錄誤刪除
[root@MariaDB ~]# service mysqld stop Shutting down MySQL.. [ OK ] [root@MariaDB ~]# cd /mydata/data/ [root@MariaDB data]# rm -rf * [root@MariaDB data]# ls [root@MariaDB data]# |
9.恢復在第6步操做以前的數據
[root@MariaDB data]# cp -a /backups/Backupdata-2014-04-01-14\:53\:16/* ./ #此時二進制文件還存在的! |
10.查看在誤刪除數據目錄內的文件以前的數據是否已經恢復
[root@MariaDB ~]# mysql -e 'SHOW DATABASES;' +--------------------+ | Database | +--------------------+ | hellodb | | information_schema | | mysql | | performance_schema | | test | +--------------------+ [root@MariaDB ~]# #新建的數據庫"db1"不存在;因而只能依靠二進制文件進行恢復 |
11.依靠二進制日誌文件進行恢復
[root@MariaDB ~]# cat /backups/bininfo.txt FilePosition Binlog_Do_DB Binlog_Ignore_DB maria-bin.000010 365 //在作備份時記錄二進制日誌文件及位置標記 [root@MariaDB ~]# mysqlbinlog --start-position=365 /mydata/binlogs/maria-bin.000010 | mysql [root@MariaDB ~]# |
12.驗證恢復效果
[root@MariaDB ~]# mysql -e 'SHOW DATABASES;' +--------------------+ | Database | +--------------------+ | db1 | | hellodb | | information_schema | | mysql | | performance_schema | | test | +--------------------+ |
小結:
1.在備份時需將二進制日誌保存好;2.恢復數據時,若是備份文件中文件權限有改變則需修改權限及屬主屬組等3.在任何備份恢復事後第一件事情就是作一次完整備份!