迁移的大概步骤十分简单:
- 停止数据库的读写连接,停止服务器上的数据库服务
- 修改 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini中的datadir=C:/ProgramData/MySQL/MySQL Server 8.0\Data 为 D:/mysql\Data
- 并将原目录 Data 拷贝到 D:/mysql
- 然后重新启动 MySQL
一切操作完毕,我一边启动数据库,一边感叹世界的美好,这时候报错出现了。。。
不慌,Windows系统的报错永远都是让人琢磨不透,所以我使用命令行来启动服务,尝试能看到具体的报错,结果依然没有提示
既然服务没有提示,我再次尝试通过执行文件加参数的方式启动数据库,结果让我慌了
提示配置文件的第一行有问题!!
我思来想去只修改了datadir的参数,并没有修改别的,怎么会提示配置文件第一行有问题?网上搜了一波报错,并没找到正确的结果。在公司大佬的提醒下,突然想起会不会是文件编码不同导致的。
Linux系统下大部分的文件编码都是UTF-8,而Windows主要是ANSI。因此,我们尝试把my.ini文件另存为,可以看到默认保存的编码为UTF-8,更改为ANSI,替换原来的文件。
保存后重新执行,发现了新的报错
我们再进配置文件查看,发现之前修改的地方前面被加了#,去掉#号,再次启动,发现没有出现报错。此次,通过本地用户启动MySQL已经正常。
停掉,我们从服务
中启动,发现启动依然报错,额。。。
这时,我又想到了文件的权限问题,在Linux系统下,使用root用户复制的文件的所属者和所属组将也是root,类比Windows系统,也将会发生变化,对比我们复制的Data与原来的Data目录,发现少了一个Network Service用户。对比添加相应的用户及权限,编辑mysql的目录权限,让其下级目录文件自动继承。
然后再重启服务,发现服务启动成功,再无报错。
当然,还有另一种方式可以不修改文件夹属性,启动数据库。在服务
右键属性
,在登录中,选择登录身份为本地系统账户
,一样可以启动数据库。
数据迁移完成,撒花~