/opt/oldboy.sql ? ? ? ? 最簡單的備份 ? ? ? ?1) ?mysql基于myisam引擎mysqldump -uroot -poldboy ?-B..."/>
您好,登錄后才能下訂單哦!
一、單獨備份數(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
免責(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)容。