我的编程拦路虎———MySQL

作者在尝试将Mysql从C盘移动到D盘后遇到了服务无法启动的问题,导致Navicat和Eclipse无法连接数据库。经过一系列的报错分析和解决步骤,包括修改注册表路径、my.ini配置、初始化数据库等,最终解决了服务启动和连接问题。作者强调了谨慎操作系统文件和数据库的重要性,并分享了个人的心得体会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我与Mysql的相爱相恨——服务无法正常启动

目录

本博客为个人观点仅供参考,问题关于mysql停止服务,无法在任务管理器手动启动,以至于Navicat无法连接本地数据库,导致Eclipse也无法实现与数据库的连接,希望本博客可以帮助遇到相同问题的友友解决问题 。

问题原因

人果然不能太闲,昨天的一个早晨,打开电脑发现C盘空余空间怎么少了那么多,于是我把箭头指向了Mysql文件还有Java文件以及VMware等文件具体的一顿瞎操作如下:

  1. 将Program Files文件里的Java文件复制移动到D盘的Program Files里,我以为只需要把环境变量里原来相关的路径由C改为D即可,事实证明我是个傻子
  2. 说实话看到Mysql在C盘里很早就看不惯不爽了,正好拿你开刀给C盘腾空间,于是我一顿猛操作,将Program Files里的Mysql文件也复制拖到了D盘同时将Program Data里的Mysql文件也移动到D盘同时建立了一个Program Data文件夹专门存放它,并且按照网上的参考把注册表里的路径也改为了D盘下的路径,没错最后还是证明了一点我是个傻子
  3. 不仅如此,我还把Python的环境配置软件Anonada也给移动了,导致桌面图标消失无法启动,没错还是证明了我是个傻子
  4. 值得一笑的是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和mysql57mysql80和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权限丢失

参考博文

链接:

  1. MySQL从C盘移到D盘
  2. MySQL 服务正在启动.MySQL 服务无法启动.服务没有报告任何错误
  3. 安装MySQL8.0+,数据库初始化失败错误解决办法
  4. MySQL80无法启动
  5. 两个mysql服务
  6. mysqlh和mysql57
  7. mysql80和mysql
  8. 本地进程和网络进程
  9. 修改密码方式
    感谢上述笔者的引导和帮助,希望各位友友也能成功解决你们的报错。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小河马@hbuer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值