分库备份的意义是什么 ?
有时一个企业的数据库里面有多个库,例如(www,bbs,cms),但是出问题时可能是某一个库,如果在备份时候把所有的库备份成一个数据文件的话,恢复数据就比较麻烦。
分库分表的缺点:文件多,碎
1,备份一个完整全备,再做一个分库分表的备份
2,脚本批量服务多个SQL文件
3,数据量太大不合适以上方法
#以下是完整的分库,分表的备份脚本和思路
分库:
1)编程思想
1
2
3
|
mysqldump -uroot -p db1 >db1.sql
mysqldump -uroot -p db2 >db2.sql
|
2)拿到库名,列表
1
2
3
4
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/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
|
分表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/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
|
本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1788002
,如需转载请自行联系原作者