An example of MySQL database protection against human error

  • 2020-06-19 11:49:28
  • OfStack

Many developers have encountered the situation of wrong operation when operating MySQL database, such as the update statement forgetting to add where condition when updating the database, which will cause extremely tragic results. This paper gives the following detailed explanation for the methods to prevent the misoperation of MySQL database:

1. mysql help


# mysql --help|grep dummy  
 -U, --i-am-a-dummy Synonym for option --safe-updates, -U. 
i-am-a-dummy  FALSE

With the option -ES12en added to the mysql command, the mysql program refuses to execute when issuing UPDATE or DELETE without the WHERE or LIMIT keyword

2. Specify the -ES20en login test


# mysql -uroot -poldboy123 -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.5.32-log MySQL Community Server (GPL) 
Copyright (c) 2000, 2013, 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

Tip: the purpose can not be deleted without conditions.

3. Make the alias to prevent DBA from misoperation


# alias mysql='mysql -U' 
# 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.5.32-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 
# echo "alias mysql='mysql -U'" >>/etc/profile 
# . /etc/profile 
# tail -1 /etc/profile 
alias mysql='mysql -U'

Conclusion: The mysql program refuses to execute when issuing UPDATE or DELETE without WHERE or LIMIT keywords with the option -ES31en added to the mysql command


Related articles: