无法找到有效的数据目录。MySQL通用二进制安装。

20

我将在Linux服务器上安装MySQL, 但我没有root访问权限。因此,我创建了两个文件夹: mysql和mysqldata。mysql文件夹保存二进制文件,mysqldata文件夹保存数据和日志。

my.cnf

[mysqld]
user                    = mysql
port                    = 3306
bind-address            = localhost
basedir                 = /home/nwn/mysql/mysql-8.0
socket                  = /home/nwn/mysqldata/instA/socket/mysql.sock
datadir                 = /home/nwn/mysqldata/instA/data
tmpdir                  = /home/nwn/mysqldata/instA/tmp
secure_file_priv        = /home/nwn/mysqldata/instA/mysql-files
max_connections         = 150

# Logging
log-bin                 = /home/nwn/mysqldata/instA/logs/instA-binlog
log-error               = /home/nwn/mysqldata/instA/logs/instA-errorlog.err
slow_query_log          = 1
slow_query_log_file     = /home/nwn/mysqldata/instA/logs/instA-slowquery.log
long_query_time         = 0.5

# InnoDB
innodb_data_home_dir    = /home/nwn/mysqldata/instA/innodb/data
innodb_data_file_path   = ibdata1:50M;ibdata2:12M:autoextend:max:500M
innodb_log_group_home_dir = /home/nwn/mysqldata/instA/innodb/log
innodb_buffer_pool_size = 32M

# MyISAM
key_buffer_size         = 16M

server_id                = 1

我完成了所有其他的配置。 当我运行以下命令时:

mysql-8.0]$ bin/mysqld --defaults-file=~/mysqldata/instA/my.cnf --initialize-insercure
我在error_log中有以下日志。
 cat ~/mysqldata/instA/logs/instA-errorlog.err
2018-10-09T10:39:51.127424Z 0 [Warning] [MY-010139] [Server] Changed limits: max_open_files: 1024 (requested 8160)
2018-10-09T10:39:51.127523Z 0 [Warning] [MY-010142] [Server] Changed limits: table_open_cache: 432 (requested 4000)
2018-10-09T10:39:51.383986Z 0 [Warning] [MY-010101] [Server] Insecure configuration for --secure-file-priv: Location is accessible to all OS users. Consider choosing a different directory.
2018-10-09T10:39:51.384043Z 0 [System] [MY-010116] [Server] /home/nwn/mysql/mysql-8.0/bin/mysqld (mysqld 8.0.12) starting as process 32654
2018-10-09T10:39:51.386625Z 0 [Warning] [MY-010122] [Server] One can only use the --user switch if running as root
2018-10-09T10:39:51.394675Z 1 [ERROR] [MY-011011] [Server] Failed to find valid data directory.
2018-10-09T10:39:51.394817Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-10-09T10:39:51.394831Z 0 [ERROR] [MY-010119] [Server] Aborting
2018-10-09T10:39:51.395363Z 0 [System] [MY-010910] [Server] /home/nwn/mysql/mysql-8.0/bin/mysqld: Shutdown complete (mysqld 8.0.12)  MySQL Community Server - GPL.

你的文件系统/home/nwn/mysqldata/里有什么? - O. Jones
如何查看?我正在使用Linux Red Hat服务器。 - nwn
ls -Ral /home/nwn/mysqldata/ - O. Jones
6个回答

54

尽管这篇文章非常古老,但我还是要发布我的解决方案,因为我花了大约两个小时才找出答案,这可能有助于节省其他人的时间。

你可以尝试做以下事情:

shell> mysqld --initialize

这将在安装了MySQL服务器的路径中初始化数据目录。通常放置在C:\ Program Files \ MySQL \ MySQL Server 8.0。

希望对某些人有所帮助。


5
"initialize" 而非 "initialise"? https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_initialize - codiga
5
在运行 mysqld --initialize 命令之前,请确保数据目录为空。 - P D
2
如果您没有数据目录,请在MySQL文件夹下创建一个,例如:<mysql-dir>\data。然后运行mysqld --initialize命令。 - KHAN
1
除了确保数据目录为空之外,我还必须删除数据目录本身以停止出现此错误。 - John Langford
这个命令将初始化你的数据,但不会启动服务器...要启动服务器,请运行 mysqld - Gjaa
我会添加--console参数,因为这样MySQL会显示出临时创建的root密码,这会让事情变得更容易。控制台输出的样子是这样的: [MY-010454] [Server] 为root@localhost生成了一个临时密码:DasRZb&m0;4P - undefined

21

请按照以下步骤在Windows上重置您的MySQL密码:

  1. 停止 MySQL 服务 @ services.msc

  2. 创建名为 change_mysql_pwd.txt 的文件,并填入以下内容(将“YourNewPassword”替换为您想要为root用户设置的新密码):

 ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
  • 将文件保存在 C:\ change_mysql_pwd.txt 下

  • 以管理员身份运行 CMD.exe(开始 - > Cmd - > 右键单击 - > 以管理员身份运行)

  • 在 cmd 中键入:cd“C:\Program Files\MySQL\MySQL Server 8.0\bin”

  • 在“C:\Program Files\MySQL\MySQL Server 8.0\”下创建“Data”文件夹(如果已存在,请删除其内容!)

  • 在 cmd 中键入:mysqld --install

  • 在 cmd 中键入:mysqld --initialize

  • 在 cmd 中键入:mysqld --init-file=C:\\change_mysql_pwd.txt

  • 使用 root 用户帐户和设置的密码登录。

  • 删除 C:\ change_mysql_pwd.txt 文件

  • 享受吧...


    4
    将“mysql --initialize”更改为“mysqld --initialize”。 - DarkCoffee
    好的,谢谢您的建议(打字错误)。已经更正了。 - A. Dzebo
    5
    经过多个小时的尝试,这是唯一一个有效的系列,谢谢。 - cp.
    2
    感谢您发布您的答案。 - kallis
    2
    大多数博客都没有提到第7步和第8步,因此我无法重置密码。我建议您检查进程日志,执行此命令而不是第9步:mysqld --init-file=C:\\change_mysql_pwd.txt --console - Bogota
    当然,检查日志并不是一个坏习惯。感谢您的反馈。 - A. Dzebo

    6

    (背景:新安装的mysql 8,安装在windows server 2016上) 让我成功解决“找不到有效数据目录”问题的方法是:

    运行mysqld --initialize --console命令

    --console参数会直接在命令行上显示错误信息和相应的解决方法。由于我的安装是全新的,所以缺乏“data”目录。但是,如果你在my.ini中设置了一些新版本不支持的选项,执行以上命令时系统还是会生成一个“data”目录。如果你的my.ini中有多个存在问题的选项,你需要首先删除新建的“data”目录。 注意:请先检查是否有数据库存储在该目录下,否则你将会失去所有的数据库!因此此方法只适用于全新安装。

    具体步骤如下:

    1. 以管理员身份在cmd中运行mysqld --initialize --console命令
    2. 修复my.ini中的错误配置行,删除data目录(仅适用于新安装,否则你将丢失所有的数据库!)
    3. 再次运行mysqld --initialize --console命令
    4. 重复以上步骤,直至所有错误都被纠正。

    现在MySql应该已经可以启动了。


    [错误] [MY-010460] [服务器] 指定了--initialize,但数据目录已存在且不可写。中止。 [错误] [MY-010457] [服务器] 指定了--initialize,但数据目录中有文件。中止。 [错误] [MY-013236] [服务器] 指定的数据目录 /usr/local/mysql/data/ 不可用。您可以删除服务器添加到其中的所有文件,但那里没有这样的目录。 - Oleksii Kyslytsyn

    2

    从您的控制台输出来看,我理解您正在尝试初始化数据库,但在数据目录中存在文件。首先,您应该删除MySQL数据目录中的所有文件(请小心操作,否则可能会丢失数据),然后运行以下命令:

    shell> mysqld --initialize --console
    

    根据@Alex Karshin、@Lazycoder_0071和@Freeze_H的说法,如果没有其他问题,MySQL应该无缝初始化数据库。

    [错误] [MY-010460] [服务器] 指定了--initialize,但数据目录已存在且不可写。中止。[错误] [MY-010457] [服务器] 指定了--initialize,但数据目录中有文件。中止。[错误] [MY-013236] [服务器] 指定的数据目录 /usr/local/mysql/data/ 不可用。您可以删除服务器添加到其中的所有文件,但那里没有这样的目录。 - Oleksii Kyslytsyn

    0

    Kevin Kopf和Lazycoder_007在https://dev59.com/qFQJ5IYBdhLWcg3w963x#62003723中提到的方法对我来说很有效,此外还需要:

    1. 在初始化之前删除“data”文件夹中的文件(感谢P D)
    2. 以管理员身份在cmd中运行mysqld --initialize

    请注意,用户名可能会更改,并且最近编辑帖子的用户可能不同。因此,为了可靠地引用现有答案,请使用该帖子下方“分享”提供的链接。 - Yunnosch

    0

    我曾经遇到过类似的问题,例如找不到有效的数据目录。

    1. 在MySQL服务器路径上,删除data文件夹中的所有内容。
    2. 如果您没有该文件夹,则创建一个新的文件夹。
    3. 运行mysqld --initialize --console命令。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接