乐趣区

关于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】有我筹备的一线大厂面试材料和我原创的超硬核 PDF 技术文档,以及我为大家精心筹备的多套简历模板(不断更新中),心愿大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过致力胜利进入到了心仪的公司,肯定不要懈怠放松,职场成长和新技术学习一样,逆水行舟。如果有幸咱们江湖再见!

另外,我开源的各个 PDF,后续我都会继续更新和保护,感激大家长期以来对冰河的反对!!

写在最初

如果你感觉冰河写的还不错,请微信搜寻并关注「冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者曾经通过浏览「 冰河技术 」微信公众号文章,吊打面试官,胜利跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样晋升本人的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术」微信公众号吧,每天更新超硬核技术干货,让你对如何晋升技术能力不再迷茫!

退出移动版