遇到问题
MySQL workbench 又崩了。。。不是第一次了,打开workbench 说找不到数据库文件,跟上次一样。
解决问题
我网上找了一圈也没找到什么特别好的解决方法,都说是初始化数据库,但是我初始化还是启动不了SQL服务器,不得以只能采用下面的方法。
- 在cmd里进入mysql的bin目录,我的是
C:\Program Files\MySQL\MySQL Server 8.0\bin
- mysqld --remove //删除mysql服务
- mysqld --install //安装服务
- mysqld --initialize //初始化
- net start mysql //启动成功
- 初始密码,在MySQL Server x.x.x \data路径下有一个.err结尾的文件,里面写的有password。
- 打开mysql,输入原密码密码登录
- 修改密码输入
ALTER USER 'test'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '新密码';
成功是成功了,数据库和数据都没了。
还好之前崩了一次有点经验了,在初始化前把data文件夹备份了一下,但是SQL文件没有,而且在做项目是我一个人做,所以数据库也是边做边改,没有保存一个最终版的sql文件,只能是凭记忆把数据库再建起来了。。。
下面开始恢复数据
- 数据库当然要建起来一个跟原来一模一样结构的。
- 在前面备份的data文件夹里找到要还原的数据库的.ibd文件(data不出意外的话应该是在
C:\Program Files\MySQL\MySQL Server 8.0
里面,也可能在别处,我第一次崩的时候data是用everything在Program Files(x86)\MySQL\
找到的) - 先在mysql中删除原来的TABLESPACE(也就是.ibd文件):
ALTER TABLE 库名.表名 DISCARD TABLESPACE;
(不知道能不能直接找到同第2步直接找到.ibd文件然后删掉,没有尝试) - 然后把第2步找到的.ibd文件复制粘贴到现在这个数据库的data中去。
- 在到mysql里输入 :
ALTER TABLE 库名.表名 IMPORT TABLESPACE; SHOW WARNINGS;
(SHOW WARNINGS指示InnoDB将尝试导入文件而不进行架构验证。) - 导入成功
总结经验
不知道workbench 是怎么崩的,在最后一次用和崩掉之间电脑崩了一次,蓝屏被我强制重启了,当时mysql还开着在,可能跟这个有关系。看来window还是不靠谱,今天刚买了阿里的服务器,赶紧入门一下Linux把项目部署到Linux上去。
还有还有,不管是项目还是数据库,都要记得备份!!一定要养成及时备份的习惯。
2020.4.1更新
不出意外,在我的电脑崩了一次后,我的mysql workbench又崩了,好在之前都备份好了sql文件,这次恢复的话会方便一点。但是还是很烦啊。。。
我在网上找了找原因,发现了一个人遇到跟我一样的问题
MySQL Workbench unable to restore workspace 看到里面点赞最多的一条评论,要删除C:\Users\YOURUSER\AppData\Roaming\MySQL\Workbench\sql_workspaces
里面的所以文件,我打开看了一下,里面的内容基本就是nullnullnullnull...
。原评论说删除后本次不会修复,以后会,不太懂什么意思,以后出现这个问题会自动修复?不清楚。
删完后,根据网上说就解决了,但是我再打开workbench是不报错了,但是mysql服务还是启动不了,连接不到服务器,也看不到数据表。
那没办法,还是上面的老方法把mysql remove => install => initialize => 修改密码。
但当我打开workbench准备导入之前备份的.sql文件的时候,发现竟然数据表又回来了,里面的数据也都在,按理说我initialize (初始化)了之后应该是表和数据都会被删掉,有点意外,不知道会不会跟上面删除了sql_workspace文件夹里面的东西有关系,但不想再折腾一遍了,有缘再实验一下吧。
2020.4.8更新
电脑又崩了,但是这次没有开workbench,电脑重启后再打开workbench,mysql也崩了,意料之中。
我再受不了了,我看到电脑崩溃的时候说是预体验版本出现了问题。所以我把预体验关了,系统回滚到之前的版本。(当时是为了玩Linux子系统开的,后来安了虚拟机就怎么用过了)
系统变成稳定版的之后再打开workbench,发现mysql又好了,数据也都在,那就这样吧。