用delete命令来个不小心删除了user表
运行环境:
云安ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
操作系统: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
[root@sky9896data]# mysql -u root -p
Enterpassword:
ERROR1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) #登录不了数据库系统
解决问题过程:
[root@sky9896lib]# 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
[root@sky9896mysql]# cd /etc
[root@sky9896etc]# vi my.cnf
[mysqld]
skip-grant-table #加该条语句,跳跃授权表的限制,无需密码登录数据库
[root@sky9896data]# 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表
#service mysqld stop
#mysqld_safe --skip-grant-tables
还要重新开一个ssh连接:
#mysql
#delete mysql;
#INSERT INTO `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 ('%','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'',''),
('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'',''),
('::1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'',''),
('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','');
#flush privileges;
#mysql restart mysql
#mysql –uroot –p
mysql>use mysql
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服务了;但其实是该根目录磁盘空间满造成服务无法启动。
[root@sky9896 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 49G 46G 0 100%/
tmpfs 939M 904K 938M 1% /dev/shm
/dev/sda1 93M 54M 35M 61% /boot
/dev/sda5 179G 2.2G 168G 2% /home
当时,根目录下确实是满了,并且导致httpd服务无法自启,只能通过手动强行启动,后面对“/”目录删除相关资料,可以使用300多兆,所以mysql和Apache服务行都可以运行正常。
[root@sky9896 www]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 49G 46G 381M 100% /
tmpfs 939M 100K 939M 1% /dev/shm
/dev/sda1 93M 54M 35M 61% /boot
/dev/sda5 179G 2.2G 168G 2% /home
在这里为止,mysql.user表建成了,数据库更新了密码并对用户授权了,腾出“/"磁盘空间,保障各mysql和apache服务运行正常,同时配置各业务应用系统,成功连上数据库,恢复了业务应用系统。
分享文章:用delete命令来个不小心删除了user表
转载来于:http://cdiso.cn/article/iggoid.html