Windows下MySQL8.0数据目录迁移

最近遇到个客户需求,需要迁移安装在 Windows 2012 上的 MySQL 8.0的 Data 目录,因为默认客户将 Data 目录放置在C盘,导致系统盘可用空间越来越少,希望可以迁移至新挂载的D盘。

迁移的大概步骤十分简单:

  1. 停止数据库的读写连接,停止服务器上的数据库服务
  2. 修改 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini中的datadir=C:/ProgramData/MySQL/MySQL Server 8.0\Data 为 D:/mysql\Data
  3. 并将原目录 Data 拷贝到 D:/mysql
  4. 然后重新启动 MySQL

一切操作完毕,我一边启动数据库,一边感叹世界的美好,这时候报错出现了。。。

Windows下MySQL8.0数据目录迁移
不慌,Windows系统的报错永远都是让人琢磨不透,所以我使用命令行来启动服务,尝试能看到具体的报错,结果依然没有提示

Windows下MySQL8.0数据目录迁移

既然服务没有提示,我再次尝试通过执行文件加参数的方式启动数据库,结果让我慌了
Windows下MySQL8.0数据目录迁移

提示配置文件的第一行有问题!!

我思来想去只修改了datadir的参数,并没有修改别的,怎么会提示配置文件第一行有问题?网上搜了一波报错,并没找到正确的结果。在公司大佬的提醒下,突然想起会不会是文件编码不同导致的。

Linux系统下大部分的文件编码都是UTF-8,而Windows主要是ANSI。因此,我们尝试把my.ini文件另存为,可以看到默认保存的编码为UTF-8,更改为ANSI,替换原来的文件。
Windows下MySQL8.0数据目录迁移
保存后重新执行,发现了新的报错
Windows下MySQL8.0数据目录迁移

我们再进配置文件查看,发现之前修改的地方前面被加了#,去掉#号,再次启动,发现没有出现报错。此次,通过本地用户启动MySQL已经正常。
Windows下MySQL8.0数据目录迁移

Windows下MySQL8.0数据目录迁移
停掉,我们从服务中启动,发现启动依然报错,额。。。

这时,我又想到了文件的权限问题,在Linux系统下,使用root用户复制的文件的所属者和所属组将也是root,类比Windows系统,也将会发生变化,对比我们复制的Data与原来的Data目录,发现少了一个Network Service用户。对比添加相应的用户及权限,编辑mysql的目录权限,让其下级目录文件自动继承。
Windows下MySQL8.0数据目录迁移
然后再重启服务,发现服务启动成功,再无报错。

当然,还有另一种方式可以不修改文件夹属性,启动数据库。在服务右键属性,在登录中,选择登录身份为本地系统账户,一样可以启动数据库。
Windows下MySQL8.0数据目录迁移

数据迁移完成,撒花~

Windows下MySQL8.0数据目录迁移

上一篇:【TcaplusDB小知识】TcaplusDB的技术原理


下一篇:Mysql实现Oracle的 full join