/opt/oldboy.sql ? ? ? ? 最簡單的備份 ? ? ? ?1) ?mysql基于myisam引擎mysqldump -uroot -poldboy ?-B..."/>
溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql分庫分表備份

發(fā)布時間:2020-08-05 17:36:05 來源:網(wǎng)絡(luò) 閱讀:2677 作者:1243983186 欄目:MySQL數(shù)據(jù)庫

一、單獨備份數(shù)據(jù)庫

mysqldump -uroot -poldboy oldboy >/opt/oldboy.sql ? ? ? ? 最簡單的備份 ? ? ? ?

1) ?mysql基于myisam引擎

mysqldump -uroot -poldboy ?-B -x ?-F oldboy | gzip >/opt/oldboy.sql.gz

DBA給的備份:

mysqldump --user=root --all-databases --flush-privileges --lock-all-tables --master-data=1 --flush-logs --triggers --routines --events --hex-blob > /mybackup/alldatabase.sql

2) ?5.5以后默認是innodb(推薦)

mysqldump -uroot -poldboy ?-B ?-F --single-transactio oldboy | gzip >/opt/oldboy.sql.gz

DBA給的備份:

mysqldump --user=root --all-databases --flush-privileges --single-transaction? --master-data=1 --flush-logs --triggers --routines --events --hex-blob > /mybackup/alldatabase.sql?


二、多實例分庫備份數(shù)據(jù)庫(用于寫shell腳本)

主要思想就是把庫列出來,一個for循環(huán)備份

mysql ?-uroot ?-poldboy ?-e"show databases;" | egrep -Evi ?"info|perfor" |sed -r 's#^([a-z].*$)#mysqldump -uroot -poldboy -B ?\1 |gzip >/opt/1.sql.gz #g' |bash

/bin/bash
BAKPATH=/opt/mysql
MYUSER=root
MYPASSWD=123456
SOCKET=/data/3308/mysql.sock
MYCMD="mysql?-u$MYUSER?-p$MYPASSWD?-S?$SOCKET"
MYSQLDUMP=mysqldump?-u$MYUSER?-P$MYPASSWD?-S?$SOCKET?-B?-x?-F?-R
[?!?-d?$BAKPATH?]?&&?mkdir?-p?$BAKPATH
DBLIST=`$MYCMD?-e?"show?databases;?|?sed?1d"?|egrep?-Evi?"mysql|info"?`
for?dbname?in?DBLIST
DO
????????$MYSQLDUMP??$dbname?|gzip?>?/$BAKPATH/${dbname}_$(date?+%F).sql.gz
DONE


提示:-B是連創(chuàng)建庫和查詢庫的語句都備份了,所以建議加上(一般備份多個庫的時候用),-x所有數(shù)據(jù)庫中的所有表加鎖


備份表

?mysqldump -uroot -poldboy 庫名 表名 >/opt/table.sql

三、多實例分表備份

主要思想就是把表列出來,兩層for循環(huán)備份

/bin/bash
BAKPATH=/opt/mysql
MYUSER=root
MYPASSWD=123456
SOCKET=/data/3308/mysql.sock
MYCMD="mysql?-u$MYUSER?-p$MYPASSWD?-S?$SOCKET"
MYSQLDUMP=mysqldump?-u$MYUSER?-P$MYPASSWD?-S?$SOCKET??-x?-F?-R
[?!?-d?$BAKPATH?]?&&?mkdir?-p?$BAKPATH
DBLIST=`$MYCMD?-e?"show?databases;?|?sed?1d"?|egrep?-Evi?"mysql|info"?`
for?dbname?in?DBLIST
do
????????TLIST=`$MYCMD?-e?"show?tables?from?$dbname;"?|?sed?1d`
????????for?tname?in?$TLIST
????????do
????????????????mkdir?-p?$BAKPATH/$dbname
????????????????$MYSQLDUMP?$dbname?$tname?|gzip?>/$BAKPATH/$dbname/${tname}_$(date?+%F).sql.gz
????????done
????????$MYSQLDUMP??$dbname?|gzip?>?/$BAKPATH/${dbname}_$()$(date?+%F).sql.gz
done

注:(純手打,有問題請指出)

如果數(shù)據(jù)庫不大建議兩個都備份,有時候只要求恢復(fù)一個表

-d參數(shù)只備份表結(jié)構(gòu)

-t參數(shù)只備份數(shù)據(jù)

-F刷新binlog日志

其他參數(shù) mysqldump --help查詢

批量恢復(fù)庫大概過程

for dbname in `ls *.sql`;do mysql -uroot -p123456 < $dbname.sql;done

四、增量備份

增量備份時一定要了解二進制的三種模式

可參考內(nèi)容:http://blog.51yip.com/mysql/1042.html

?http://blog.csdn.net/jesseyoung/article/details/41211841

五、數(shù)據(jù)庫恢復(fù)

恢復(fù)時最好的辦法時停庫,不讓往里面寫?

1.數(shù)據(jù)庫可能有多個,但是日志文件記錄的是全部數(shù)據(jù)庫的變化,所以先進行將二進制文件按照數(shù)據(jù)庫進行拆分,用-d參數(shù)可以實現(xiàn):

mysqlbinlog? -d? ?oldboy /var/lib/mysql/mysql-bin.000002 > /tmp/oldboy.sql(去掉誤操作的語句),先導(dǎo)入全備,在導(dǎo)入增備

2.指定時間可能會有誤差,一半用指定位置恢復(fù),確認跳過點后進行恢復(fù)如下:

a)mysqlbinlog?mysql-bin.000002 --start-position=370 --stop-position=440? | mysql -uroot -p

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI