26

我在创建数据库时遇到问题,并导致以下错误。

mysql> show grants for 'admin'@'%';
+---------------------------------------------------------------------------------------------------------------------------------+
| Grants for admin@%                                                                                                              |
+---------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> create database abc;
ERROR 1006 (HY000): Can't create database 'abc' (errno: 13)

这是我的用户表。

mysql> select host, user from mysql.user;
+-------------+-------+
| host        | user  |
+-------------+-------+
| %           | admin |
| 127.0.0.1   | root  |
| ::1         | root  |
| IVM-MMC-DGW | root  |
| localhost   | admin |
| localhost   | root  |
+-------------+-------+
6 rows in set (0.00 sec)


mysql> show grants;
+-----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for admin@localhost                                                                                                              |
+-----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441' WITH GRANT OPTION |
+-----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

我可以在现有数据库中创建和删除表。

数据目录已经有 mysql:mysql 权限并且登录的用户也有创建新数据库的权限。

这里缺少什么配置?

4

13 回答 13

33

MySQL 数据目录可能存在权限问题。您可以尝试按如下方式设置权限(调整数据目录的路径)

chown -R mysql:mysql /usr/local/mysql/data
于 2013-09-10T13:10:08.420 回答
19

这可能是由于 MySQL 拒绝许可而发生的。虽然您设置了datadir=/drbd0/mysql/data,但默认情况下 MySql set socket = /var/lib/mysql/mysql.sock,因此您应该拥有该目录的权限。

less /etc/group

接着

less /etc/passwd

查找 mysql 用户和组名,默认为 mysql 组中的 mysql 用户。

更改为 mysql 目录,可能/var/lib/mysql然后键入cd ..上一个目录。

chown -R mysql:mysql ./mysql/

mysql:mysql如果您的组和用户权限被称为不同,则替换为不同的东西

于 2013-09-10T13:57:57.533 回答
12

可能是空间问题。按照这个

  1. 检查 /var/lib/mysql 中的 .err 日志
  2. 如果日志显示类似“[错误] 无法启动服务器:无法创建 PID 文件:设备上没有剩余空间”

  3. 通过 df -hk /var 检查 /var 大小

  4. 如果 used 是 100% ,那么你必须找到正在填充的文件。

  5. 通过 find /var/ -type f -size +100000k -exec ls -lh {} \; 在 /var 中查找大文件 | awk '{ 打印 $9 ": " $5 }'

  6. 查看您可以删除哪个文件,然后通过以下方式重新启动mysql进程

  7. /etc/init.d/mysql 重启

让我知道这是否有效:)

于 2014-02-26T10:51:31.020 回答
10

对于 Mac OS,请使用此命令

sudo chown -R mysql:mysql /usr/local/mysql*

用户mysql应具有对 mysql 数据目录的写入权限。

于 2016-12-26T11:18:43.330 回答
6
sudo chown -R mysql:mysql /var/lib/mysql/
于 2014-11-11T19:40:38.940 回答
3
  1. 检查您的 mysql 数据目录权限。
    默认情况下,数据目录配置在“/etc/my.conf”中。
    或用于mysqladmin -uroot -p variables | grep datadir查找目录。
    它可能是/var/lib/mysql/默认的,并确保所有者用户和组是 mysql。chown -R mysql:mysql /usr/local/mysql/data

  2. 如果步骤1没有解决。可能是因为SELinux你的方式,尝试关闭它

    • 测试 SELinux 是否正在运行。selinuxenabled && echo enabled || echo disabled
    • 暂时关闭 SELinux。echo 0 > /selinux/enforce
    • 完全关闭 SELinux。更改配置SELINUX=disabled,然后重新启动。

    在不同的操作系统中,配置目录 SELinux可能不同。

于 2016-09-26T07:37:02.683 回答
2

如果您移动mysql文件夹并重新启动mysql,它可以工作

于 2015-10-20T12:46:30.327 回答
1

在/etc/mysql/my.cnf中,设置datadir = /home/mysql_data,即数据库文件实际在你机器上的位置

于 2013-09-10T13:14:19.057 回答
1

关闭 SELinux,尤其是在 CentOS 上。

检查关闭或禁用 SELinux

于 2015-08-28T14:33:20.340 回答
1

同样的问题,在我的情况下,我更改了 my.cf 上的默认目录并且 selinux 阻止了它。

去测试:

setenforce 0

修复(CentOS)

添加上下文并使其永久化

semanage fcontext -a -s system_u -t mysqld_db_t "/var/data/mysql(/.*)?" restorecon -Rv /var/data/mysql

来源:https ://naveensnayak.wordpress.com/2016/01/14/changeing-mysql-data-directory-centos-7/

于 2016-12-21T16:58:05.700 回答
0

就我而言,这是 MySQL 数据目录所有者的问题,正如其他人所建议的那样。但是我的服务器上的设置非常少见,使用不同的目录,所以这里有更详细的解决方案:

  1. 查找 MySQL 数据目录

grep 'datadir' $(find /etc -iname my.cnf 2>/dev/null) | awk '{print $3}'

如果 MySQL 配置在正确的位置,它会返回例如/var/lib/mysql

如果它没有返回任何结果,请尝试使用在整个文件系统中搜索

grep 'datadir' $(find / -iname my.cnf 2>/dev/null) | awk '{print $3}'(这可能需要很长时间)

分解:

find /etc -iname my.cnf 2>/dev/null/etc在忽略错误的情况下找到名为 my.cnf 的文件

grep 'datadir' /etc/mysql/my.cnf在上一步找到的文件中查找 datadir

awk '{print $3}'从标准输入打印第三列

  1. 修复所有权

sudo chown -R mysql:mysql MYSQLDIR替换MYSQLDIR为步骤 1 中返回的目录的路径

于 2019-07-16T10:09:28.460 回答
0

运行 WAMP 并且我遇到了同样的问题,选择了传统的停止并启动所有服务,这对我来说是这样。之后我能够创建数据库,真的不知道为什么我一开始无法创建它,因为我没有空间或权限问题。好吧,我希望这可以帮助 WAMP 用户

于 2017-12-08T15:46:03.347 回答
0

我最近遇到了这个问题。未创建数据库。它正在抛出错误。后来我发现磁盘已 100% 满,因此发生了这种情况。权限一切正常。

于 2020-03-16T12:38:42.160 回答