在某次操做中,我做死用 find 和 chown 命令行修改文件/文件夹的权限和全部者,后来简单粗暴地把 www 文件夹的权限改回755[1],把文件的权限改成644;全部者所有改成root,就在这个时候,一个隐形的大地雷就被我亲手埋下了。。mysql
当我次日再数据库中创建一个新的数据库的时候,我发现,不管我是使用数据库的普通用户,仍是使用 root 用户登陆,他都好像开玩笑地告诉我:sql
ERROR 1006 (HY000): Can't create database
shell
我立马以为这不对劲,必定是本身埋下的深坑。。我把 ERROR 复制到搜索引擎上一搜索,发现大多数说的是权限,因而想起本身干起的好事,就开始寻找起恢复默认权限的方法(惋惜没有备份),这折腾着折腾着我重启了 mysqld 服务,而且使人惊讶的是,shutdown OK,Start failed
,又报了一个错误:数据库
Starting MySQL.The server quit without updating PID file
vim
[捂脸][捂脸] 我就开始找 MySQL 的日志,发现没有报错,而且接下来的每次重启都没有记录在日志中,bash
这让我有种刚掉一个坑还没出来,发现不当心又掉进另一个坑的感受。。测试
可是还好坚持了一个上午,直到下午才发现,原来是同一个问题的致使的:MySQL数据目录可能存在权限问题。在你看完解决方案以后,也许你也就明白了。ui
在 [mysqld] 中找到两个信息:搜索引擎
datadir
—— 这是你的数据库存取数据的地方 , 例如个人是 datadir = /www/server/data
,/www/server/data
就是个人数据目录;spa
log-bin
—— 这是存在日志的地方,不过有可能只看到 log-bin=mysql-bin
,这里默认没有修改的话,mysql-bin
是在上面的 datadir
。
打开到你的 datadir
文件夹位置 , 有一个 ***.err 的文件,这是 MySQL 的一个错误日志,你可使用 vim 打开查看是否有什么错误的信息;
下面是关键的两步,也是致使出现上面两个问题的缘由:
- MySQL每次开始服务的时候要先在 DATADIR 中建立一个 ****.pid 文件,关闭服务的时候就会删除它;由于上次这里面整个文件夹(包括文件夹中的内容)的全部者被我不当心修改成root了,所以 MySQL 没有权限往其中新建一个 ****.pid 文件 ,所以报了第二个的错误;
- 另外,为何我一开始能够登录 MySQL ,却在root用户的时候竟然没法进行新建数据库的操做呢?我猜测多是由于,我以前的文件夹的权限是755,文件的是644的缘由;也就是用户组和公共组均可以读取,但没法写入,因此才会报第一个错误!
$ sudo chown -R mysql:mysql YOUR_DATADIR
复制代码
**注意:**记得把 YOUR_DATADIR 就是咱们刚才找到 datadir
建议数据库数据目录的权限为 700 ,文件的为660
文件夹权限修改成700 :
$ sudo find YOUR_DATADIR -type d -exec chmod 700 {} \;
复制代码
文件权限修改成660 :
$ sudo find YOUR_DATADIR -type f -exec chmod 660 {} \;
复制代码
到这里,咱们就能够从新再试试
$ sudo /etc/init.d/mysqld restart
复制代码
若是出现 [OK] ,就快大功告成啦!!
mysql > create database 57EN;
Query OK, 1 row affected
Time: 0.001s
复制代码
终于跳出坑啦,虽然折腾了这么久,可是这让我对 MySQL 有了更深的认识,从以前只知道如何使用 MySQL,到如今明白原来数据库从服务开始它建立一个.pid 文件(MySQL 服务的进程),原来它存放的数据和日志都在它的 DATADIR 中。我想接下来有必要深刻了解的日志,遇到问题时,能够透过日志去发现问题,解决问题。
[1] 文件夹权限 755:
在 Linux 系统中,关于文件/文件夹权限,有三类操做对象(全部者、用户组、公共组)各自有3个权限(读、写、执行),Linux 系统但愿经过如下数字规则就能快速知道三类操做对象的对应的权限。
![]()
其中,4表明读取的权限,2表明写入的权限,1表明执行的权限;
7=4+2+1
同一操做对象的权限的数字相加,例如:
755 的权限表明,全部者的权限有读写、执行;用户组的权限有读取、执行;公共组的权限有读取、执行。
亲身测试有效解决方案,有什么问题欢迎你留言交流。
—— 57EN写于 2018年12月26日