防止人為誤操作MySQL數據庫?這次我懂了!!
作者個人研發的在高并發場景下,提供的簡單、穩定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業提供了精準定時調度方案,經受住了生產環境的考驗。為使更多童鞋受益,現給出開源框架地址:https://github.com/sunshinelyz/mykit-delay
寫在前面
今天,一位哥們打電話來問我說誤操作了他們公司數據庫中的數據,如何恢復。他原本的想法是登錄數據庫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程序拒絕執行。
本文轉載自微信公眾號「冰河技術」,可以通過以下二維碼關注。轉載本文請聯系冰河技術公眾號。