写在后面
明天,一位哥们打电话来问我说误操作了他们公司数据库中的数据,如何复原。他本来的想法是登录数据库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 -UWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 14Server 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 itsaffiliates. Other names may be trademarks of their respectiveowners.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 columnmysql> quitBye
提醒:不加条件无奈删除,目标达到。
指定别名
咱们能够将操作MySQL的命令做成别名,避免别人和DBA误操作数据库,将操作MySQL的命令做成别名也非常简单,这里,咱们间接上示例了,如下所示。
[root@binghe~]# alias mysql='mysql -U'[root@binghe~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sockWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 15Server 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 columnmysql> delete from oldboy.student where Sno=5;Query OK, 1 row affected (0.02 sec)mysql> quitBye
在命令行会话设置alias mysql='mysql -U'之后,只能在以后会话无效,敞开以后连贯服务器的命令行之后,会话生效,则别名设置也会随之生效。如果想敞开连贯服务器的会话终端,别名设置依然无效,或者多个会话都可能应用这个别名来操作数据库,则咱们能够将设置别名的命令增加到/etc/profile零碎环境变量中,如下所示。
[root@binghe~]# echo "alias mysql='mysql -U'" >>/etc/profile[root@binghe~]# . /etc/profile[root@binghe~]# tail -1 /etc/profilealias mysql='mysql -U'
这样,当咱们退出以后连贯服务器的会话终端,MySQL的别名设置仍然无效,每次连贯服务器时,不用在以后会话中从新设置MySQL的命令别名,间接应用即可。
总结
在mysql命令加上选项-U后,当收回没有WHERE或LIMIT关键字的UPDATE或DELETE时,MySQL程序拒绝执行。
重磅福利
微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天浏览超硬核技术干货,公众号内回复【PDF】有我筹备的一线大厂面试材料和我原创的超硬核PDF技术文档,以及我为大家精心筹备的多套简历模板(不断更新中),心愿大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过致力胜利进入到了心仪的公司,肯定不要懈怠放松,职场成长和新技术学习一样,逆水行舟。如果有幸咱们江湖再见!
另外,我开源的各个PDF,后续我都会继续更新和保护,感激大家长期以来对冰河的反对!!
写在最初
如果你感觉冰河写的还不错,请微信搜寻并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者曾经通过浏览「 冰河技术 」微信公众号文章,吊打面试官,胜利跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样晋升本人的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何晋升技术能力不再迷茫!