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表)