防止人為誤操作MySQL數(shù)據(jù)庫?這次我懂了??!
作者個人研發(fā)的在高并發(fā)場景下,提供的簡單、穩(wěn)定、可擴(kuò)展的延遲消息隊列框架,具有精準(zhǔn)的定時任務(wù)和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業(yè)提供了精準(zhǔn)定時調(diào)度方案,經(jīng)受住了生產(chǎn)環(huán)境的考驗。為使更多童鞋受益,現(xiàn)給出開源框架地址:https://github.com/sunshinelyz/mykit-delay
寫在前面
今天,一位哥們打電話來問我說誤操作了他們公司數(shù)據(jù)庫中的數(shù)據(jù),如何恢復(fù)。他原本的想法是登錄數(shù)據(jù)庫update一個記錄,結(jié)果忘了加where條件,于是悲劇發(fā)生了。今天,我們不講如何恢復(fù)誤操作的數(shù)據(jù)(后面專門講如何恢復(fù)誤刪除的數(shù)據(jù)),我們講講如何從源頭上避免這樣的問題,這才是避免類似問題的根本措施。
如果文章對你有所幫助,請不要吝惜你的點贊、在看、留言和轉(zhuǎn)發(fā),你的支持是我持續(xù)創(chuàng)作的最大動力!
在mysql命令加上選項-U后,當(dāng)發(fā)出沒有WHERE或LIMIT關(guān)鍵字的UPDATE或DELETE時,MySQL程序就會拒絕執(zhí)行。那么,我們基于MySQL提供的這項設(shè)置,就可以輕松實現(xiàn)如何最大程度防止人為誤操作MySQL數(shù)據(jù)庫了。什么?你不信?不信我們就從MySQL的幫助說明說起,一起來看看如何基于MySQL的-u選項實現(xiàn)如何最大程度防止人為誤操作MySQL數(shù)據(jù)庫。
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后,當(dāng)發(fā)出沒有WHERE或LIMIT關(guān)鍵字的UPDATE或DELETE時,MySQL程序就會拒絕執(zhí)行。
指定-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
提示:不加條件無法刪除,目的達(dá)到。
指定別名
我們可以將操作MySQL的命令做成別名,防止他人和DBA誤操作數(shù)據(jù)庫,將操作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
在命令行會話設(shè)置alias mysql='mysql -U'之后,只能在當(dāng)前會話有效,關(guān)閉當(dāng)前連接服務(wù)器的命令行之后,會話失效,則別名設(shè)置也會隨之失效。如果想關(guān)閉連接服務(wù)器的會話終端,別名設(shè)置仍然有效,或者多個會話都能夠使用這個別名來操作數(shù)據(jù)庫,則我們可以將設(shè)置別名的命令添加到/etc/profile系統(tǒng)環(huán)境變量中,如下所示。
- [root@binghe~]# echo "alias mysql='mysql -U'" >>/etc/profile
- [root@binghe~]# . /etc/profile
- [root@binghe~]# tail -1 /etc/profile
- alias mysql='mysql -U'
這樣,當(dāng)我們退出當(dāng)前連接服務(wù)器的會話終端,MySQL的別名設(shè)置依然有效,每次連接服務(wù)器時,不必在當(dāng)前會話中重新設(shè)置MySQL的命令別名,直接使用即可。
總結(jié)
在mysql命令加上選項-U后,當(dāng)發(fā)出沒有WHERE或LIMIT關(guān)鍵字的UPDATE或DELETE時,MySQL程序拒絕執(zhí)行。
本文轉(zhuǎn)載自微信公眾號「冰河技術(shù)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系冰河技術(shù)公眾號。