在mariadb中更改datadirectory

在mariadb中更改datadirectory,mariadb,datadirectory,Mariadb,Datadirectory,我正在尝试更改mariadb中的数据目录,在更改ini文件中的数据目录路径后,尝试重新启动服务,但无法启动!!!显示如下警告: > Error 1067: The process terminated unexpectedly 在MySQL中,数据目录的更改非常有效。但我不知道为什么同样的方法不适用于mariadb 只有默认路径在工作…我应该提到非常好的系统内部工具(例如procmon),它不仅在这种情况下非常有用,而且在许多其他情况下也非常有用。Windows错误日志是第二个非常有用的

我正在尝试更改mariadb中的数据目录,在更改ini文件中的数据目录路径后,尝试重新启动服务,但无法启动!!!显示如下警告:

> Error 1067: The process terminated unexpectedly
在MySQL中,数据目录的更改非常有效。但我不知道为什么同样的方法不适用于
mariadb


只有默认路径在工作…

我应该提到非常好的系统内部工具(例如procmon),它不仅在这种情况下非常有用,而且在许多其他情况下也非常有用。Windows错误日志是第二个非常有用的工具,如果你想了解它的话。知道你的工具吗

现在我们来看一下本例的具体建议——运行MariaDB服务的用户应该能够在datadir目录中创建文件。默认情况下,MariaDB使用网络服务,而MySQL使用本地系统(最强大的Windows用户)

此更改使MariaDB更安全(如果服务被黑客攻击,影响更小),但您不应期望NetworkService像LocalSystem一样具有对任何目录的读写访问权限


因此,要解决您的问题,您需要为NetworkService使目录可写,或者将服务用户更改为对目录具有读写访问权限的用户

最近有人问这个问题,我想出了另一个答案,涉及符号链接。我觉得这个解决方案可能最简单,在my.ini或服务配置中不需要搞砸

安装后如何移动数据目录(例如磁盘C:\已满)

不幸的是,这是不可能从微星做到的,所以它需要手动完成

你需要

  • 停止服务
  • 将数据目录移动到新位置(保留权限)
  • 创建从旧位置到新位置的符号链接
  • 对符号链接授予服务帐户(NetworkService)完全权限
  • 重新开始服务
下面是如何从脚本(需要以完全管理员权限运行,例如在提升的命令行上)执行此操作的示例。我使用
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中选择了“删除数据”,也不会在卸载时删除新的datadir