Posted on 

MySQL注册表迁移和两种服务模式的切换

二战MySQL

故事背景是我在MySQL里建立的数据库不能和data文件夹同步,
这可能是我的MySQL走的网络服务连接,也可能是my.ini配置文件没写明白,总之我把MySQL切换到本地服务连接模式之后就能同步了。
所以试试切换成数据库本地连接,刚好因为C盘空间真的不够,想着说顺便一块将MySQL迁移到别的盘。

修改MySQL及数据存放位置

C盘空间不足人必修课之一

  1. 停止mysql服务

    • 本地服务:net stop mysql
    • 网络服务:本地控制面板/管理工具/服务,或者win+r输入services.msc,找到mysql服务右键停止
    • 其实本地服务和网络服务都可以在服务面板里打开或停止
  2. 转移数据文件,换盘放

  3. 修改新地址文件中的my.ini文件

    主要改这两条,改成新地址

    1
    2
    basedir=E:\lenovo\MySQL\MySQL Server 8.0
    datadir=E:\lenovo\MySQL\MySQL Server 8.0\data
  4. 修改注册服务

    cmd输入regedit进入注册表编辑器

    打开HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MySQL文件夹

    选择ImagePath,指定所修改的my.ini位置

    比如我的新地址是–defaults-file=”E:\lenovo\MySQL\MySQL Server 8.0\my.ini”

  5. 服务启动

    • 本地服务:net start mysql
    • 网络服务:服务面板打开mysql网络服务

查看数据库文件存储位置

由于我当时要接入数据库信息,但是找不到文件在哪,这个时候可以在mysql里输入下面命令,会返回位置:(这个时候我还是网络服务连接的数据库)

1
show global variables like "%datadir%";

Data目录初始化

打开mysql文件夹发现,我的文件夹里根本没有Data文件夹😶

没有?那就初始化目录一下

用管理员的身份在终端念出下面的咒语,如果没有报错的话,data文件夹就会现身了

1
2
mysqld --initialize
mysqld --no-defaults --initialize`

启动MySQL本地系统连接服务

1
2
3
mysqld -install   //注册
net start mysql //启动
net stop mysql //停止

img

去查了一下,大部分说的是my.ini配置文件没写明白,可是问题来了,我的mysql8根目录下找不到my.ini文件😶

试过一些方法,还是找不到my.ini(后来知道了怎么勾选查看隐藏文件,不过无所谓,我会新建文件覆盖),我自己建一个my.ini,然后再试试:

好的,直接被拒绝😢

img

MySQL有分本地系统连接和网络服务连接,大胆推测应该是只能使用一种连接方式连接(?)

我上面的失败是建立在我已经连接了网络服务之后的,在我关闭了网络服务的mysql80之后,就能连接上了

用管理员身份打开终端输入

1
mysqld --initialize --console

我根据使用命令之后返回的信息,修改了my.ini文件,然后粉碎掉旧data文件,再重复执行上面的命令,直到不报错,出现A temporary password is generated for root@localhost:xxx

这个是本地系统给你设定的mysql处初始随机密码,一定要记下来!(不然一直密码错误无法登录mysql

img

之后mysql -uroot -p随机密码,诶,连上了!

一些踩坑

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

连上mysql之后,测试使用mysql命令的时候又双叒叕给我报错了,OK这题我会,因为是给的是初始随机密码,所以肯定要设置一个新密码

1
set password='你的新密码';

ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost:3306’ (10061)

img

img

见过好几次这个报错,我推测这个报错应该就是没接上mysql服务(?)

上面第一张图应该是昨天连接数据库太频繁了,给我卡住了,连不上(?)

第二张是今天特地重启了一次电脑才开始连接,就莫名其妙地,成功了

ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ (using password: YES)

这个大概率是密码问题,这条报错最后面写(using password:NO)的话就是没输入密码
(using password: YES)大概率就是密码错误了

主要是之前我一直用的网络连接,现在转成了本地连接,没想到系统会给我初始随机密码,所以我就是一直输入旧密码一直报错😢

ERROR MySQL服务启动后停止

img

这个大概就是昨天操作太频繁了,我一会连接一会又停止它,它大概是不开心了,给我发黄牌警告呢🤐

总结就是重启大法好。

my.ini配置文件

比较多的说法是可以从mysql文件夹里点开查看部分,勾选查看隐藏的项目就能看到my,ini文件,但是我当时没找到,所以是新建my.ini文件覆盖旧文件来解决的问题

我用的是mysql8,根据mysqld --initialize --console返回的信息修改了我原本的my.ini文件 提一些需要注意的点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[mysqld]
port=3306
# 设置mysql的安装目录及data数据存放目录,注意这里要修改成自己mysql的路径及想要存放data的路径
basedir=E:\lenovo\MySQL\MySQL Server 8.0
datadir=E:\lenovo\MySQL\MySQL Server 8.0\data
# 旧的服务端使用的字符集为utf8(utfmb3),新版本及未来版本为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# default_authentication_plugin 功能已弃用
; default_authentication_plugin=mysql_native_password
# --ssl=off 也弃用了,新版本可以用下面的语句代替
;--tls-version=invalid
[mysql]
# 设置mysql客户端默认字符集,同理
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4


Copyright © 2022 - 2023 BlindArbiter

Powered by Hexo | Theme - Stellar