目录
本博客为个人观点仅供参考,问题关于mysql停止服务,无法在任务管理器手动启动,以至于Navicat无法连接本地数据库,导致Eclipse也无法实现与数据库的连接,希望本博客可以帮助遇到相同问题的友友解决问题 。
问题原因
人果然不能太闲,昨天的一个早晨,打开电脑发现C盘空余空间怎么少了那么多,于是我把箭头指向了Mysql文件还有Java文件以及VMware等文件具体的一顿瞎操作如下:
- 将Program Files文件里的Java文件复制移动到D盘的Program Files里,我以为只需要把环境变量里原来相关的路径由C改为D即可,事实证明我是个傻子;
- 说实话看到Mysql在C盘里很早就看不惯不爽了,正好拿你开刀给C盘腾空间,于是我一顿猛操作,将Program Files里的Mysql文件也复制拖到了D盘同时将Program Data里的Mysql文件也移动到D盘同时建立了一个Program Data文件夹专门存放它,并且按照网上的参考把注册表里的路径也改为了D盘下的路径,没错最后还是证明了一点我是个傻子;
- 不仅如此,我还把Python的环境配置软件Anonada也给移动了,导致桌面图标消失无法启动,没错还是证明了我是个傻子;
- 值得一笑的是C盘空余空间多了许多,而难受的是我这短短一上午的操作需要我几天去解决,对此我表示是该挂个号看看了,傻子应该是没跑了,但是是晚期还是早期值得关注;
年轻人确实要自找苦吃,人真的不能太闲!!! 奉劝各位友友,“前车之鉴,后车之师”
报错分析
打开Navicat,进入连接本地数据库发现返回报错信息
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
报错分析:无法连接Mysql,服务没有开启
同时我们打开任务管理器->服务->找到mysql和mysql80,发现 mysql和mysql80都显示已停止状态。此时如果可以手动启动,那么可以直接跳过这一部分内容。笔者这里遇到的问题是无法启动
解决过程
我们先“win + r”输入cmd,进入命令行窗口,输入netstat -ano查看端口3306有没有被占用(mysql服务的端口默认是3306)进入之后的图片如下:
可以发现mysql的端口并没有被占用,排除掉一个问题原因。
接着按照网上的博客将注册表中MySQL的路径进行修改,改成C盘下的安装路径(C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe)参照自己的路径进行修改。
然后是修改my.ini文件将[mysqld]下的datadir和basedir的路径都改成对应下的C盘目录路径。
当完成这些操作后,我们以管理员身份运行命令行窗口,进入执行以下命令:
mysqld -remove
mysqld -install
mysqld --initialize
net start mysql
如果没有其他问题的话,操作到这里(注意是在管理员命令行下运行,因为文件路径是在C盘),mysql是可以正常启动的,运行结果显示如下:
不过我们打开Navicat去连接本地数据库时,发现还是报错,报错代码如下:
这是由于mysql在安装后会产生两个服务分别是mysql和mysql80,mysql80是本地服务;mysql是网络服务,具体网上的相关回答比较多的是这两篇文章:两个mysql服务,mysqlh和mysql57,mysql80和mysql,本地进程和网络进程。感兴趣的友友可以看看研究研究。
而根据报错我们发现mysql启动但是Navicat还是连接不上,这也印证了上述博客中提到的本地系统(即mysql服务)只能对本地数据库进行操作,而网络服务(mysql80)则可以传到外部进行使用,而Navicat这样的图形化操作软件就是通过网络进行连接的。
我们找到了问题所在那就是mysql80启动不了,接下来就是解决这个问题:
在参考很多博文后,找到一篇总结很全的博文,这里引用一下这篇博文:MySQL80无法启动
我再分享一下我处理的过程:网上绝大部分都提到先检查端口被没被占,这一步我们已经检查过了,然后是找到MySQL的安装目录下的data文件删除里面的内容,然后在管理员窗口运行:
mysqld --initialize //注: 这一步实际上是初始化数据(mysql常用命令)
运行完后,再关闭cmd领打开一个窗口输入net start mysql—重新启动mysql;到这里如果你的问题还没解决,那么恭喜,你跟我一样(都是倒霉蛋)。
我们接着输入:
mysqld --initialize --console // 注:这一步是通过控制台查看具体报错原因在哪
直入眼帘的就是醒目的[ERROR] ,分析报错:数据库初始化失败,很有可能你的my.ini文件配置还是有错或则路径不对,有的博文给的建议是将my.ini文件放入bin目录下,但大部分博文都是跟bin目录同级,所以笔者这里不建议把my.ini文件放进bin目录里,然后你的my.ini文件内容应大致如下:
其中的basedir和datadir路径应根据电脑中mysql的安装路径进行编辑,另外打开你的data文件里有一个文件是.err后缀的日志信息文件,我们打开发现里面有这样一个报错:
根据网上给的建议,在配置文件中添加
shared -memory
这里参考MySQL四种连接方式具体原理,笔者还在探寻,也请各位行内大佬给予指教
添加完后,我们在接着处理数据库初始化失败的问题,配置好my.ini文件后。
把data里面的内容全部删除,然后我们修改一下注册表里的ImagePath 找到MySQL80 修改为"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" MySQL80
再执行
mysqld --initialize --console
矩形框里是初始化的密码需要复制下来一会要用
我们接下来输入
net start mysql
这个是本地进程,我们在这里修改初始化密码
Enter password:就是你复制的密码
登录后修改先输入
use mysql
select user,host from user;
查看你的root用户是localhost还是%,笔者的是localhost;
进行修改密码(注意:MySQL80即8.0版本以上修改密码的命令操作有所更改 参考:修改密码方式;8+版本注意;
alter user’root’@‘localhost’ identified with mysql_native_password by ‘新密码’;
如果发现还是报错,则再输入:
update user set authentication_string =''where user=‘root’;
flush privileges
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘你要修改的密码’ PASSWORD EXPIRE NEVER;
修改完后再重新登录一下,使用新的密码。
我们启动MySQL80试一试:
问题得以解决。
个人心得体会
友友们,在进行移盘操作时一定要慎重!慎重!再慎重!
稍稍一个不慎,启动不了就不是小事了。还有就是人不能太闲,mysql这里面的水太深,确实不好把握,我已经两次栽在mysql上了,友友们引以为戒。我的上一篇博文也是跟mysql的相爱相杀: root权限丢失
参考博文
链接: