最近工作中又遇到生產(chǎn)環(huán)境數(shù)據(jù)庫的表被刪除的情況,其實這樣的事情本不該發(fā)生。
目前創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站運營、企業(yè)網(wǎng)站設(shè)計、普蘭店網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
幾個小建議:
生產(chǎn)環(huán)境數(shù)據(jù)庫開發(fā)人員只能有查詢權(quán)限,甚至級別低的開發(fā)根本沒權(quán)限查生產(chǎn)系統(tǒng),類似表的刪除交給專業(yè)的DBA來操作,當(dāng)然有些單位沒有所謂的DBA.
專職的DBA基本都具備一個屬性,就是每一步的操作都會考慮好后果,所以刪除表之前都會有一個備份。
建立審核制度,truncate 、drop、 rm這樣的操作可能是致命的,必須要審核。
可以先rename表,比如把表rename成bak_date_tablename,定期去清理一下。
數(shù)據(jù)庫每天的備份必不可少,管他邏輯備份還是物理備份,都是必須有的,看看你家數(shù)據(jù)庫有沒有,數(shù)據(jù)丟失從來都不是一件小事。
接下來說說,數(shù)據(jù)庫的一個小功能,“延遲復(fù)制”
Oracle dataguard 有延遲復(fù)制,MySQL 5.6也有延遲復(fù)制,老司機建議您在有條件的情況下,可以開啟延遲復(fù)制,一旦數(shù)據(jù)丟失,我們也可以及時恢復(fù)數(shù)據(jù)。
--Oracle
SQL> select switchover_status ,open_mode from v$database;
SWITCHOVER_STATUS OPEN_MODE
-------------------- --------------------
NOT ALLOWED READ ONLY WITH APPLY
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database recover managed standby database delay 5 disconnect from session; --5分鐘,可以按照小時來設(shè)置
Database altered.
--alter*.log
RFS[2]: Selected log 4 for thread 1 sequence 51 dbid 1483481154 branch 955700418
Fri Sep 29 20:39:39 2017
Media Recovery Delayed for 5 minute(s)(thread 1 sequence 50)
Fri Sep 29 20:39:47 2017
Archived Log entry 48 added for thread 1 sequence 51 ID 0x58707be4 dest 1:
Fri Sep 29 20:39:47 2017
--MySQL
mysql>stop slave;
mysql>CHANGE MASTER TO MASTER_DELAY = 600;
mysql>start slave;
mysql>show slave status \G;
具體怎么利用延遲復(fù)制來恢復(fù)數(shù)據(jù),大家需要自己做測試了哈
作為一個合格的DBA,不會只有一種方法恢復(fù)數(shù)據(jù)的。盡量不要出現(xiàn)誤刪除操作,畢竟恢復(fù)數(shù)據(jù)的過程,業(yè)務(wù)也會中斷,損失在所難免的。
話說有沒有熱愛打籃球的兄弟,周末可以交流一下數(shù)據(jù)庫技術(shù)和球技哈~