【MySQL】如何最大程度防止人為誤操作MySQL數據庫?這次我懂了!!

寫在前面

今天,一位哥們打電話來問我說誤操作了他們公司數據庫中的數據,如何恢復。他原本的想法是登錄數據庫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程序拒絕執行。

重磅福利

關注「 冰河技術 」微信公眾號,後台回復 「設計模式」 關鍵字領取《深入淺出Java 23種設計模式》PDF文檔。回復「Java8」關鍵字領取《Java8新特性教程》PDF文檔。回復「限流」關鍵字獲取《億級流量下的分佈式限流解決方案》PDF文檔,三本PDF均是由冰河原創並整理的超硬核教程,面試必備!!

好了,今天就聊到這兒吧!別忘了點個贊,給個在看和轉發,讓更多的人看到,一起學習,一起進步!!

寫在最後

如果你覺得冰河寫的還不錯,請微信搜索並關注「 冰河技術 」微信公眾號,跟冰河學習高並發、分佈式、微服務、大數據、互聯網和雲原生技術,「 冰河技術 」微信公眾號更新了大量技術專題,每一篇技術文章乾貨滿滿!不少讀者已經通過閱讀「 冰河技術 」微信公眾號文章,吊打面試官,成功跳槽到大廠;也有不少讀者實現了技術上的飛躍,成為公司的技術骨幹!如果你也想像他們一樣提升自己的能力,實現技術能力的飛躍,進大廠,升職加薪,那就關注「 冰河技術 」微信公眾號吧,每天更新超硬核技術乾貨,讓你對如何提升技術能力不再迷茫!

Tags: