您好,登錄后才能下訂單哦!
一、單獨備份數據庫
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?
二、多實例分庫備份數據庫(用于寫shell腳本)
主要思想就是把庫列出來,一個for循環備份
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是連創建庫和查詢庫的語句都備份了,所以建議加上(一般備份多個庫的時候用),-x所有數據庫中的所有表加鎖
備份表
?mysqldump -uroot -poldboy 庫名 表名 >/opt/table.sql
三、多實例分表備份
主要思想就是把表列出來,兩層for循環備份
/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
注:(純手打,有問題請指出)
如果數據庫不大建議兩個都備份,有時候只要求恢復一個表
-d參數只備份表結構
-t參數只備份數據
-F刷新binlog日志
其他參數 mysqldump --help查詢
批量恢復庫大概過程
for dbname in `ls *.sql`;do mysql -uroot -p123456 < $dbname.sql;done
四、增量備份
增量備份時一定要了解二進制的三種模式
可參考內容:http://blog.51yip.com/mysql/1042.html
?http://blog.csdn.net/jesseyoung/article/details/41211841
五、數據庫恢復
恢復時最好的辦法時停庫,不讓往里面寫?
1.數據庫可能有多個,但是日志文件記錄的是全部數據庫的變化,所以先進行將二進制文件按照數據庫進行拆分,用-d參數可以實現:
mysqlbinlog? -d? ?oldboy /var/lib/mysql/mysql-bin.000002 > /tmp/oldboy.sql(去掉誤操作的語句),先導入全備,在導入增備
2.指定時間可能會有誤差,一半用指定位置恢復,確認跳過點后進行恢復如下:
a)mysqlbinlog?mysql-bin.000002 --start-position=370 --stop-position=440? | mysql -uroot -p
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。