【问题标题】:ERROR 1006 (HY000) Can't create database (errno: 13) MySQL 5.6.12错误 1006 (HY000) 无法创建数据库 (errno: 13) MySQL 5.6.12
【发布时间】:2013-09-14 05:05:23
【问题描述】:

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

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权限,登录用户也有创建新数据库的权限。

这里缺少什么配置?

【问题讨论】:

  • 显示您的用户表。我的意思是它的相关部分。从 mysql.user 中选择主机、用户
  • 还要检查临时数据目录(my.cnf)的权限。
  • 这个问题确实属于Database Administrators
  • 只试试show grants;,也许你有admin@localhost的权限,可能会有所不同。
  • 操作系统中确实存在/var/lib/mysql

标签: mysql mysql-5.6


【解决方案1】:

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

chown -R mysql:mysql /usr/local/mysql/data

【讨论】:

  • 数据目录已经拥有mysql:mysql的权限。创建数据库时仍然报错
  • 对于 MAMP,数据库目录是 /Library/Application Support/appsolute/MAMP PRO/db/mysql56
  • @Finesse for MAMP PRO
【解决方案2】:

这可能是由于 MySQL 拒绝了权限。虽然你设置了datadir=/drbd0/mysql/data,但默认情况下MySqlset 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 替换为不同的名称

【讨论】:

  • chown -R mysql:mysql ./mysql/ 为我工作!谢谢!
【解决方案3】:

可能是空间问题。 关注这个

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

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

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

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

  6. 看看你可以删除哪个文件然后重启mysql进程

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

让我知道这是否有效:)

【讨论】:

  • 在我的情况下是/etc/init.d/mysqld
【解决方案4】:

对于 Mac OS 使用此命令

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

用户mysql 应该对mysql 数据目录有写访问权。

【讨论】:

  • 这对我有帮助。谢谢。
【解决方案5】:
sudo chown -R mysql:mysql /var/lib/mysql/

【讨论】:

  • 你能解释一下你为什么这样做吗?
  • 意思是mysql文件夹的所有者应该是mysql
  • 为我省去了一些麻烦。不小心运行了“chown -R apache /”。正如您可以想象的那样,当我这样做时,很多事情都崩溃了:P sql 是我需要修复的最后一件事。这对我有用
  • 让我头疼! :')
【解决方案6】:
  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挡住了你的路,试试turn off it

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

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

【讨论】:

    【解决方案7】:

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

    【讨论】:

    • 这可以是评论。
    【解决方案8】:

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

    【讨论】:

    • 我在 /etc/my.cnf 中将 data_dir 设置为 datadir=/drbd0/mysql/data
    【解决方案9】:

    关闭 SELinux,尤其是在 CentOS 上。

    检查Turning off or disabling SELinux

    【讨论】:

      【解决方案10】:

      同样的问题,在我的情况下,我更改了 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/changing-mysql-data-directory-centos-7/

      【讨论】:

        【解决方案11】:

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

        【讨论】:

          【解决方案12】:

          在我的情况下,这是 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 MYSQLDIRMYSQLDIR 替换为步骤 1 中返回的目录的路径

          【讨论】:

            【解决方案13】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-10-15
              • 2011-02-17
              • 2016-09-07
              • 2017-04-09
              • 2016-10-12
              • 1970-01-01
              • 2016-08-28
              相关资源
              最近更新 更多