前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >drop database失败?可能有人动了你的环境

drop database失败?可能有人动了你的环境

作者头像
AsiaYe
发布2020-06-21 16:09:20
发布2020-06-21 16:09:20
1.4K00
代码可运行
举报
文章被收录于专栏:DBA随笔DBA随笔
运行总次数:0
代码可运行

drop database失败?可能有人动了你的环境

今天晚上临走的时候,接到需求要更新一个很久没有用过的实例的一个数据库对象,其实操作很简单,就是drop database,然后create database,然后use database,执行一个SQL文件。

就这个看似简单的问题,还花费了一点时间,反正花时间了,就跟大家分享一下呗。我用测试环境复现了一下当时的场景。

01

问题描述

drop database失败:

代码语言:javascript
代码运行次数:0
复制
mysql--dba_admin@127.0.0.1:yeyztest 20:13:33>>create database root;
Query OK, 1 row affected (0.05 sec)

mysql--dba_admin@127.0.0.1:yeyztest 20:13:42>>drop database root;
ERROR 1008 (HY000): Can't drop database 'root'; database doesn't exist

10s前创建的数据库,10s后drop就报错了?

你可能已经猜到了,我一定在这10s中间动了手脚。

02

说说思路

看到这个错误,我的第一反应lower_case那个参数的问题,是不是做了库名的大小写转换啊之类的。这里你可以参考我之前写的一个文章,这里给出链接:

阿里云主从复制的一个参数问题

经过一阵理性的判断,此处省略300字,发现了一个问题,就是我的mysql目录的系统文件属主被系统运维的哥们儿给改了。。。问题复现如下:

代码语言:javascript
代码运行次数:0
复制
[root@tk-dba-mysql-194 data]# ll
total 1064860
-rw------- 1 mysql mysql       1676 May 10  2018 private_key.pem
-rw-r--r-- 1 mysql mysql        452 May 10  2018 public_key.pem
drwxr-x--- 2 mysql mysql       4096 Jun 17 20:13 root
-rw-r--r-- 1 mysql mysql       1087 May 10  2018 server-cert.pem
-rw------- 1 mysql mysql       1680 May 10  2018 server-key.pem
drwxr-x--- 2 mysql mysql       4096 Jun  1 15:09 yeyztest
[root@tk-dba-mysql-194 data]# chown root.root  -R root/
[root@tk-dba-mysql-194 data]# ll
total 1064860
-rw------- 1 mysql mysql       1676 May 10  2018 private_key.pem
-rw-r--r-- 1 mysql mysql        452 May 10  2018 public_key.pem
drwxr-x--- 2 root  root        4096 Jun 17 20:13 root
-rw-r--r-- 1 mysql mysql       1087 May 10  2018 server-cert.pem
-rw------- 1 mysql mysql       1680 May 10  2018 server-key.pem
drwxr-x--- 2 mysql mysql       4096 Jun  1 15:09 yeyztest

这里我复现了一下,就是把root这个数据库的属主给他改成root用户的,而不是mysql用户的。这样再重新执行的手就会复现刚才的错误了。

问题其实很简单,但是奇怪的是MySQL的报错是无法删除数据库,数据库不存在。然后我使用use root这个命令,进入到root这个数据库里面,发现是可以执行成功的,show tables 命令一敲,看到返回,这个问题就算完全解决了,基本上你也就明白了:

代码语言:javascript
代码运行次数:0
复制
mysql--dba_admin@127.0.0.1:yeyztest 20:15:17>>use root
Database changed
mysql--dba_admin@127.0.0.1:root 20:15:28>>show tables;
ERROR 1018 (HY000): Can't read dir of './root/' (errno: 13 - Permission denied)
mysql--dba_admin@127.0.0.1:root 20:15:31>>

很明显,不能读取root目录的内容,这里就很明确了,问题就是出在root这个数据库的目录上,因为它的属主变了,所以MySQL无法访问了。如果你drop database root,肯定就报错无法删除数据库了。

OK,就这样,回家了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档