MySql目录权限已修改为何提升无权限

  • Post author:
  • Post category:mysql


点击上方蓝字关注我

0136635a002dbf15d97e292fc505e947.png

近期有同学反馈数据库安装的时候,已确定目录权限已经设置了,但是还是无法安装的情况。解决后,分享一下,帮助大家遇到相同问题时更快定位及解决。


1、案例还原


1.1 创建目录并创建授权

处理完成后,权限如下



6c06c0d48d705d824cc941d9be574935.png


1.2 安装数据库

bin/mysqld --defaults-file=/data/mysql/mysql3306/etc/my.cnf  --initialize  --user=mysql

此时报错信息如下:


mysqld: Can't change dir to '/data/mysql/mysql3306/data/' (Errcode: 13 - Permission denied)
2022-10-29T19:02:30.058126+08:00 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2022-10-29T19:02:30.058209+08:00 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
2022-10-29T19:02:30.058277+08:00 0 [Note] Ignoring --secure-file-priv value as server is running with --initialize(-insecure) or --bootstrap.
2022-10-29T19:02:30.058317+08:00 0 [Note] bin/mysqld (mysqld 5.7.23-24-log) starting as process 9532 ...
2022-10-29T19:02:30.099203+08:00 0 [Note] --initialize specifed on an existing data directory.
2022-10-29T19:02:30.100460+08:00 0 [ERROR] failed to set datadir to /data/mysql/mysql3306/data/
2022-10-29T19:02:30.105066+08:00 0 [ERROR] Aborting


2022-10-29T19:02:30.105118+08:00 0 [Note] Binlog end
2022-10-29T19:02:30.105494+08:00 0 [Note] bin/mysqld: Shutdown complete


1.3 原因排查

因之前在大数据机器上安装数据库出现过类似情况,因此想到查看上层目录权限,结果果然是上层目录权限问题。

2bac38a206f2ef869627fe304bda2520.png


1.4 问题解决

修改目录权限为755

chmod 755 mysql/


再进行初始化

bin/mysqld --defaults-file=/data/mysql/mysql3306/etc/my.cnf  --initialize  --user=mysql

1b7670093a175110fb32037775de3307.png

顺利完成初始化

启动数据库,成功

/usr/local/mysql5.7/bin/mysqld_safe  --defaults-file=/data/mysql/mysql3306/etc/my.cnf

00c25ca7b6c32b6df1d8e587aabe0e48.png


2. 相似案例

使用xtrabackup工具还原数据库时,如果配置文件中的数据目录地址在本机中没创建,那么在还原后启动数据库时也不成功,


2.1  现场还原

xtrabackup工具备份一个数据库实例,然后恢复至一个新实例(此过程略过,直接到还原目录不存在的位置)。

先不创建此目录(通常是写错位置,或创建的时候写错目录名等)

c1bc65d05f09b54f16c2509cab45c4a4.png

开始还原

innobackupex  --defaults-file=/root/my.cnf --move-back ./

可以看到,还原的步骤能顺利进行

30ca048a733a446810f7f8abd7fe2528.png

9445ffaa525b94dd6a80d21fead64ee7.png

数据和日志目录也自动创建了。

此时因为我们的配置文件在/root目录下,启动时,因配置文件中指定了tmp目录,因此在/data/mysql/mysql3307下创建一个空的tmp目录,保证目录均存在。之后再创建一个日志文件。目录权限调整为mysql属主

c43b6f2ffe1ddb1173a0384d0715fdbf.png

正常情况下此时启动数据库即可,可惜失败了。

b5ee4215d40e175481eaad086bfac401.png

日志文件中也无任何内容。

ed3b39db289937e12547e059cdc02316.png

这种情况,大家可能会想到是权限问题,比如有地方没设置mysql属主等,但其实不然。此情况就如同案例1中那样,是因为目录的操作权限不足导致。修改一下即可,例如:

9595c017806b2fab56181d5533bd29f6.png

只需要将/data/mysql目录操作权限修改为755(建议子目录也修改为755,但是不修改也可以正常启动)

chmod 755 /data/mysql

1463d1c02db86ac30944796b9b9297ad.png

子目录未调整

f482e5cbc3aaab74748b42761b775666.png

启动数据库

53b8846cbd1224b2cdef4abeb19e9062.png

查看进程已启动

df0e901c23d2641775835c5f0acc9846.png

日志也正常

ab40ceaf0e268f158fc2db466bf9c5f0.png


3. 小结

数据库对目录及文件的操作权限、属主等的要求是比较严格的,其中一条不符合要求就无法创建或启动数据库,以上案例希望对大家有帮助。

113dd44e4b53025419ddd8ee5a99567d.png

往期精彩回顾

1.

MySQL高可用之MHA集群部署

2.

mysql8.0新增用户及加密规则修改的那些事

3.  比hive快10倍的大数据查询利器– presto


4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

5.  PostgreSQL主从复制–物理复制

6.  MySQL传统点位复制在线转为GTID模式复制

7

.  MySQL敏感数据加密及解密

8

.  MySQL数据备份及还原(一)

9

.  MySQL数据备份及还原(二)

7e20d5477a87f7fcf89fee9efbf5e01f.png

扫码关注

80607ac19c0978d968260ac9fde50b07.jpeg

dbe27cde37215fb90efdac0371b72d13.png

9828ce049ef2d3bce1d3d8630f02c249.png



版权声明:本文为gjc592原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。