发布于 

MySQL8.0.15在Win10上的折腾记

安装和配置 MySQL

我在 Windows 10 上面使用 MySQL Instller 安装的 MySQL-8.0.15,安装完成后,启动和使用 MySQL 遇到了不少问题,特此记录踩坑记。

只要你的网络稳定,按照默认安装,整个安装过程还算顺利。

安装过程中需要设置密码,我设置的账号和密码都是 root,所以下面的操作都是基于这个账号和密码进行的。

安装完成后,将 mysql serverbin 目录加入到系统的 path 变量中去,如图:

1568529858131

系统环境变量 path 中加入 %MySQL_Home%\bin 即可。

加入成功之后,就可以使用 mysql 命令了。

题外话,我们在命令行使用的 mysql 命令其实是对应 MySQL Server 8.0\bin\mysql.exe,可以使用 where 命令看一下其可执行文件的位置,如下:

1
2
$ where mysql
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe

同理, mysqld 命令对应的是 mysqld.exe可执行文件。

查看安装的 mysql-server 版本,可以执行下面的命令:

1
mysql --version

可以得到下面的输出,可以看出当前版本是 8.0.15:

1
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe  Ver 8.0.15 for Win64 on x86_64 (MySQL Community Server - GPL)

我用的命令行终端工具是 Git bash(安装Git客户端就自带该工具,个人觉得挺好用的,[嘿哈])。

用管理员身份运行 Git bash,然后在该终端工具中执行如下命令:

1
mysqld --install

如果不用管理员身份运行终端的话,会报类似下面的错误:

1
Install/Remove of the Service Denied!

运行成功的话,可以看到如下提示:

1
Service successfully installed.

再次启动 MySQL80,一定要用管理员身份启动终端,否则会报 发生系统错误 这样的错误(如果你是使用管理员身份启动终端的还是报这个错误,也有可能是该服务已经启动了),执行:

1
net start MySQL80

注意:这里使用的是 MySQL80,这个是服务的名称 (安装时候我设置的服务名称) ,不是 mysql,下面会讲解为什么这样做,如果你没有这个 MySQL80 服务只需要启动名称为 mysql 的服务即可。

如果出现类似 “MYSQL 服务无法启动” 的提示,可以在 Windows 的任务管理器中找找是否已经启动了 mysqld 服务,可以手动关闭后再来启动。

如果始终启动失败,可以执行下面的命令:

1
mysqld --initialize

启动成功后,显示如下:

1
2
MySQL80 服务正在启动 .
MySQL80 服务已经启动成功。

可以使用下面命令查看是否成功启动 MySQL80 服务,如下:

1
netstat -aon|findstr "3306"

看到如下提示表示启动成功,如下:

1
2
3
4
5
TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       10344
TCP 0.0.0.0:33060 0.0.0.0:0 LISTENING 10344
TCP [::]:3306 [::]:0 LISTENING 10344
TCP [::]:33060 [::]:0 LISTENING 10344
TCP [::1]:3306 [::1]:56962 TIME_WAIT 0

登录 MySQL80 服务,执行如下命令:

1
2
3
$ mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

很不幸的是,登录失败(ERROR 1045)。

那我们就来解决这个问题,这个版本的 MySQL 和之前的 8.0.x 版本解决方案不同,网上找过很多解决方案有修改配置文件的,忙了半天还是没有搞定,最后在 StackOverflow 上面找到方案,结合个人实践总结了一下,还烦请大家务必往下看。

解决登录 MySQL 受限

在看下面内容之前,务必完成文中前面说的步骤,否则下面的内容对你来说没有太大价值。

新版本的 MySQL 加强了安全方便的因素,所以使用新版本比较费劲,如果你不想折腾,可以安装 MySQL 的 5.x 版本。

Step-1:停止 MySQL80 服务

使用快捷键 win+R 输入 services.msc,打开如下视图并找到 MySQL80 服务:

1568529858131

停止 MySQL80 服务,或者在命令行执行 net stop MySQL80 命令。

Step-2:另一种方式启动 MySQL80 服务

使用管理员身份运行终端1,并执行:

1
mysqld --console --skip-grant-tables --shared-memory

此时可以成功启动 MySQL80 服务,但是在 Windows 的服务中是看不到的,不用理会。继续。

Step-3:启动另一个终端2

上述步骤启动完成后,再用管理员身份运行另一个 Windows 的终端2(CMD),用系统自带的或者 Git Bash 都可以,但是如果使用 Git Bash 的话,必须在登录mysql 的时候使用 winpty(Git Bash自带的工具)命令,否则登录会卡住不动。命令使用如下:

1
winpty mysql -uroot -proot

Step-4:终端登录 mysql

执行下面命令登录服务:

1
mysql -u root -p root

如下图可以登录成功,如下截图:

1568529858131

Step-5:置空密码

在上述命令行状态下,执行:

1
2
3
use mysql

update user set authentication_string='' where user='root';

Step-6:退出 mysql 服务

1
quit

Step-7:关闭 mysqld 启动的 MySQL80 服务

需要关闭以 -console --skip-grant-tables --shared-memory 启动的 MySQL80 服务,直接在终端1中 ctrl+c 即可。

Step-8:启动 MySQL80 服务

使用Step-1步骤中的方式打开 Windows 的服务启动或者在终端1中执行 net start MySQL80 启动 MySQL80 服务。

Step-9: 无密码登录 mysql

在步骤 Step-5 中已将密码置空,现在可以无密码状态登录 mysql 服务,输入登录命令:

1
mysql -u root -p 

登录成功后,修改密码(永远不过期的密码)执行:

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpwd123' PASSWORD EXPIRE NEVER;

我把原来的密码修改为 newpwd123,你可以根据自己的爱好设置为其他的密码。

如果在此步骤出现类似下面的错误:

1
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

请执行下面的SQL语句,如下命令:

1
flush privileges;

Step-10:退出 mysql,重新登录

退出 mysql,然后重新使用修改过的密码登录 mysql,完事。

MySQL配置文件?

这也是个神奇的问题,最后在 MySQL 的官方手册里找到了 Answer。

在 Windows 系统中 C 盘有个隐藏的文件夹,我们来揭开它的神秘面纱。

打开 C 盘文件,按照下面1、2、3顺序就可以看到 ProgramData 文件夹,如下:

1568529858131

进入该文件夹,就可以看到 MySQL 的配置文件,如下:

1568529858131

上面我们已经说过,启动 MySQL80 服务就默认使用的是该配置文件,可以在 Windows 服务中点击 MySQL80 查看其属性,可以看到下面的描述:

1
2
可执行文件的路径:
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80

其中,--defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" 就是指定配置文件路径的。

而在 Windows 服务中点击 MySQL,看到的属性是这样的:

1
2
可执行文件的路径:
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" MySQL

并没有指定配置文件,这也是为什么让大家启动的时候执行 net start MySQL80 的原因。

顺便修改一下配置文件,把默认编码改为 utf-8,如下配置(记得是在[client]和[mysql]标签下):

1
2
3
4
5
6
7
8
9
10
11
[client]
# pipe=
# socket=MYSQL
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

[mysql]
no-beep
# 设置默认编码
default-character-set=utf8

还有奇葩的错误

会持续记录各种奇葩错误。

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

登录 mysql 服务,报上面的错误,说明没有启动成功 MySQL80 服务,最大的可能是你修改了配置文件要么是格式错了要么是配置的东西 mysql 不认。

只能把配置文件修改正确才能启动服务。


我们要学会做自己精神领域内的君王,不要成为别人情绪世界里面的奴隶。


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

veryitman