MySQL8.0.15在Win10上的折腾记
安装和配置 MySQL
我在 Windows 10
上面使用 MySQL Instller
安装的 MySQL-8.0.15,安装完成后,启动和使用 MySQL 遇到了不少问题,特此记录踩坑记。
只要你的网络稳定,按照默认安装,整个安装过程还算顺利。
安装过程中需要设置密码,我设置的账号和密码都是 root
,所以下面的操作都是基于这个账号和密码进行的。
安装完成后,将 mysql server
的 bin 目录
加入到系统的 path
变量中去,如图:
系统环境变量 path
中加入 %MySQL_Home%\bin
即可。
加入成功之后,就可以使用 mysql
命令了。
题外话,我们在命令行使用的 mysql
命令其实是对应 MySQL Server 8.0\bin\mysql.exe
,可以使用 where
命令看一下其可执行文件的位置,如下:
1 | where mysql |
同理, 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 | MySQL80 服务正在启动 . |
可以使用下面命令查看是否成功启动 MySQL80
服务,如下:
1 | netstat -aon|findstr "3306" |
看到如下提示表示启动成功,如下:
1 | TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 10344 |
登录 MySQL80
服务,执行如下命令:
1 | mysql -uroot -proot |
很不幸的是,登录失败(ERROR 1045)。
那我们就来解决这个问题,这个版本的 MySQL 和之前的 8.0.x 版本解决方案不同,网上找过很多解决方案有修改配置文件的,忙了半天还是没有搞定,最后在 StackOverflow 上面找到方案,结合个人实践总结了一下,还烦请大家务必往下看。
解决登录 MySQL 受限
在看下面内容之前,务必完成文中前面说的步骤,否则下面的内容对你来说没有太大价值。
新版本的 MySQL 加强了安全方便的因素,所以使用新版本比较费劲,如果你不想折腾,可以安装 MySQL 的 5.x 版本。
Step-1:停止 MySQL80 服务
使用快捷键 win+R
输入 services.msc
,打开如下视图并找到 MySQL80 服务:
停止 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 |
如下图可以登录成功,如下截图:
Step-5:置空密码
在上述命令行状态下,执行:
1 | use mysql |
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
文件夹,如下:
进入该文件夹,就可以看到 MySQL 的配置文件,如下:
上面我们已经说过,启动 MySQL80 服务就默认使用的是该配置文件,可以在 Windows 服务中点击 MySQL80 查看其属性,可以看到下面的描述:
1 | 可执行文件的路径: |
其中,--defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"
就是指定配置文件路径的。
而在 Windows 服务中点击 MySQL,看到的属性是这样的:
1 | 可执行文件的路径: |
并没有指定配置文件,这也是为什么让大家启动的时候执行 net start MySQL80
的原因。
顺便修改一下配置文件,把默认编码改为 utf-8
,如下配置(记得是在[client]和[mysql]标签下):
1 | [client] |
还有奇葩的错误
会持续记录各种奇葩错误。
1、ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
登录 mysql 服务,报上面的错误,说明没有启动成功 MySQL80 服务,最大的可能是你修改了配置文件要么是格式错了要么是配置的东西 mysql 不认。
只能把配置文件修改正确才能启动服务。
我们要学会做自己精神领域内的君王,不要成为别人情绪世界里面的奴隶。