分库备份的意义是什么 ?
有时一个企业的数据库里面有多个库,例如(www,bbs,cms),但是出问题时可能是某一个库,如果在备份时候把所有的库备份成一个数据文件的话,恢复数据就比较麻烦。
分库分表的缺点:文件多,碎
1,备份一个完整全备,再做一个分库分表的备份
2,脚本批量服务多个SQL文件
3,数据量太大不合适以上方法
#以下是完整的分库,分表的备份脚本和思路
分库:
1)编程思想
mysqldump -uroot -p db1 >db1.sql mysqldump -uroot -p db2 >db2.sql
2)拿到库名,列表
mysql -uroot -p123456 -e "show databases"| grep -Evi "database|information_schema|performance_schema" | sed -r 's#^([a-z].*$)#mysqldump -uroot -p123456 --events -B \1 | gzip >/root/back/\1.sql.gz#g'|sh
3)循环db,dump
#!/bin/bash #Date #by #Desc MYUSER=root MYPASSWD=123456 BACKDIR="/root/back" MYHOST='127.0.0.1' MYCMD="mysql -u$MYUSER -p$MYPASSWD -h$MYHOST" MYDUMP="mysqldump -u$MYUSER -p$MYPASSWD -h$MYHOST -x -E -B -F -R " DBLIST=`$MYCMD -e "show databases;"|grep -Evi "database|_schema|mysql"` [ ! -d $BACKDIR ] && mkdir $BACKDIR for dbname in $DBLIST do $MYDUMP $dbname|gzip > $BACKDIR/${dbname}_$(date +%F).sql.gz done
分表:
#!/bin/bash #Date #by #Desc MYUSER=root MYPASSWD=123456 BACKDIR="/root/back" MYHOST='127.0.0.1' MYCMD="mysql -u$MYUSER -p$MYPASSWD -h$MYHOST" MYDUMP="mysqldump -u$MYUSER -p$MYPASSWD -h$MYHOST -x " DBLIST=`$MYCMD -e "show databases;"|grep -Evi "database|_schema|mysql"` [ ! -d $BACKDIR ] && mkdir $BACKDIR for dbname in $DBLIST do TLIST=`$MYCMD -e "show tables from $dbname;" |sed 1d` for tname in $TLIST do mkdir -p $BACKDIR/$dbname $MYDUMP $dbname $tname|gzip > $BACKDIR/${dbname}/${dbname}_${tname}_$(date +%F).sql.gz done done