记一次修复MySQL socker 错误

问题描述

初次往数据库中source 一个超大的文件,过了一会sql报错 table is full
然后去data 目录查看大小,发现一个表的ibd文件2G,果断删除了这个文件。
没想到继续报错。

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

目前来看,是mysql服务启动的时候报错了,服务未能成功启动。

查看log tail -f /var/log/mysql/error.log

Header page consists of zero bytes in datafile: ./ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html for how to resolve the issue.```
大概意思是说 header page 为空。
造成的结果就是innodb init 失败。

尝试 innodb restore(失败)

修改配置

[mysqld] innodb_force_recovery = 1

重启依然报错,放弃。

search mysql missing ./ibdata1 datafile

try google the problem ,解释如下:

what is ibdata1

我们一定要记住一点:/var/lib/mysql/ibdata1 是InnoDB架构中最繁忙的文件。一般来说他主要负责6种类型的信息:

*  表数据

*   表索引数据
*   [多版本并发控制数据 MVCC (Multiversioning Concurrency Control)](http://en.wikipedia.org/wiki/Multiversion_concurrency_control) Data
    *   回滚段数据(Rollback Segments)
    *   Undo Space
*   表元数据(Table Metadata (Data Dictionary))
*   Double Write Buffer (background writing to prevent reliance on OS caching)
*   Insert Buffer (managing changes to non-unique secondary indexes)
*   See the [**Pictorial Representation of ibdata1**](http://www.scribd.com/doc/31337494/XtraDB-InnoDB-internals-in-drawing)

去确认innodb_data_file配置没有问题

config

innodb_data_file_path = ibdata1:10M:autoextend:max:128M

try 卸载mysql(失败,死循环)

Apr 03 07:06:05 local systemd[1]: Failed to start MySQL Community Server.
Apr 03 07:06:05 local systemd[1]: mysql.service: Unit entered failed state.
Apr 03 07:06:05 local systemd[1]: mysql.service: Failed with result 'exit-code'.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 mysql-server-5.7
E: Sub-process /usr/bin/dpkg returned an error code (1)

然后去解决这个错误

sudo dpkg --configure -D 777 mysql-server-5.7

问题又回归到mysql 的这个 报错

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

死循环。

回头解决开始的问题本身(搞定)

把报错的ibdata既然是已经不能用了,为什么不把它删除了呢?
删除后发现成功~~~~~~~~~~~~~~~~~~~~

那么这时候再进行 apt update 应该就没有问题了

总结

1 去找error log 去定位问题
2 针对问题只进行相关的操作,别跑太远了,必然都是错的。
3 其实最正确的方法是,既然表不够,去根据df -h 去查看挂载情况
并且根据 du -sh 去确认mysql已使用的容量。

另外一个问题

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
发现不要瞎更难/etc/mysql/mysql.conf.d/mysqld.cnf 里面的东西
要新开一个~/.mycnf文件。

如何确认自己的配置是否正确

mysql --help 会自动读取相关的配置文件,如果运行没有错误,那么mysql服务器重启也不会有啥大问题。

你可能感兴趣的:(记一次修复MySQL socker 错误)