记录一次mysql数据库修复过程
1. 场景
最近在使用小皮面板进行靶场搭建的时候,发现数据库一直无法启动,而在虚拟机里是可以启动了,这就很奇怪了。意识到我的本地已经安装了mysql,可能产生了冲突,但是当我兴冲冲启动本地mysql的时候服务却无法启动了。
尝试启动了几次mysql重新删除添加服务后发现问题没有得到解决。
最后在gpt的帮助下终于恢复了数据。
2. 修复步骤
2.1 保留数据
由于mysql服务没法启动,所以只能重新安装一下mysql,但是原问题mysql的data
和my.ini
需要保留。
2.2 重新安装mysql
安装mysql也很简单,我使用的是zip安装包进行的安装,https://downloads.mysql.com/archives/community/,下载后解压到你需要的目录即可。
初始化mysql,启动mysql服务,登录后修改密码。
E:\mysql>mysqld --initialize --console 2024-07-29T06:07:30.628809Z 0 [System] [MY-013169] [Server] E:\mysql\bin\mysqld.exe (mysqld 8.0.36) initializing of server in progress as process 12032 2024-07-29T06:07:30.666329Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2024-07-29T06:07:31.123514Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2024-07-29T06:07:33.725250Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: !p_T,uepg5dz E:\mysql>net start mysql MySQL 服务正在启动 . MySQL 服务已经启动成功。 E:\mysql>mysql -u root -p Enter password: ************ Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.36 Copyright (c) 2000, 2024, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> alter user 'root'@'localhost' identified by '123456'; Query OK, 0 rows affected (0.01 sec) mysql> exit Bye
文件复制,修改配置
首先停止mysql服务,复制ibdata1
,mysql.ibd
以及数据库对应的文件到Data
目录下,并且修改my.ini
my.ini
配置添加innodb_force_recovery = 1
,恢复过数据库后记得删掉,其他配置是我以前数据库配置的。
[mysqld] innodb_force_recovery = 1 #设置3306端口 port=3306 #设置mysql的安装目录 basedir=E:\mysql #设置mysql数据库的数据的存放目录 datadir=E:\mysql\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 #拒绝或允许客户端加载本地数据,默认OFF local_infile=ON [mysql] #设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] #设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8mb4
启动mysql服务。
导出备份文件
使用mysqldump
导出数据库。
E:\mysql>mysqldump -u root -p gpt > backup.sql Enter password: ******
停止服务,修改回my.ini后再启动服务
备份文件
E:\mysql>mysql -u root -p gpt < backup.sql Enter password: ******
这时如果登录数据库后发现gpt
库的数据以及恢复了,其他数据库可以看到名字,但是表中没有数据,可以直接将事故数据库中的Data中的数据库目录复制到新的数据库Data目录中。
至此数据库恢复完毕。
---------------
我每一次回头,都感觉自己不够努力,所以我不再回头。
---------------
分类:
DB / MySQL
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战