记一次修复MySQL socker 错误
2018-04-03 本文已影响0人
__XY__
问题描述
初次往数据库中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服务器重启也不会有啥大问题。