一、mysqldump的工作原理 、
利用mysqldump命令备份数据的过程,实际上就是把数据从mysql库以逻辑的sql语句的形式直接输出或生成备份的文件的过程
利用这个备份文件恢复的时候的原理?就是把备份的sql命令再执行一遍。
二、备份多个库
1mysql> show databases; 2+--------------------+ 3| Database | 4+--------------------+ 5| information_schema | 6| mysql | 7| oldboy | 8| oldboy_gbk | 9| oldboy_utf8 | 10| performance_schema | 11+--------------------+ 126 rows in set (0.00 sec) 13 14mysql> quit 15Bye 16[root@localhost ~]# mysqldump -uroot -pdubin -B oldboy oldboy_gbk|gzip >/opt/all_bak.sql.gz 17[root@localhost ~]# ls -l /opt/all_bak.sql.gz 18-rw-r--r--. 1 root root 1374 9月 21 11:50 /opt/all_bak.sql.gz 19[root@localhost ~]#
三、如何做分库备份?
分库备份实际上就是执行一个备份语句备份一个库,如果数据库里有多个库,就执行多条相同的备份单个库的备份语句就可以备份多个库了,注意每个库都可以用对应备份的库作为库名,结尾加 .sql。备份多个库的命令如下:
1mysqldump -uroot -pdubin -B oldboy …… 2mysqldump -uroot -pdubin -B oldboy_gbk ……
分库备份过程
1[root@localhost ~]# mysql -uroot -pdubin -e "show databases;" 2+--------------------+ 3| Database | 4+--------------------+ 5| information_schema | 6| mysql | 7| oldboy | 8| oldboy_gbk | 9| oldboy_utf8 | 10| performance_schema | 11+--------------------+ 12[root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor" 13mysql 14oldboy 15oldboy_gbk 16oldboy_utf8 17[root@localhost ~]# mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"|sed 's#^#mysqldump -uroot -pdubin -B #g' 18mysqldump -uroot -pdubin -B mysql 19mysqldump -uroot -pdubin -B oldboy 20mysqldump -uroot -pdubin -B oldboy_gbk 21mysqldump -uroot -pdubin -B oldboy_utf8 22[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' 23sed:-e 表达式 #1,字符 59:“s”命令的RHS非法引用\1 24[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' 25mysqldump -uroot -pdubin -B mysql >/opt/mysql.sql 26mysqldump -uroot -pdubin -B oldboy >/opt/oldboy.sql 27mysqldump -uroot -pdubin -B oldboy_gbk >/opt/oldboy_gbk.sql 28mysqldump -uroot -pdubin -B oldboy_utf8 >/opt/oldboy_utf8.sql 29[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' 30mysqldump -uroot -pdubin -B mysql|gzip >/opt/mysql.sql.gz 31mysqldump -uroot -pdubin -B oldboy|gzip >/opt/oldboy.sql.gz 32mysqldump -uroot -pdubin -B oldboy_gbk|gzip >/opt/oldboy_gbk.sql.gz 33mysqldump -uroot -pdubin -B oldboy_utf8|gzip >/opt/oldboy_utf8.sql.gz 34[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 35-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly. 36[root@localhost ~]# ll /opt/ 37总用量 196 38-rw-r--r--. 1 root root 1374 9月 21 11:50 all_bak.sql.gz 39-rw-r--r--. 1 root root 2371 9月 21 08:45 mysql_bak_B_compact.sql 40-rw-r--r--. 1 root root 4651 9月 21 08:45 mysql_bak_B.sql 41-rw-r--r--. 1 root root 4508 9月 21 08:43 mysql_bak.sql 42-rw-r--r--. 1 root root 1355 9月 21 08:47 mysql_bak.sql.gz 43-rw-r-----. 1 root root 498 9月 20 22:17 mysqlbin_oldboy.000001 44-rw-r--r--. 1 root root 144535 9月 21 12:01 mysql.sql.gz 45-rw-r--r--. 1 root root 203 9月 20 08:46 oldboy_bak1.sql 46-rw-r--r--. 1 root root 2826 9月 20 08:46 oldboy_bak.sql 47-rw-r--r--. 1 root root 512 9月 21 12:01 oldboy_gbk.sql.gz 48-rw-r--r--. 1 root root 1354 9月 21 12:01 oldboy.sql.gz 49-rw-r--r--. 1 root root 512 9月 21 12:01 oldboy_utf8.sql.gz 50[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 51[root@localhost ~]# mkdir /opt/bak 52[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 53[root@localhost ~]# ll /opt/bak 54总用量 156 55-rw-r--r--. 1 root root 144570 9月 21 12:03 mysql.sql.gz 56-rw-r--r--. 1 root root 534 9月 21 12:03 oldboy_gbk.sql.gz 57-rw-r--r--. 1 root root 1371 9月 21 12:03 oldboy.sql.gz 58-rw-r--r--. 1 root root 533 9月 21 12:03 oldboy_utf8.sql.gz 59[root@localhost ~]# 60 61mysql -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脚本实现分表分库备份的脚本
1[root@localhost ~]# vi fenku.sh 2 3for dbname in `mysql -uroot -pdubin -e "show databases;"|grep -Evi "database|infor|perfor"` 4do 5 mysqldump -uroot -pdubin --event -B $dbname|gzip >/opt/bak/${dbname}.sql.gz 6done 7 8root@localhost ~]# rm -f /opt/bak/* 9[root@localhost ~]# sh fenku.sh 10[root@localhost ~]# ll /opt/bak 11总用量 156 12-rw-r--r--. 1 root root 144569 9月 21 12:12 mysql.sql.gz 13-rw-r--r--. 1 root root 534 9月 21 12:12 oldboy_gbk.sql.gz 14-rw-r--r--. 1 root root 1370 9月 21 12:12 oldboy.sql.gz 15-rw-r--r--. 1 root root 533 9月 21 12:12 oldboy_utf8.sql.gz 16[root@localhost ~]#