在Win10上折腾MySQL8.0.15
原文 MySQL8.0.15在Win10上的折腾记,CSDN同步发布。
转载请注明出处,谢谢!
安装和配置MySQL
我在Windows 10上面使用 MySQL Instller
安装的MySQL8.0.15,安装完成后,启动MySQL遇到了不少问题,特此记录踩坑记。
只要你的网络稳定,按照默认安装整个安装过程还算比较顺利。安装过程中需要设置密码,我设置的账号和密码都是 root
,所以下面的操作都是基于这个账号和密码进行的。
安装完成后,将mysql server
的 bin目录
加入到系统的path
变量中去,如图:
系统环境变量path
中加入%MySQL_Home%\bin
即可。
加入成功之后,就可以使用mysql
命令了。
题外话,我们在命令行使用的mysql
命令其实是对应MySQL Server 8.0\bin\mysql.exe
,可以使用where
命令看一下其可执行文件的位置,如下:
$ where mysql
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe
同理, mysqld
命令对应的是mysqld.exe
可执行文件。
查看安装的mysql-server
版本,可以执行下面的命令:
mysql --version
可以得到下面的输出,可以看出当前版本是 8.0.15
:
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客户端就自带该工具,个人觉得挺好用的,[嘿哈])。
用管理员身份运行,执行如下命令:
mysqld --install
如果不用管理员身份运行终端的话,会报类似下面的错误:
Install/Remove of the Service Denied!
运行成功的话,可以看到如下提示:
Service successfully installed.
再次启动 mysql80,执行:
net start mysql80
注意:这里使用的是mysql80
,这个是服务的名称 (安装时候我设置的服务名称) ,不是mysql
,下面会讲解为什么这样做,如果你没有这个mysql80
服务只需要启动mysql
服务即可。
如果出现类似 “MYSQL 服务无法启动” 的提示,可以在Windows的任务管理器中找找是否已经启动了mysqld
服务,可以手动关闭后再来启动。
如果始终启动失败,可以执行下面的命令:
mysqld --initialize
启动成功后,显示如下:
MySQL80 服务正在启动 .
MySQL80 服务已经启动成功。
可以使用下面命令查看是否成功启动mysql80服务,如下:
netstat -aon|findstr "3306"
看到如下提示表示启动成功,如下:
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服务,执行如下命令:
$ 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版本解决方案不同,网上找过很多解决方案有修改配置文件的,忙了半天还是没有搞定,最后在*上面找到方案,结合个人实践总结了一下,还烦请大家务必往下看。
解决MySQL登录受限
在看下面内容之前,务必完成之前的步骤,否则下面的内容对你来说没有太大价值。
新版本的MySQL加强了安全方便的考虑,所以使用新版本比较费劲,如果你不想折腾,可以安装MySQL的5.x版本。
Step-1:停止MySQL80服务
使用快捷键 win+R
输入 services.msc
,打开如下视图并找到MySQL80服务:
停止MySQL80服务,或者在命令行执行net stop mysql80
命令。
Step-2:另一种方式启动MySQL80服务
使用管理员身份运行终端1,并执行:
mysqld --console --skip-grant-tables --shared-memory
此时可以成功启动mysql80服务,但是在Windows的服务中是看不到的,不用理会。继续。
Step-3:启动另一个终端2
上述步骤启动完成后,再用管理员身份运行另一个Windows的终端2(CMD),记得一定要用系统自带的,Git Bash 在这步骤中不起作用。
Step-4:终端登录mysql
执行下面命令登录服务:
mysql -u root -p root
如下图可以登录成功,如下截图:
Step-5:置空密码
在上述命令行状态下,执行:
use mysql
update user set authentication_string='' where user='root';
Step-6:退出mysql服务
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服务,输入登录命令:
mysql -u root -p
登录成功后,修改密码(永远不过期的密码)执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpwd123' PASSWORD EXPIRE NEVER;
我把原来的密码修改为newpwd123
,你可以根据自己的爱好设置为其他的密码。
如果在此步骤出现类似下面的错误:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
请执行下面的SQL语句,如下命令:
flush privileges;
Step-10:退出mysql,重新登录
退出mysql,然后重新使用修改过的密码登录mysql,完事。
MySQL配置文件?
这也是个神奇的问题,最后在MySQL的官方手册里找到了Answer。
在Windows系统中C盘有个隐藏的文件夹,我们来揭开它的神秘面纱。
打开C盘文件,按照下面1、2、3顺序就可以看到ProgramData
文件夹,如下:
进入该文件夹,就可以看到MySQL的配置文件,如下:
上面我们已经说过,启动mysql80服务就默认使用的是该配置文件,可以在Windows服务中点击MySQL80查看其属性,可以看到下面的描述:
可执行文件的路径:
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,看到的属性是这样的:
可执行文件的路径:
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" MySQL
并没有指定配置文件,这也是为什么让大家启动的时候执行 net start mysql80
的原因。
顺便修改一下配置文件,把默认编码改为utf-8
,如下配置(记得是在[client]和[mysql]标签下):
[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不认。
只能把配置文件修改正确才能启动服务。
我们要学会做自己精神领域内的君王,不要成为别人情绪世界里面的奴隶。
推荐阅读