MySQL入門篇-mysqldump備份和恢復


1,備份命令:mysqldump

  MySQL數據庫自帶的備份命令。是邏輯備份,導出的是SQL語句。也就是把數據從MySQL庫中以邏輯的SQL語句的形式直接輸出或將輸出導入備份的文件的過程。

2,設置使用mysqldump的用戶權限

1)mysqldump備份數據需要的權限

對於table來說mysqldump最少要有select權限

對於view來說mysqldump最少要有show view權限

對於trrigger來說mysqldump要有trriger權限

如果要產生一份一致的備份mysqldump要有lock tables權限

# 登陸數據庫后執行授權命令
grant select,reload,replication client,show view,lock tables,trigger on *.* to 'DBbackup'@'192.168.1.%' identified by 'DBbackup'; # 查看授權后的信息並刷新
show grants
for 'DBbackup'@'192.168.1.%'; flush privileges;

3,使用mysqldump備份和恢復

# 備份操作
mysqldump -uDBbackup -pDBbackup -B mytest > /mnt/mytest_bak_B.sql 

說明:加-B參數后,導出的數據文件中已存在創建庫和使用庫的語句;在恢復過程中不需要手動創建庫,可以直接還原恢復。

# 恢復操作
# 刪除mytest庫
mysql
-uDBbackup -pDBbackup -e "drop database mytest;"
# 恢復數據
mysql -uDBbackup -pDBbackup < /mnt/mytest_bak_B.sql

4,指定壓縮命令來壓縮備份文件

# 備份操作
mysqldump -uDBbackup -pDBbackup -B mytest | gzip > /mnt/mytest_bak_B.sql.gz

說明:mysqldump導出的文件是文本文件,壓縮效率很高。

5,備份多個數據庫

# 備份操作
mysqldump -uDBbackup -pDBbackup -B mytest wiki | gzip > /mnt/mytest_and_wiki_bak_B.sql.gz

說明:通過-B參數指定相關數據庫,每個數據庫名之前用空格分隔。當使用-B參數后,將所有數據庫全部列全,則等同於-A參數。

6,分庫備份

  執行一個備份語句就備份一個庫,分庫備份就是執行多條相同的備份語句,只是備份的庫名和備份文件名不同。可以通過shell腳本自動生成並執行相應的操作,也可以把所有單個備份語句寫在同一個shell腳本中,通過cron定時任務來備份。

  分庫備份的意義當所有庫都備份成一個備份文件時,恢復其中一個數據比較麻煩。所以分庫備份,利於恢復。

for dbname in `mysql -uroot -p123456 -e "show databases;"|grep -Evi "database|infor|perfor"`
do
    mysqldump -uroot -p123456 --events -B $dbname | gzip > /mnt/${dbname}_bak_B.sql.gz
done

7,其他 

# 導出整個數據庫(包含數據庫中的數據)
mysqldump -u username -p dbname > dbname.sql

# 導出數據庫結構(不包含數據)
mysqldump -u username -p -d dbname > dbname.sql

# 導出數據庫中的某張數據表(包含數據)
mysqldump -u username -p dbname tablename > tablename.sql

# 導出數據庫中的某張數據表的表結構(不含數據)
mysqldump -u username -p -d dbname tablename > tablename.sql

 

數據備份策略:

完全備份:備份所有數據

增量備份:備份上次備份后,所有新產生的數據

差異備份:備份完全備份后,所有新產生的數據

 

完全備份(mysqldump)

# mkdir /mydata

# mysqldump  -uroot  -p123456  -A  >  /mydata/alldb.sql     (備份所有)

# mysqldump  -uroot  -p123456  db2 >  /mydata/db2.sql   (備份db2庫)

# mysqldump  -uroot  -p123456  db2   t2  >  /mydata/db2_t2.sql   (備份db2庫的t2表)

# mysqldump  -uroot  -p123456  -B  db3  db2 >  /mydata/twodb.sql  (備份 db3,db2庫)

完全恢復數據(刪除對應的備份數據,然后使用備份文件恢復數據)

# mysqldump  -uroot  -p123456  db4  < /mydata/db4_t2.sql       (恢復t2表)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM