问题场景
当我打开navicat连接数据库的时候报错,说不能连接到数据库,如下图所示。
我第一时间想到mysql服务可能没有启动,于是我打开任务管理器查看服务,果然发现mysql服务没有启动。
然后我直接右键点击启动发现启动不了,于是我用管理员运行cmd命令行窗口输入net start mysql
启动mysql,结果还是启动不了,如下图所示。
然后我就去网上查找攻略,看看这怎么回事。我在网上找到几种方法,如下:
方法一
以管理员身份打开cmd,进入到mysql的bin目录下,然后依次执行命令
// 命令1
mysqld -remove MySQL
// 命令2
mysqld -install
// 命令3
mysqld --initialize-insecure
// 命令4
net start mysql
我执行后的效果如下图所示。
方法一失败。
方法二
同样也是打开命令行窗口,输入命令查看3306端口是否被占用。
netstat -ano | findstr :3306
或
netstat -ano
如果端口被占用就将对应的进程杀掉。
taskkill /f /pid xxxx
其中xxxx对应进程的pid。
我执行完netstat -ano | findstr :3306
后并没有找到有进程占用了3306端口,执行了netstat -ano
查看了完整的进程信息也并没有找到有进程占用3306端口。
我在博客园中找到博客[MySQL] “MySQL 服务无法启动”原理及解决方法就是使用该方法解决,但是对我并没有用,呜呜呜;(
方法三
网上还有种方法说是配置文件的问题,找到my.ini文件。
查看有没有错误,正确的配置应该如下。
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\Program Files\MySQL\MySQL Server 8.2
# 设置mysql数据库的数据的存放目录
datadir=D:\Program Files\MySQL\MySQL Server 8.2\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
但是自从我上次正常使用并没有修改过配置文件,所以这个方法也没啥用。
可以试试用记事本打开后另存为,格式选择ANSI,然后重新启动mysql试试。
方法四
来到mysql的安装目录下,将data文件夹进行备份,然后清空data目录的数据。
然后以管理员身份打开cmd,就进入到mysql的bin目录下。
执行命令
mysqld --initialize
执行完这条命令后,data文件夹会重新生成文件,先不管。
再次启动,发现启动成功。
然后输入命令net stop mysql
停止mysql服务。
再将data目录的文件清空,然后将最开始备份的data文件复制进去,再次启动。
我这里又失败了。但是在博客【完美解决】mysql启动不了:本地计算机上的MySQL服务启动后停止 中有人用这个方法成功了。
最终解决方法
该方法比较麻烦,如果前面几个方法都不行的话可以尝试一下这个方法。
前面几步跟方法四一样。
来到mysql的安装目录下,将data文件夹进行备份,然后清空data目录的数据。
然后以管理员身份打开cmd,就进入到mysql的bin目录下。
执行命令
mysqld --initialize
执行完这条命令后,data文件夹会重新生成文件,先不管。
再次启动,发现启动成功。
在命令行窗口输入mysql -uroot -p
启动mysql。这个时候会叫你输入密码,密码在刚才生成的data目录下,找到以电脑名.err的文件。
用记事本打开。
复制红框的密码,然后切换到命令行窗口鼠标右键粘贴回车就行了。
能正常使用,我们来修改一下数据库的密码。
还是在刚才的窗口输入下面的命令就能修改密码了。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
数据库是能够正常启动并使用了,但是以前的数据还没有备份回来,接下来我们来备份自己的旧数据。
由于在方法四中将旧数据直接覆盖data下的数据不能够正常启动,所以我想如何在mysql启动不了的情况下备份数据库,然后将数据重新导入到库中应该就能够解决问题了,所以有了该方法,但是这个方法比较麻烦,如果实在不行的话就用该方法吧。
该方法是用了博客mysql如何在无法启动的情况下进行数据恢复中提到的ibd转sql文件的方法。
其中提到了github上的一个项目,项目地址为:https://github.com/ddcw/ibd2sql?tab=readme-ov-file
进入到该项目,点击下载。
下载后解压,解压后的目录结构。
在该窗口按住shift点击鼠标右键,打开终端,输入以下命令。
python main.py 源ibd文件路径(例如: D:\xxxx.ibd) --sql --ddl > 目标sql文件路径(例如: D:\sql\xxxx.sql)
这里原路径我们找到最开始备份的data副本,找到你要备份的数据库(data中跟你的数据库同名的文件夹),进入到该文件夹下就有ibd文件,每个ibd文件对应数据库中的一张表。
我是将每个数据库下新建了一个sql文件夹,将执行后生成的sql文件放到sql目录下。
然后将你想要备份数据库的表一张一张备份就行了。
所有的数据备份好后打开navicat,新建连接,创建以前的数据库同名的新数据库,然后新建查询,将得到的sql文件内容复制进去全选运行就行了。
这里按道理来说是可以点击数据库右键运行sql脚本的,但是我运行后没有成功,如图。
数据库中的表创建好过后,启动用到该数据库的项目看能不能正常使用。
启动一个项目后,登录。
登录成功,数据成功备份。
标签:启动,mysql,数据库,sql,无法,data,备份 From: https://www.cnblogs.com/errors1/p/18586897