一、mysqldump的工作原理 、
利用mysqldump命令備份數據的過程,實際上就是把數據從mysql庫以邏輯的sql語句的形式直接輸出或生成備份的文件的過程
利用這個備份文件恢復的時候的原理?就是把備份的sql命令再執行一遍。
二、備份多個庫
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | oldboy | | oldboy_gbk | | oldboy_utf8 | | performance_schema | +--------------------+ 6 rows in set (0.00 sec) mysql> quit Bye [root@localhost ~]# mysqldump -uroot -pdubin -B oldboy oldboy_gbk|gzip >/opt/all_bak.sql.gz [root@localhost ~]# ls -l /opt/all_bak.sql.gz -rw-r--r--. 1 root root 1374 9月 21 11:50 /opt/all_bak.sql.gz [root@localhost ~]#
三、如何做分庫備份?
分庫備份實際上就是執行一個備份語句備份一個庫,如果數據庫里有多個庫,就執行多條相同的備份單個庫的備份語句就可以備份多個庫了,注意每個庫都可以用對應備份的庫作為庫名,結尾加 .sql。備份多個庫的命令如下:
mysqldump -uroot -pdubin -B oldboy ……
mysqldump -uroot -pdubin -B oldboy_gbk ……
分庫備份過程
[root@localhost ~]# mysql -uroot -pdubin -e "show databases;" +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | oldboy | | oldboy_gbk | | oldboy_utf8 | | performance_schema | +--------------------+ [root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor" mysql oldboy oldboy_gbk oldboy_utf8 [root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed 's#^#mysqldump -uroot -pdubin -B #g' mysqldump -uroot -pdubin -B mysql mysqldump -uroot -pdubin -B oldboy mysqldump -uroot -pdubin -B oldboy_gbk mysqldump -uroot -pdubin -B oldboy_utf8 [root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed 's#^([a-z].*$)#mysqldump -uroot -pdubin -B \1 >/opt/\1.sql#g' sed:-e 表達式 #1,字符 59:“s”命令的RHS非法引用\1 [root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^([a-z].*$)#mysqldump -uroot -pdubin -B \1 >/opt/\1.sql#g' mysqldump -uroot -pdubin -B mysql >/opt/mysql.sql mysqldump -uroot -pdubin -B oldboy >/opt/oldboy.sql mysqldump -uroot -pdubin -B oldboy_gbk >/opt/oldboy_gbk.sql mysqldump -uroot -pdubin -B oldboy_utf8 >/opt/oldboy_utf8.sql [root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^([a-z].*$)#mysqldump -uroot -pdubin -B \1|gzip >/opt/\1.sql.gz#g' mysqldump -uroot -pdubin -B mysql|gzip >/opt/mysql.sql.gz mysqldump -uroot -pdubin -B oldboy|gzip >/opt/oldboy.sql.gz mysqldump -uroot -pdubin -B oldboy_gbk|gzip >/opt/oldboy_gbk.sql.gz mysqldump -uroot -pdubin -B oldboy_utf8|gzip >/opt/oldboy_utf8.sql.gz [root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^([a-z].*$)#mysqldump -uroot -pdubin -B \1|gzip >/opt/\1.sql.gz#g'|bash -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly. [root@localhost ~]# ll /opt/ 總用量 196 -rw-r--r--. 1 root root 1374 9月 21 11:50 all_bak.sql.gz -rw-r--r--. 1 root root 2371 9月 21 08:45 mysql_bak_B_compact.sql -rw-r--r--. 1 root root 4651 9月 21 08:45 mysql_bak_B.sql -rw-r--r--. 1 root root 4508 9月 21 08:43 mysql_bak.sql -rw-r--r--. 1 root root 1355 9月 21 08:47 mysql_bak.sql.gz -rw-r-----. 1 root root 498 9月 20 22:17 mysqlbin_oldboy.000001 -rw-r--r--. 1 root root 144535 9月 21 12:01 mysql.sql.gz -rw-r--r--. 1 root root 203 9月 20 08:46 oldboy_bak1.sql -rw-r--r--. 1 root root 2826 9月 20 08:46 oldboy_bak.sql -rw-r--r--. 1 root root 512 9月 21 12:01 oldboy_gbk.sql.gz -rw-r--r--. 1 root root 1354 9月 21 12:01 oldboy.sql.gz -rw-r--r--. 1 root root 512 9月 21 12:01 oldboy_utf8.sql.gz [root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^([a-z].*$)#mysqldump -uroot -pdubin --event -B \1|gzip >/opt/\1.sql.gz#g'|bash [root@localhost ~]# mkdir /opt/bak [root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^([a-z].*$)#mysqldump -uroot -pdubin --event -B \1|gzip >/opt/bak/\1.sql.gz#g'|bash [root@localhost ~]# ll /opt/bak 總用量 156 -rw-r--r--. 1 root root 144570 9月 21 12:03 mysql.sql.gz -rw-r--r--. 1 root root 534 9月 21 12:03 oldboy_gbk.sql.gz -rw-r--r--. 1 root root 1371 9月 21 12:03 oldboy.sql.gz -rw-r--r--. 1 root root 533 9月 21 12:03 oldboy_utf8.sql.gz [root@localhost ~]#
mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed -r 's#^([a-z].*$)#mysqldump -uroot -pdubin --event -B \1|gzip >/opt/bak/\1.sql.gz#g'|bash
分庫備份的意義何在?
有時一個企業的數據庫里會有多個庫,例如(www,bbs,blog),但是出問題時候的很可能是一個庫,如果在備份時把所有的庫都備份成一個數據文件的話,恢復某一個庫的數據時就比較麻煩了。
shell腳本實現分表分庫備份的腳本
[root@localhost ~]# vi fenku.sh for dbname in `mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"` do mysqldump -uroot -pdubin --event -B $dbname|gzip >/opt/bak/${dbname}.sql.gz done
root@localhost ~]# rm -f /opt/bak/* [root@localhost ~]# sh fenku.sh [root@localhost ~]# ll /opt/bak 總用量 156 -rw-r--r--. 1 root root 144569 9月 21 12:12 mysql.sql.gz -rw-r--r--. 1 root root 534 9月 21 12:12 oldboy_gbk.sql.gz -rw-r--r--. 1 root root 1370 9月 21 12:12 oldboy.sql.gz -rw-r--r--. 1 root root 533 9月 21 12:12 oldboy_utf8.sql.gz [root@localhost ~]#