分庫備份的意義是什麼 ?
有時乙個企業的資料庫裡面有多個庫,例如(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/$_$(
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/$/$_$_$(
date
+%f).sql.gz
done
done
mysql分庫分表備份 mysql分庫分表備份
一 單獨備份資料庫 mysqldump uroot poldboy oldboy opt oldboy.sql 最簡單的備份 1 mysql基於myisam引擎 mysqldump uroot poldboy b x f oldboy gzip opt oldboy.sql.gz 2 5.5以後預設...
mysql分庫備份 MySQL分庫備份與分表備份
mysql分庫備份與分表備份 1 分庫備份 要求 將mysql資料庫中的使用者資料庫備份,備份的資料庫檔案以時間命名 指令碼內容如下 root db01 scripts vim backup database.sh bin bash mysql user root mysql pass 123456...
分庫分表個人思路
一般業界,對訂單資料的分庫分表,有兩類思路 按照訂單號來切分 按照使用者id來切分。方案一 按照訂單號來做 hash分散訂單資料 把訂單號看作是乙個字串,做 hash,分散到多個伺服器去。具體到哪個庫 哪個表儲存資料呢?訂單號裡面的數字來記錄著。如果要查詢某使用者的所有訂單呢?由於是根據訂單號來分散...