用delete命令来个不小心删除了user表,导致损失了时间和精力

来源:转载


运行环境:

操作系统:CentOS release 6.8 (Final)

数据库:MySQL 5.5.52-cll-lve

Web应用软件:Apache/2.2.15(Unix)

问题:操作mysql数据库的user表,计划删除一条重复的记录,不小心删除了整个user表,当时操作的命令是:delete from mysql.user;忘记加where条件。最终导致Linux系统上的考试系统、论坛和监控系统暂停服务。

强烈建设:定期备份数据,可以避免许多风险性发生和损失。

先回顾在服务器上的整个操作过程:

mysql>select * from mysql.user;

22rows in set (0.01 sec) #该用户表中存放了22条记录

mysql>delete from mysql.user; #忘加where条件了

QueryOK, 22 rows affected (0.00 sec) #直接删除了22条记录

mysql>exit

Bye

[[email protected]]# mysql -u root -p

Enterpassword:

ERROR1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) #登录不了数据库系统

解决问题过程:

[[email protected]]# find / -name mysql #找数据库安装路径

/var/webmin/modules/mysql

/var/lib/mysql

/var/lib/mysql/mysql

/var/lib/mysql20150811/mysql

/usr/bin/mysql

/usr/include/mysql

/usr/include/mysql/mysql

/usr/lib64/mysql

/usr/share/mysql

[[email protected]]# cd /etc

[[email protected]]# vi my.cnf

[mysqld]

skip-grant-table #加该条语句,跳跃授权表的限制,无需密码登录数据库

[[email protected]]# mysql -uroot –p

Enterpassword:

mysql>show databases;

+--------------------+

|Database |

+--------------------+

|information_schema |

|a |

|back20150625ultrax |

|cacti |

|cacti20151220 |

|cacti20160104 |

|edusoho |

|feifeicms |

|mysql |

|performance_schema |

|phpcom |

|qibosoft |

|qibosofts |

|skyboy |

|study |

|syslog |

|test |

|test1 |

|tt |

|ultrax |

|zabbix |

+--------------------+

21rows in set (0.02 sec)

Mysql>usemsyql;

mysql>UPDATE user SET Password=PASSWORD('***') WHERE user='root';

mysql>flushprivileges;

mysql>exit

#mysql–uroot -p

mysql>show databases;#新问题是更新密码后,看不到大部分数据库,问题就是在mysql.user表,对数据库没有授好权;

+--------------------+

|Database |

+--------------------+

|information_schema |

|cacti |

+--------------------+

2rows in set (0.00 sec)

通过多种方式测试,最终通过重新构建user表

#servicemysqldstop#mysqld_safe--skip-grant-tables还要重新开一个ssh连接:#mysql#deletemysql;#INSERTINTO`user`(`Host`,`User`,`Password`,`Select_priv`,`Insert_priv`,`Update_priv`,`Delete_priv`,`Create_priv`,`Drop_priv`,`Reload_priv`,`Shutdown_priv`,`Process_priv`,`File_priv`,`Grant_priv`,`References_priv`,`Index_priv`,`Alter_priv`,`Show_db_priv`,`Super_priv`,`Create_tmp_table_priv`,`Lock_tables_priv`,`Execute_priv`,`Repl_slave_priv`,`Repl_client_priv`,`Create_view_priv`,`Show_view_priv`,`Create_routine_priv`,`Alter_routine_priv`,`Create_user_priv`,`Event_priv`,`Trigger_priv`,`Create_tablespace_priv`,`ssl_type`,`ssl_cipher`,`x509_issuer`,`x509_subject`,`max_questions`,`max_updates`,`max_connections`,`max_user_connections`,`plugin`,`authentication_string`)VALUES#flushprivileges;#mysqlrestartmysql#mysql–uroot–pmysql>usemysql

mysql> update user setpassword=password("***") where host=”localhost” and user="root";

mysql> updateuser set password=password("***") where host=”%” and user="root";

mysql>flushprivileges;

通过以上操作,必须通过密码登录数据库,同时对数据库都授了相应的权限,在数据库系统中能看到所有数据库。在业务系统配置文件时,要注意用户名与密码必须与数据库系统保持一致,否则导致业务应用系统连不上数据库系统。

解决整个问题的过程中,要注意几个事项:

1.数据非常重要,务必做好备份;

2.要掌握数据库的安全理论,并对实战授权的操作要熟练;

3.磁盘空间要留够用,一般少也要几GB字节,这样可以保障操作系统、web服务、数据库服务运行稳定,文件和日志可写等操作。

解决整个问题的过程中,要注意几个问题:

1.RROR 2002 (HY000): Can't connect to localMySQL server through socket '/var/lib/mysql/mysql.sock' (111)

2.ERROR 1045 (28000): Access denied for user'root'@'localhost' (using password: YES)

3.ERROR 2002 (HY000): Can't connect to localMySQL server through socket '/var/lib/mysql/mysql.sock' (2)

以上3个问题,原因在于mysql服务无法启动,在启动的过程中延时了,在该案例中,Apache也导致不能自动运行,有的地方说是磁盘空间点满了造成的,的确是,删除该 /var/log/httpd/ 目录下的日志文件,确实能启动mysql服务了;但其实是该根目录磁盘空间满造成服务无法启动。

[[email protected] ~]#df -h

Filesystem SizeUsed Avail Use% Mounted on

/dev/sda2 49G46G 0 100%/

tmpfs 939M904K 938M 1% /dev/shm

/dev/sda1 93M54M 35M 61% /boot

/dev/sda5 179G2.2G 168G 2% /home

当时,根目录下确实是满了,并且导致httpd服务无法自启,只能通过手动强行启动,后面对“/”目录删除相关资料,可以使用300多兆,所以mysql和Apache服务行都可以运行正常。

[[email protected] www]#df -h

Filesystem SizeUsed Avail Use% Mounted on

/dev/sda2 49G46G 381M100% /

tmpfs 939M100K 939M 1% /dev/shm

/dev/sda1 93M54M 35M 61% /boot

/dev/sda5 179G2.2G 168G 2% /home

在这里为止,mysql.user表建成了,数据库更新了密码并对用户授权了,腾出“/"磁盘空间,保障各mysql和apache服务运行正常,同时配置各业务应用系统,成功连上数据库,恢复了业务应用系统。


分享给朋友:
您可能感兴趣的文章:
随机阅读: