我正在尝试更改mariadb中的数据目录,在更改ini文件中的数据目录路径后,尝试重新启动服务,它无法启动!显示如下警告:
> Error 1067: The process terminated unexpectedly
在 MySQL 中,数据目录更改工作正常。但我不知道为什么同样不能使用mariadb
.
只有默认路径有效...
我正在尝试更改mariadb中的数据目录,在更改ini文件中的数据目录路径后,尝试重新启动服务,它无法启动!显示如下警告:
> Error 1067: The process terminated unexpectedly
在 MySQL 中,数据目录更改工作正常。但我不知道为什么同样不能使用mariadb
.
只有默认路径有效...
我应该提到出色的系统内部工具(例如 procmon),它不仅在这种情况下而且在许多其他情况下都非常有用。Windows 错误日志是第二个非常有用的工具,如果你想看看的话。了解你的工具
现在针对这种情况提出具体建议 - 运行 MariaDB 服务的用户应该能够在 datadir 目录中创建文件。默认情况下,MariaDB 使用网络服务,而 MySQL 使用本地系统(最强大的 Windows 用户)。
此更改使 MariaDB 更安全(如果服务被黑客入侵,影响更小),但是您不应期望 NetworkService 具有对任何目录的读写访问权限,例如 LocalSystem 。
因此,要解决您的问题,您可以使目录对 NetworkService 可写,或者将服务用户更改为对该目录具有读写访问权限的用户。
最近有人问这个,我想出了另一个答案,涉及符号链接。我觉得这个解决方案可能是最简单的,在 my.ini 或服务配置中不需要搞砸。
如何在安装后移动数据目录(例如磁盘 C:\ 已满)。
不幸的是,这在 MSI 上是不可能的,所以需要手动完成。
你需要
这是一个说明如何从脚本执行此操作(需要以完全管理员权限运行,例如在提升的命令行上)。我robocopy
用来复制文件、mklink
创建目录链接、icacls
设置链接权限以及net
启动/停止服务
set SERVICE=MySQL
set SRCDIR="C:\Program Files\MariaDB 10.1\data"
set DESTDIR="D:\data"
net stop %SERVICE%
robocopy %SRCDIR% %DESTDIR% /MIR /SEC /MOVE
mklink /d %SRCDIR% %DESTDIR%
icacls %SRCDIR% /grant "NT AUTHORITY\NetworkService":F
net start %SERVICE%
目前,即使您在 MSI 中选择了“删除数据”,这也不会在卸载时删除新的数据目录。