数据库

MySQL错误修复记录:Table xx is marked as crashed and should be repaired

昨晚入睡后,收到松哥的QQ消息,说松松商城打开报错,于是手机QQ上打开了首页地址,发现有如下报错: 关键报错信息: Table 'ecs_users' is marked as crashed and should be repaired 提示这张表损坏了,必须修复,登陆服务器之后,开始修复,以下记录备忘。 1、尝试使用myisamchk命令对所有表索引文件进行修复: myisamchk --safe-recover /path/to/*.MYI 2、刷新首页依然报错,于是登陆MySQL,执行 REPAIR TABLE ecs_users; 3、提示无法修改拥有着属性,应该是上一步使用myisamchk命令时文件所属变成了root了,于是用chown更该拥有者: 4、然后继续登陆MySQL执行 REPAIR TABLE ecs_users;  成功: 在刷新网站,已经正常:   事后总结:一般这个报错都是因为数据库表索引文件损坏导致的,发现这类错误可以尝试使用phpMyAdmin的Repair自动修复功能。如果不行,先将数据库文件做好备份,然后按照本文的步骤尝试修复吧。
阅读全文
数据库

MySQL主从报错解决:Failed to initialize the master info structure

大清早收到一个MySQL的自定义语言告警 :replication interrupt,看来是主从同步报错了。 登陆MySQL,执行 show slave status \G 发现salve已经停止了,于是使用 start slave启动,结果有如下报错: 搜索了下,网上给出的解决办法基本都是: ①、执行 reset slave; ②、重新执行 change master: ③、执行 start slave 于是试了下,发现还是一样的报错,顺着报错信息,看了下error 日志: 发现其中频繁出现如下错误: 于是,把MySQL 数据文件目录下的 index info 文件都看了一遍,结果发现 Centos64-relay-bin.index文件中出现异常内容: 这个文件正常情况应该是记录了 bin-log文件名称才对,比如: 因此,将 Centos64-relay-bin.index 这个文件mv 重命名,然后重启MySQL,重新按照上文从网上照来的的步骤:reset、change master、start 成功搞定! 如果你也遇到类似问题,可以先按照网上提供的三个步骤试试,如果还是和本文类似的报错,请特别看下MySQL数据目录下的这几种文件: mysql-bin.index relay-log.info 主机名-relay-bin.index 可以尝试将他们重命名或移走,重启MySQL再走一遍上面的三个步骤应该可以搞定了!
阅读全文
数据库

MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed

有站长找到我,说数据库坏了,访问网站报错如下: Error establishing a database connection 看了下MySQL的错误日志,报错如下: Error: Table './db_name/table_name' is marked as crashed and last (automatic?) repair failed 修复很简单,先停止MySQL:service mysqld stop 进入到MySQL数据库的文件存放目录,比如 cd /data/mysql/zhangge_db 然后执行如下命令: 执行完成后,为了保险起见,我们要将文件的权限改回MySQL的运行账号(自行查看),比如mysql: 启动MySQL:service mysqld start 最后,执行再次自动修复优化命令即可解决:
阅读全文
数据库

解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]

上午刚装完MySQL,启动时报如下错误: Starting MySQL.Manager of pid-file quit without updating file. 依次尝试了从谷姐找到的各种方法,发现只要执行如下MySQL初始化命令即可解决: 下面附上从谷姐找到的解决此问题的方法集锦,也许每个人遇到的问题的原因会不一样,经供参考: 一、查看报错日志 报错日志是我们解决问题的方向灯,没有方向灯我们就没了方向。 我有次安装时报错日志里就有这样的错误: 很明显是缺少了库文件 libstdc++.so.5 ,这时我们搜索和libstdc相关的包安装即可。 二、也许是selinux惹的祸 如果是centos系统,默认会开启selinux,这个时候可以先关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。 三、残余数据 也有可能是第二次在机器上安装mysql,有残余数据影响了服务的启动,去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。 四、确定数据目录的权限 数据目录一般是<prefix>/data,检查一下它的归属,如果不是mysql所有者,一般安装mysql时都会创建mysql的用户和组的,这时要修改一下用户和组: chown -R mysql:mysql /var/data 五、没有指定数据目录 mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在节下有没有指定数据目录(datadir)。如果没有请在下设置这一行: datadir = /usr/local/mysql/data 六、还有mysql进程在跑着 如果这是第二次在机器上安装mysql就极有可能会出现这种情况的,这时系统上很有可能还有mysql进程在运行着。可以执行下列命令查看: ps -ef | grep mysql 如果出现的结果不止一行的就赶快把它kill掉吧。 七、skip-federated字段在作祟 可以检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。 八、出错日志目录不存在 也有可能你现在还不知道mysql的出错日志在哪里吧?这时你可以执行命令查看: 这时一定会报错的, 并在错误中显示将错误写在某某目录的某某文件里了,这里检查一下这个目录和文件是否在,在的话就按日志指示解决,如果没有的话就要创建目录并修改权限和归属了。一般会是/var/lib/mysql/mysql.error,注意mysql.error不用创建的。 这时再试试吧。如果还是不行的话就留言让大家帮你看看吧……  以上摘自Angel Sanctuary 九、可能是data/mysql-bin.index在作怪 前因:因为硬盘满了,mysql启动不起来了。登录上去看了一下,发现原因。删除mysql的日志文件,重启mysql发现错误:Starting MySQL.Manager of pid-file quit without updating file. 网上有不少这个原因的解释,但是都不是我想说的。我要说的原因其实很白痴:data/mysql-bin.index没有删除,data/mysql-bin.index是存放日志文件索引的文件,只删除了日志文件而没有对日志的索引文件做处理显然是不行的。 删除data/mysql-bin.index文件,再service mysqld start就可以了。
阅读全文