mysql 数据库不能正常启动?

mysql 数据库不能正常启动?,第1张

故障处理

移除当前使用的 redo log 文件,然后可以试着启动数据库,结果启动失败!

提示:

[ERROR] InnoDB: Page [page id: space=0, page number=0] log sequence number 178377412422 is in the future! Current system log sequence number 165909011496.

这样的错误,这是因为 MySQL writer 线程按照配置的时间间隔以 page 为单位刷新 buffer 数据到磁盘。当数据刷新到磁盘的时候,新写入磁盘的 page 包含了较新的 LSN,此时系统 system 表空间头的 LSN 并没有同步更新,通常这是检查点线程的工作。在正常的崩溃恢复中,MySQL 可以借助 redo log 来进行前滚和回滚,但是此时 redo log 已经被我们删掉了,MySQL 无法进行恢复 *** 作。此时,我们设置 innodb_force_recovery=3 来强制启动 MySQL,仍然启动不成功,改成 4 后启动了!

再使用 mysqldump 导出备份,结果噩梦又降临了!MySQL 又 crash 了。

提示:

InnDB: Failed to find tablespace for table......

设置参数 innodb_force_recovery=5,数据库仍然启动失败,再设置成 6,启动成功!用 sqldump 顺利把数据备份出来了!

再初始化数据库,把刚刚备份的数据库导入,数据库恢复成功完成!

参数说明

这里的关键是设置 innodb_force_recovery 参数,对应这个参数的说明如下:

1. SRV_FORCE_IGNORE_CORRUPT:忽略检查到的 corrupt 页;

2. SRV_FORCE_NO_BACKGROUND:阻止主线程的运行,如主线程需要执行 full purge *** 作,会导致 crash;

3. SRV_FORCE_NO_TRX_UNDO:不执行事务回滚 *** 作;

4. SRV_FORCE_NO_IBUF_MERGE:不执行插入缓冲的合并 *** 作;

5. SRV_FORCE_NO_UNDO_LOG_SCAN:不查看重做日志,InnoDB 存储引擎会将未提交的事务视为已提交;

6. SRV_FORCE_NO_LOG_REDO:不执行前滚的 *** 作。

有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。

1. check table 和 repair table

登陆mysql 终端:

mysql -uxxxxx -p dbname

check table tabTest

如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

repair table tabTest

进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

myisamchk tablename.MYI

进行检测,如果需要修复的话,可以使用:

myisamchk -of tablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:

[ -x /tmp/mysql.sock ] &&/pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。

需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

1、在MySQL数据库安装时选择过MySQL服务器随系统启动,但如果没有选择,也没关系,可以在可以在Windows服务管理器启动,具体在开始菜单搜索services.msc,

2、单击出现如下图窗口,下滑鼠标找到MySQL57:

3、右击后点击启动,MySQL57旁边状态列显示“已启动”字样,说明启动成功。如下图:

二、 登录MySQL数据库

4、 用系统命令行工具登录,点击开始菜单,找到附件,点击命令提示符。

5、在命令行中输入cd加空格然后粘贴bin路径:cd c:\Program Files (x86)\MySQL\MySQL Server 5.7\bin 回车命令行定位到c:\Program Files (x86)\MySQL\MySQL Server 5.7\bin>,在后面输入mysql –h localhost –u root –p(这些都是安装时设置好的)敲回车,

6、出现Enter password:在后面输入安装时设置的登录密码,按回车后出现Welcome to the MySQL monitor.说明登陆成功。如下图:

7、用安装时配置好的命令行工具登录,在开始菜单,点击MySQL 5.7 Command Line Client 或下面搜索程序框中输入comm选择MySQL 5.7 Command Line Client启动DOS命令窗口。如下图:

8、在窗口Enter password:处输入安装时设置的MySQL数据库客户端登陆密码,回车,如果出现Welcom to the MySQL monitor.等字眼表示登陆服务器成功,可以在闪烁光标处输入SQL可执行语言:如下图:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10835235.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存