修复MySQL Server数据目录



我在使用MySQL Server 8的Windows 10上遇到了一个非常奇怪的问题:

我无法用启动mysql服务器或服务作为mysql的mysqldnet start mysql报告缺少数据目录(它无法写入"测试文件")。它在C:Program FilesMySQLMySQL Server 8.0中查找。

经过一些谷歌搜索,我可以在运行后启动mysql服务器mysqld --initialize,它确实在C:Program FilesMySQLMySQL Server 8.0下面创建了一个数据文件夹,并以某种方式重新设置了密码。不幸的是,在我连接到(我想是的)新初始化的mysql服务器后,我所有的数据库都不见了。

经过更多的谷歌搜索,我发现我的电脑上有以下目录:C:ProgramDataMySQLMySQL Server 8.0…瞧。。在Data目录中,有一些文件夹的名称是我的(丢失的)数据库。所以我很确定,我的数据就在那里。

但是我该如何设置mysql服务器来使用这些正确的数据/设置呢。我不想使用新初始化的mysql服务器。

我尝试将文件夹从C:ProgramDataMySQLMySQL Server 8.0复制到C:Program FilesMySQLMySQL Server 8.0,但没有成功。一次服务器无法启动,另一次数据被忽略。我还试图将my.ini复制到C:ProgramDataMySQLMySQL Server 8.0,并更改[mysqld]->下的datadir条目。

感谢您的帮助。

更新:

以下错误和警告出现在我的".err"文件中:

2020-03-11T19:21:10.658537Z 0[警告][MY-010915][服务器]"NO_ZERO_DATE"、"NO_ZERO_IN_DATE"one_answers"ERROR_FOR_DIVISION_BY_ZERO"sql模式应与严格模式一起使用。它们将在未来的版本中与严格模式合并。

2020-03-11T19:21:10.659813Z 0[System][MY-010116][Server]C:\Program Files\MySQL\MyServer 8.0\bin\mysqld.exe(mysqld 8.0.19)作为进程4040 启动

2020-03-11T19:21:11.340219Z 0[警告][MY-010068][服务器]CA证书CA.pem是自签名的。

2020-03-11T19:21:11.358861Z 0[警告][MY-013143][服务器]mysql.user的列计数错误。应为51,实际为49。该表可能已损坏

2020-03-11T19:21:11.359562Z 0[警告][MY-013139][服务器]无法从mysql.db加载。表可能已损坏!

2020-03-11T19:21:11.360108Z 0[警告][MY-013139][服务器]无法从mysql.tables_priv加载。表可能已损坏!

2020-03-11T19:21:11.360680Z 0[警告][MY-013139][服务器]无法从mysql.tables_priv加载。表可能已损坏!

2020-03-11T19:21:11.361259Z 0[警告][MY-013139][服务器]无法从mysql.columns_priv加载。表可能已损坏!

2020-03-11T19:21:11.361881Z 0[警告][MY-013139][服务器]无法从mysql.procs_priv加载。表可能已损坏!

2020-03-11T19:21:11.362474Z 0[警告][MY-013139][服务器]无法从mysql.procs_priv加载。表可能已损坏!

2020-03-11T19:21:11.363076Z 0[警告][MY-013139][服务器]无法从mysql.proxies_priv加载。表可能已损坏!

2020-03-11T19:21:11.363713Z 0[警告][MY-013139][服务器]无法从mysql.proxies_priv加载。表可能已损坏!

2020-03-11T19:21:11.364309Z 0[警告][MY-013139][服务器]无法从mysql.proxies_priv加载。表可能已损坏!

2020-03-11T19:21:11.364908Z 0[警告][MY-013139][服务器]无法从mysql.role_edges加载。表可能已损坏!

2020-03-11T19:21:11.365505Z 0[警告][MY-013139][服务器]无法从mysql.role_edges加载。表可能已损坏!

2020-03-11T19:21:11.366123Z 0[警告][MY-013139][服务器]无法从mysql.default_roles加载。表可能已损坏!

2020-03-11T19:21:11.366774Z 0[警告][MY-013139][服务器]无法从mysql.default_roles加载。表可能已损坏!2020-03-11T19:21:11.367391Z 0[警告][MY-013139][服务器]无法从mysql.global_grants加载。表可能已损坏!

2020-03-11T19:21:11.368010Z 0[警告][MY-013139][服务器]无法从mysql.password_history加载。表可能已损坏!2020-03-11T19:21:11.369081Z 0[错误][MY-013139][服务器]无法从mysql.global_grants加载。表可能已损坏!

2020-03-11T19:21:11.369779Z 0[错误][MY-010952][服务器]权限系统未能正确初始化。有关如何将MySQL升级到新版本的完整说明,请参阅MySQL手册中的"升级MySQL"部分。

2020-03-11T19:21:11.371103Z 0[错误][MY-0119][服务器]正在中止

2020-03-11T19:21:12.355716Z 0[System][MY-010910][Server]C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe:关闭完成(mysqld 8.0.19)MySQL社区服务器-GPL。

我尝试运行mysql_upgrade,这只是告诉我,它无法运行,因为升级工具已被弃用。。

数据目录上方的一个文件夹是my.ini文件,其中是mysql的主配置文件。

Mysql通过使用启动服务来找到这个文件

"C:Program FilesMySQLMySQL Server 8.0binmysqld.exe" --defaults-file="C:ProgramDataMySQLMySQL Server 8.0my.ini" MySQL80

看看你是否有这个选项正确

datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data

我可以解决我的问题。出于某种原因,不推荐使用的升级工具已集成到服务器工具中。我不得不运行

mysqld --defaults-file="C:/ProgramData/MySQL/MySQL Server 8.0/my.ini" --upgrade=FORCE

这并不是问题的全部。由于其他一些未知的原因,我的root用户密码不再被接受。三之前,我必须通过以下程序重置我的密码:第4章重置根密码:Windows系统

摘要:通过解决我的问题

  1. 使用mysqld--defaults file参数指向正确的my.ini文件
  2. 修复my.ini文件中正确数据目录的路径
  3. 通过参数--upgrade=FORCE在服务器上运行升级
  4. 重置mysql用户的密码

无论如何,我仍然不知道为什么会发生这种情况。。。。

将mysqld添加到系统路径变量中。路径通常看起来像";C: \Program Files\MySQL\MySQL Server 8.0\bin">

首先,将windows服务安装为MySQL80。以管理员身份打开cmd并使用。

mysqld--安装MySQL80--默认文件="C: \ProgramData\MySQL\MyServer 8.0\my.ini">

注意:--默认文件将是MySQL ini文件

发出以下命令以启动服务

sc启动MySQL80

如果您想手动启动mysqld ,请使用以下命令

mysqld--默认文件="C: \ProgramData\MySQL\MyServer 8.0\my.ini&quot--控制台

注意:--console将输出mysqld日志。检查[Error]块并相应地修复错误。

参考:https://dev.mysql.com/doc/refman/8.0/en/windows-start-service.html

我遇到这个问题是因为默认的C:\ProgramData\MySQL\MyServer 8.0\my.ini文件中有一个拼写错误。

在安装程序v1.6创建的文件中:

datadir=C:/ProgramData/MySQL/MySQL Server 8.0Data

问题:文件路径上没有带空格的引号,而且它们混淆了正斜杠和反斜杠。斜杠可能不相关,因为它是Windows,但缺少引号肯定是相关的。无论如何,我都解决了这两个问题。

修复:用覆盖该行

datadir="C:/ProgramData/MySQL/MySQL Server 8.0/Data"

最新更新