MySQL下常见的启动失败与备份失败问题的解决教程

 更新时间:2015年11月18日 12:16:07   作者:z永  
这篇文章主要介绍了MySQL下常见的启动失败与备份失败问题的解决教程,示例环境基于Linux系统,需要的朋友可以参考下

启动失败
重启服务器后-->重启应用服务(Confluence)-->报错,数据库连接失败(mysql设置了开机自启动)-->查看mysql数据库状态:

[root@fisheye ~]# ps -ef | grep mysql
root   25555 21974 0 11:28 pts/0  00:00:00 grep mysql

启动mysql服务器

[root@fisheye data]# service mysql start
MySQL server PID file could not be found![失败]
Starting MySQL.............. ERROR! The server quit without updating PID file (/mydata/data/fisheye..pid).[失败]

查看错误日志:

[root@fisheye data]# tail -100 fisheye.err
InnoDB: Last MySQL binlog file position 0 337403929, file name ./mysql-bin.000016
141013 1:13:28 InnoDB: Waiting for the background threads to start
141013 1:13:29 InnoDB: 5.5.33 started; log sequence number 1006647152
17:13:29 UTC - mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
di141013 01:13:29 mysqld_safe mysqld from pid file /mydata/data/fisheye.pid ended

未发现明显性错误提示,所以手动创建一个pid文件试试

[root@fisheye data]# touch /mydata/data/fisheye.pi

再进行重启服务:

[root@fisheye data]# service mysql restart
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

突然想到之前看过此类报错的文章,记得有可能是磁盘空间不足导致的mysql无法启动。

[root@fisheye data]# df -h

(文件系统              容量  已用 可用 已用% 挂载点)

/dev/sda1       9.5G 9.5G 0 100% /
/dev/sda4       5.5G 1.3G 4.0G 24% /mnt/backup
/dev/mapper/IhuilianVG-IhuilianLV00
            22G 4.2G  17G 20% /var/www/app
tmpfs         1.3G   0 1.3G  0% /dev/shm

果然如此,下面罗列一些类似问题(无法启动)的解决思路:
1.可能是datadir目录存在的分区满了(df -h )
       解决方法:打开配置文件/etc/my.cnf,在[mysqld]节下重新指定数据目录(datadir),并将原来的数据目录迁移到重新制定的数据目录处
       关于迁移:(1)、cp或者tar的时候一定要把权限给带上,但是为防止意外建议再授权一次;(2)、数据比较大时一定要先压缩再迁移,保证完整性,特别是scp到其他机器时可能会超时所以一定要压缩(tar.gz);(3)、若是移动至另外的服务器一定要保证mysql版本一致。

2.可能是/mydata/data/fisheye.pid文件没有写的权限
      解决方法 :给予权限,执行 “chown -R mysql:mysql /mydata/data/”  然后重新启动mysqld!

3.可能进程里已经存在mysql进程
      解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9  进程号”杀死,然后重新启动mysqld!

4.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
       解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。

5.skip-federated字段问题(报错信息:[ERROR] /mydata/data/mysql/libexec/mysqld: unknown option '--skip-federated')
       解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。

6.selinux惹的祸,如果是centos系统,默认会开启selinux
       解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。

备份失败
说明
执行 mysqldump 时出现找不到某一个 tables 并且中断执行?及锁表后延伸出现的问题记录!
问题及方案如下
Error Meaage: 执行mysqldump 时出现找不到某一个 tables 并且中断执行

[root@test100 data]# mysqldump fx > fx.sql
mysqldump: Got error: 1146: Table 'user_suggest_report' doesn't exist when using LOCK TABLES

考虑加上 --skip-lock-tables或者-R进行锁表试试,也是不行,信息如下

[root@test100 data]#mysqldump --skip-lock-tables fx > fx.sql
Error: Couldn't read status information for table vote_results () mysqldump: Couldn't execute 'show create table `user_suggest_report`': Table 'fx.user_suggest_report' doesn't exist (1146)

登陆服务器查看是否存在此表

 [root@test100 data]#mysql -h127.0.0.1 -D fx
 mysql> show tables;      #查看所有的表 --> 发现是表存在的
+--------------------------------+
| Tables_in_fx          |
+--------------------------------+
| user_suggest_report      |
+--------------------------------+
80 rows in set (0.00 sec)

删除此表

mysql> drop table user_suggest_report;      #既然是存在的,但是系统却认定不存在说明存在问题,索性想删除试试
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'user_suggest_report' at line 1

进入mysql存储目录下将其数据表移动或删除

[root@test100 data]# cat /etc/my.cnf | grep datadir
datadir=/var/lib/mysql
[root@test100 data]# cd /var/lib/mysql/fx/
[root@test100 fx]# mv user_suggest_report.frm /data

重启mysql服务器

[root@test100 fx]# service mysqld restart

重新备份操作

[root@test100 data]# mysqldump fx > fx.150109.sql  #操作成功

相关文章

  • MySQL中int(10)和int(11)的区别详解

    MySQL中int(10)和int(11)的区别详解

    本文主要介绍了MySQL中int(10)和int(11)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • mysql分组后如何每个取最新的一条记录

    mysql分组后如何每个取最新的一条记录

    在MySQL中获取每个分组的最新记录可以通过子查询或窗口函数实现,使用子查询时,通过设定时间戳字段确定最新记录,并利用LIMIT子句获取,若MySQL版本支持窗口函数(如MySQL 8.0+),可使用ROW_NUMBER()配合PARTITION BY和ORDER BY实现同样效果
    2024-09-09
  • 详解 MySQL中count函数的正确使用方法

    详解 MySQL中count函数的正确使用方法

    这篇文章主要介绍了 MySQL中count函数的正确使用方法,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下。
    2020-11-11
  • MySQL与PHP的基础与应用专题之数据完整性

    MySQL与PHP的基础与应用专题之数据完整性

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,本系列将带你掌握php与mysql的基础应用,本篇从数据完整性开始
    2022-02-02
  • mysql自动填充时间的两种实现方式小结

    mysql自动填充时间的两种实现方式小结

    这篇文章主要介绍了mysql自动填充时间的两种实现方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • mysql like 特殊字符搜索的实现

    mysql like 特殊字符搜索的实现

    在MySQL中,LIKE操作符用于在查询数据时进行模糊匹配,本文主要介绍了mysql like 特殊字符搜索的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 使用Mysql5.x以上版本出现报错#1929 Incorrect datetime value: '''''''' for column ''''createtime''''的快速解决方法

    使用Mysql5.x以上版本出现报错#1929 Incorrect datetime value: '''''''' f

    我的MySQL安装后,保存删除表数据总是出现#1929 Incorrect datetime value: '' for column 'createtime' 的报错提醒,导致不能删除表里数据。下面小编给大家分析原因及解决办法,需要的朋友可以参考下
    2017-01-01
  • Mysql报Table 'mysql.user' doesn't exist问题的解决方法

    Mysql报Table 'mysql.user' doesn't exist问题的解

    这篇文章主要给大家介绍了关于Mysql报Table 'mysql.user' doesn't exist问题的解决方法,初学者可能会遇到这个问题,文中通过图文将解决方法介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 教你为MySQL数据库换挡加速

    教你为MySQL数据库换挡加速

    如果你是个赛车手,并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换,那会是什么感觉呢?MySQL数据库为开发人员所做的就好像是按按钮换引擎;它让你选择数据库引擎,并给你一条简单的途径来切换它。
    2010-02-02
  • 修改MySQL所有表的编码或修改某个字段的编码步骤详解

    修改MySQL所有表的编码或修改某个字段的编码步骤详解

    这篇文章主要给大家介绍了关于修改MySQL所有表的编码或修改某个字段编码的相关资料,在进行数据库编码更改之前,需要先确定目标编码格式,常见的编码格式有UTF-8、GBK等,需要的朋友可以参考下
    2023-12-12

最新评论