白天MySql用的好好的,晚上就登不上去了,net start mysql 显示无法启动,没有任何错误。
网上给出建议:
先安装mysqld -install 。然后 删除mysql目录下的data文件夹,但是我就没有这玩意,所以直接下一步:mysqld --initialize。神奇的data文件夹出现了。
之后,net start mysql,启动服务。mysql -uroot -p 不管输不输密码都无法进入mysql
之后使用之前收集的解决办法 《MySql安装后的使用问题》,一轮操作下来,之前明明很好用的,又失效了。
后面,发现了真正的高人的答案:
首先明确一点。mysql的配置文件my-default.ini,mysql5.7版本已经改为了my.ini,并且在C盘的隐藏文件夹programdata下:C:\ProgramData\MySQL\MySQL Server 5.7。
1.配置环境变量
我的电脑->属性->高级->环境变量->path
如:C:\Program Files\MySQL\MySQL Server 5.6\bin
注意是追加,不要覆盖
2.修改my-default.ini
在其中修改或添加配置:
[mysqld]
basedir=C:\Program Files\MySQL\MySQL Server 5.6(mysql所在目录)
datadir=C:\Program Files\MySQL\MySQL Server 5.6\data (mysql所在目录\data) //这里我没有该,使用原本默认的programdata下的文件夹路径。
3.以管理员身份运行cmd(win10右键左下角开始按钮选择以管理员身份运行cmd即可)
以管理员身份运行cmd(一定要用管理员身份运行,不然权限不够),
输入:cd C:\Program Files\MySQL\MySQL Server 5.6\bin 进入mysql的bin文件夹(不管有没有配置过环境变量,也要进入bin文件夹,否则之后启动服务仍然会报错误2)
输入mysqld -install(如果不用管理员身份运行,将会因为权限不够而出现错误:Install/Remove of the Service Denied!)
安装成功
4.运行mysqld --initialize(标题问题所在,若没有init则不存在data目录,自然无法启动成功)
5.安装成功后就要启动服务了,继续在cmd中输入:net start mysql,服务启动成功!
服务启动成功之后,就可以登录了,输入mysql -u root -p(第一次登录没有密码,直接按回车过),登录成功!
!!!!!!!!下面是重点!!!!!!!!!!!!!!!!
追加内容:
在安装mysql5.7版本时,经常会遇到mysql -u root -p直接回车登陆不上的情况,原因在于5.7版本在安装时自动给了一个随机密码,坑爹的是在init步骤的时候不像linux系统会给出命令行提示,需要手动在mysql目录下搜索*.err,以文本形式打开才能看到如下内容:
016-02-25T15:09:43.033062Z 1 [Note] A temporary password is generated for root@localhost: >mso<k70mrWe
从这里我知道了,《MySql安装后的使用问题》一问所提到的问题,原来是因为root有随机的密码。这个文件在一个.err文件下。我找到的是在:C:\Program Files\MySQL\MySQL Server 5.7\data下的一个名为SC-201804021324.err的文件。其中第六行:2018-07-13T13:41:17.201803Z 1 [Note] A temporary password is generated for root@localhost: phW34ok9xS(#
冒号后就是随机密码。这玩意貌似会随着mysqld -initialize生成data文件夹而变化。
总只,使用mysql -uroot -p 回车后输入密码:phW34ok9xS(#,就进入了mysql。然后要求你改密码:
方法1: 用SET PASSWORD命令
1
2
|
MySQL -u root
mysql>
SET
PASSWORD
FOR
'root'
@
'localhost'
=
PASSWORD
(
'newpass'
);
|
方法2:用mysqladmin
1
|
mysqladmin -u root
password
"newpass"
|
如果root已经设置过密码,采用如下方法
1
|
mysqladmin -u root
password
oldpass
"newpass"
|
方法3: 用UPDATE直接编辑user表
1
2
3
4
|
mysql -u root
mysql> use mysql;
mysql>
UPDATE
user
SET
Password
=
PASSWORD
(
'newpass'
)
WHERE
user
=
'root'
;
mysql> FLUSH
PRIVILEGES
;
|
在丢失root密码的时候,可以这样
1
2
3
4
|
mysqld_safe
--skip-grant-tables&
mysql -u root mysql
mysql>
UPDATE
user
SET
password
=
PASSWORD
(
"new password"
)
WHERE
user
=
'root'
;
mysql> FLUSH
PRIVILEGES
;
|