【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!
點擊上方藍色“冰河技術”,關注并選擇“設為星標”
持之以恒,貴在堅持,每天進步一點點!
作者個人研發的在高并發場景下,提供的簡單、穩定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業提供了精準定時調度方案,經受住了生產環境的考驗。為使更多童鞋受益,現給出開源框架地址:
https://github.com/sunshinelyz/mykit-delay
PS: 歡迎各位Star源碼,也可以pr你牛逼哄哄的代碼。? ? ??
寫在前面
今天,一位哥們打電話來問我說誤操作了他們公司數據庫中的數據,如何恢復。他原本的想法是登錄數據庫update一個記錄,結果忘了加where條件,于是悲劇發生了。今天,我們不講如何恢復誤操作的數據(后面專門講如何恢復誤刪除的數據),我們講講如何從源頭上避免這樣的問題,這才是避免類似問題的根本措施。
如果文章對你有所幫助,請不要吝惜你的點贊、在看、留言和轉發,你的支持是我持續創作的最大動力!
在mysql命令加上選項-U后,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程序就會拒絕執行。那么,我們基于MySQL提供的這項設置,就可以輕松實現如何最大程度防止人為誤操作MySQL數據庫了。什么?你不信?不信我們就從MySQL的幫助說明說起,一起來看看如何基于MySQL的-u選項實現如何最大程度防止人為誤操作MySQL數據庫。
MySQL幫助說明
[root@binghe~]#?mysql?--help|grep?dummy??????-U,?--i-am-a-dummy?Synonym?for?option?--safe-updates,?-U. i-am-a-dummy??????FALSE在mysql命令加上選項-U后,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程序就會拒絕執行。
指定-U登錄測試
[root@binghe~]#?mysql?-uroot?-proot?-S?/data/3306/mysql.sock?-U Welcome?to?the?MySQL?monitor.?Commands?end?with?;?or?\g. Your?MySQL?connection?id?is?14 Server?version:?5.7.24-log?MySQL?Community?Server?(GPL) Copyright?(c)?2000,?2018,?Oracle?and/or?its?affiliates.?All?rights?reserved. Oracle?is?a?registered?trademark?of?Oracle?Corporation?and/or?its affiliates.?Other?names?may?be?trademarks?of?their?respective owners. Type?'help;'?or?'\h'?for?help.?Type?'\c'?to?clear?the?current?input?statement. mysql>?delete?from?oldboy.student; ERROR?1175?(HY000):?You?are?using?safe?update?mode?and?you?tried?to?update?a?table?without?a?WHERE?that?uses?a?KEY?column mysql>?quit Bye提示:不加條件無法刪除,目的達到。
指定別名
我們可以將操作MySQL的命令做成別名,防止他人和DBA誤操作數據庫,將操作MySQL的命令做成別名也非常簡單,這里,我們直接上示例了,如下所示。
[root@binghe~]#?alias?mysql='mysql?-U' [root@binghe~]#?mysql?-uroot?-poldboy123?-S?/data/3306/mysql.sock Welcome?to?the?MySQL?monitor.?Commands?end?with?;?or?\g. Your?MySQL?connection?id?is?15 Server?version:?5.7.24-log?MySQL?Community?Server?(GPL) Type?'help;'?or?'\h'?for?help.?Type?'\c'?to?clear?the?current?input?statement. mysql>?delete?from?oldboy.student; ERROR?1175?(HY000):?You?are?using?safe?update?mode?and?you?tried?to?update?a?table?without?a?WHERE?that?uses?a?KEY?column mysql>?delete?from?oldboy.student?where?Sno=5; Query?OK,?1?row?affected?(0.02?sec) mysql>?quit Bye在命令行會話設置alias mysql='mysql -U'之后,只能在當前會話有效,關閉當前連接服務器的命令行之后,會話失效,則別名設置也會隨之失效。如果想關閉連接服務器的會話終端,別名設置仍然有效,或者多個會話都能夠使用這個別名來操作數據庫,則我們可以將設置別名的命令添加到/etc/profile系統環境變量中,如下所示。
[root@binghe~]#?echo?"alias?mysql='mysql?-U'"?>>/etc/profile [root@binghe~]#?.?/etc/profile [root@binghe~]#?tail?-1?/etc/profile alias?mysql='mysql?-U'這樣,當我們退出當前連接服務器的會話終端,MySQL的別名設置依然有效,每次連接服務器時,不必在當前會話中重新設置MySQL的命令別名,直接使用即可。
總結
在mysql命令加上選項-U后,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程序拒絕執行。
IT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識
總結
以上是生活随笔為你收集整理的【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬件知识:串口通讯的起始、数据、停止位是
- 下一篇: 解惑图数据库!你知道什么是图数据库吗?