1. 程式人生 > 實用技巧 >【MySQL】如何最大程度防止人為誤操作MySQL資料庫?這次我懂了!!

【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程式拒絕執行。

冰河原創PDF

關注 冰河技術 微信公眾號:

回覆 “併發程式設計” 領取《深入理解高併發程式設計(第1版)》PDF文件。

回覆 “併發原始碼” 領取《併發程式設計核心知識(原始碼分析篇 第1版)》PDF文件。

回覆 ”限流“ 領取《億級流量下的分散式解決方案》PDF文件。

回覆 “設計模式” 領取《深入淺出Java23種設計模式》PDF文件。

回覆 “Java8新特性” 領取 《Java8新特性教程》PDF文件。

回覆 “分散式儲存” 領取《跟冰河學習分散式儲存技術》 PDF文件。

回覆 “Nginx” 領取《跟冰河學習Nginx技術》PDF文件。

回覆 “網際網路工程” 領取《跟冰河學習網際網路工程技術》PDF文件。

重磅福利

微信搜一搜【冰河技術】微信公眾號,關注這個有深度的程式設計師,每天閱讀超硬核技術乾貨,公眾號內回覆【PDF】有我準備的一線大廠面試資料和我原創的超硬核PDF技術文件,以及我為大家精心準備的多套簡歷模板(不斷更新中),希望大家都能找到心儀的工作,學習是一條時而鬱鬱寡歡,時而開懷大笑的路,加油。如果你通過努力成功進入到了心儀的公司,一定不要懈怠放鬆,職場成長和新技術學習一樣,不進則退。如果有幸我們江湖再見!

另外,我開源的各個PDF,後續我都會持續更新和維護,感謝大家長期以來對冰河的支援!!