服务器重启导致无法启动MySQL

本文记录了一次服务器遭受DDoS攻击后,MySQL服务器无法启动的问题及解决方案。详细介绍了错误日志信息,尝试的手动启动与停止命令,以及最终通过删除ib_logfile0和ib_logfile1文件解决问题的过程。
今天服务器受到DDOS攻击,笔者脑残重启了一下服务器。结果造成MySQL服务器无法启动
mysql日志见下图。
160803 17:43:47 mysqld_safe Starting mysqld daemon with databases from /application/mysql/data
160803 17:43:47 [Note] /application/mysql/bin/mysqld (mysqld 5.5.49) starting as process 1975 ...
160803 17:43:47 [Warning] Using unique option prefix innodb_purge_thread instead of innodb-purge-threads is deprecated and will be removed in a future release. Please use the full name instead.
160803 17:43:47 [Note] Plugin 'FEDERATED' is disabled.
160803 17:43:47 InnoDB: The InnoDB memory heap is disabled
160803 17:43:47 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160803 17:43:47 InnoDB: Compressed tables use zlib 1.2.3
160803 17:43:47 InnoDB: Using Linux native AIO
160803 17:43:47 InnoDB: Initializing buffer pool, size = 64.0M
160803 17:43:47 InnoDB: Completed initialization of buffer pool
InnoDB: Error: auto-extending data file ./ibdata1 is of a different size
InnoDB: 7296 pages (rounded down to MB) than specified in the .cnf file:
InnoDB: initial 8192 pages, max 0 (relevant if non-zero) pages!
160803 17:43:47 InnoDB: Could not open or create data files.
160803 17:43:47 InnoDB: If you tried to add new data files, and it failed here,
160803 17:43:47 InnoDB: you should now edit innodb_data_file_path in my.cnf back
160803 17:43:47 InnoDB: to what it was, and remove the new ibdata files InnoDB created
160803 17:43:47 InnoDB: in this failed attempt. InnoDB only wrote those files full of
160803 17:43:47 InnoDB: zeros, but did not yet use them in any way. But be careful: do not
160803 17:43:47 InnoDB: remove old data files which contain your precious data!
160803 17:43:47 [ERROR] Plugin 'InnoDB' init function returned error.
160803 17:43:47 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160803 17:43:47 [ERROR] Unknown/unsupported storage engine: InnoDB
160803 17:43:47 [ERROR] Aborting
160803 17:43:47 [Note] /application/mysql/bin/mysqld: Shutdown complete
160803 17:43:47 mysqld_safe mysqld from pid file /application/mysql/data/www.pid ended
实际图片:

曾试过手动启动

启动命令为:mysqld_safe–defaults-file=/data/3306/my.cnf &

停止命令为:mysqladmin -u root -poldboy123 -S /data/3306/mysql.sockshutdown


但是发现一直提示没有pid,百度了一下有一篇文章说需要删除ib_logfile0和ib_logfile1两个文件

就可以启动,对这两个文件进行了一下科普,如下:

文章


mysql的innodb中事务日志ib_logfile
事务日志或称redo日志 ,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节
开启几组日志来服务于当前mysql数据库,mysql采用顺序,循环写方式,每开启一个事务时,
会把一些相关信息记录事务日志中(记录对数据文件数据修改的物理位置或叫做偏移量);
作用:在系统崩溃重启时,作事务重做;在系统正常时,每次checkpoint时间点,会将之前写入事务
应用到数据文件中。
引入一个问题:在m/s环境中,innodb写完ib_logfile后,服务异常关闭,会不会主库能用ib_logfile恢复数据,而
binlog没写导致从库同步时少少这个事务?从而导致主从不一致;
redo日志写入方式:
1.ib_logfile写入当前事务更新数据,并标上事务准备trx_prepare
2.写入bin-log
3.ib_logfile当前事务提交提交trx_commit
恢复方式:
如果ib_logfile已经写入事务准备,那么在恢复过程中,会依据bin-log中该事务是否存在恢复数据。
假设:
1)结束后异常,因没有写入bin-log,从库不会同步这个事务,主库上,重启时,在恢复日志中这个

事务没有commit,即rollback这个事务.
2)结束后异常,这会bin-log已经写入,从库会同步这个事务。主库依据恢复日志和bin-log,也正常恢复此事务
综上描述:bin-log写入完成,主从会正常完成事务;bin-log没有写入,主从库rollback事务;不会出现主从库不一致问题.
相关参数(全局&静态):
innodb_log_buffer_size
innodb_log_file_size
innodb_log_files_in_group
innodb_log_group_home_dir
innodb_flush_log_at_trx_commit
innodb_log_buffer_size:事务日志缓存区,可设置1M~8M,默认8M,延迟事务日志写入磁盘,
把事务日志缓存区想象形如”漏斗”状,会不停向磁盘记录缓存的日志记录,而何时写入通过参数
innodb_flush_log_at_trx_commit控制,稍后解释,启用大的事务日志缓存,可以将完整运行大事
务日志,暂时存放在事务缓存区中,不必(事务提交前)写入磁盘保存,同时也起到节约磁盘空间占用;
innodb_log_file_size:控制事务日志ib_logfile的大小,范围5MB~4G;所有事务日志ib_logfile0+
ib_logfile1+..累加大小不能超过4G,事务日志大,checkpoint会少,节省磁盘IO,但是大的事务日
志意味着数据库crash时,恢复起来较慢.
引入问题:修改该参数大小,导致ib_logfile文件的大小和之前存在的文件大小不匹配
解决方式:在干净关闭数据库情况下,删除ib_logfile,而后重启数据库,会自行创建该文件;
innodb_log_files_in_group:DB中设置几组事务日志,默认是2;
innodb_log_group_home_dir:事务日志存放目录,不设置,ib_logfile0…存在在数据文件目录下
innodb_flush_log _at_trx_commit :控制事务日志何时写盘和刷盘,安全递增:0,2,1
事务缓存区:log_buffer;

0:每秒一次事务缓存区刷新到文件系统,同时文件系统到磁盘同步,但是事务提交时,不会触发log_buffer到文件系统同步;
2:每次事务提交时,会把事务缓存区日志刷新到文件系统中去,且每秒文件系统到磁盘同步;
1:每次事务提交时刷新到磁盘,最安全;
适用环境:
0:磁盘IO能力有限,安全方便较差,无复制或复制延迟可以接受,如日志性业务,mysql损坏丢失1s事务数据;
2:数据安全性有要求,可以丢失一点事务日志,复制延迟也可以接受,OS损坏时才可能丢失数据;
1:数据安全性要求非常高,且磁盘IO能力足够支持业务,如充值消费,敏感业务;

由于经费原因,没有做CDN,所以扛不住DDOS攻击实属正常
下图是阿里云发监控:
网站流量监控
小结: 
防治DDOS的前提是必须要做好监控!
另外在受到攻击,重启服务器是没有作用的,在实际生产环境是不可以重启的。这点大家一定要冷静!

由于作者手残不小心rm -rf ib* 因为表示Innbodb表,所以导致所有数据全都被删除(已经哭晕在厕所)
 跟我一起忘记rm 命令把!!!!!!!!
ibdata用来储存文件的数据
而库名的文件夹里面的那些表文件只是结构而已

对于DDOS防范可以参考下面文章:
625某电商网站数据库宕机故障解决实录
关于MySQL引擎[innodb文章]
<think>好的,我现在需要解决用户提出的MySQL服务器安装过程中无法启动的问题。用户已经提供了一些相关的引用内容,我需要结合这些信息来构建一个全面的解决方案。 首先,我应该回顾用户提供的引用内容,看看有哪些常见的问题和解决方法。引用1提到了二进制日志文件丢失的问题,解决方案是删除对应的索引条目并重启。引用2是关于配置文件中的路径设置,特别是basedir和datadir的配置是否正确。引用3强调了配置文件中字符集的设置,以及如何创建正确的my.ini文件。引用4则是在macOS上使用brew安装时可能需要运行初始化命令的问题。 接下来,我需要将这些信息整合成一个结构化的解决方案。用户的问题比较广泛,可能涉及多个方面,比如配置错误、权限问题、日志文件缺失、端口冲突等。我需要分步骤列举可能的原因和对应的解决方法,确保覆盖常见的情况。 首先,检查错误日志是最重要的步骤,因为日志通常会明确提示问题所在。比如引用1中的案例,错误日志指出了缺失的二进制文件,用户需要根据日志中的提示去处理。所以第一步应该是引导用户查看错误日志的位置,并分析其中的具体错误信息。 然后,检查配置文件是否正确。引用2和3都提到了配置文件中的路径设置和字符集配置。特别是basedir和datadir的路径是否正确,以及是否存在my.ini或my.cnf文件。如果用户在这些路径上有误,比如路径含有空格或特殊字符,或者目录权限不足,都可能导致启动失败。此外,引用3提到创建my.ini文件并设置字符集,这也是常见的配置问题。 接下来是端口冲突的问题。如果3306端口被其他程序占用,MySQL自然无法启动。需要用户检查端口占用情况,并终止冲突进程或修改MySQL的端口配置。 权限问题也是常见的原因,尤其是在Linux/macOS系统下。datadir目录的所属用户和组是否设置为mysql,权限是否正确,这会影响MySQL启动。引用4中的命令涉及初始化数据库,并指定用户和目录,可能涉及权限设置。 另外,初始化数据库的步骤是否完成。比如引用4中提到的mysql_install_db命令,如果用户没有正确初始化数据目录,MySQL可能无法启动。这时候需要指导用户运行相应的初始化命令。 最后,如果以上步骤都无法解决问题,可能需要考虑彻底卸载后重新安装,或者寻求更专业的支持。 在整理这些步骤时,需要确保语言简洁明了,逻辑清晰,用户能够一步步跟随操作。同时,引用相关的引用内容作为支持,比如在检查配置文件时提到引用2和3,处理日志文件时引用1,初始化数据库时引用4,这样让回答更有依据。 另外,用户可能需要生成相关问题,我需要考虑用户可能进一步的问题,比如如何修改配置文件、如何检查端口占用、如何设置权限等,这些问题可以作为相关的问题列出,帮助用户深入解决具体问题。 最后,确保回答符合用户的要求,使用中文,结构清晰,分步骤说明,并正确引用提供的参考资料。同时,避免使用Markdown格式,保持自然的口语化表达。</think>### MySQL服务器安装后无法启动的解决方案 #### 一、检查错误日志定位问题 首先通过错误日志定位具体原因: - **Windows系统**:查看`data目录下.err`文件(默认路径如`D:\mysql\data\*.err`) - **Linux/macOS系统**:使用命令`tail -f /var/log/mysqld.log` 典型错误示例: 1. 若出现`File './mysql-bin.xxxxxx' not found`错误(如引用[^1]案例) - 打开`mysql-bin.index`文件,删除报错中缺失的二进制日志条目 - 重启MySQL服务 #### 二、验证配置文件正确性(关键步骤) 1. **检查路径配置**(如引用[^2]) - `my.ini`/`my.cnf`中`basedir`(安装目录)和`datadir`(数据目录)必须为**绝对路径** - 路径中避免空格和中文,例如: ```ini basedir="D:/mysql" datadir="D:/mysql/data" ``` 2. **字符集配置**(如引用[^3]) - 添加基础配置避免编码冲突: ```ini [mysqld] character_set_server=utf8 [client] default-character-set=utf8 ``` #### 三、处理常见启动障碍 1. **端口冲突** - 执行`netstat -ano | findstr :3306`(Windows) - 终止占用进程或修改`my.ini`中`port=3306`为其他端口 2. **权限问题** - **Windows**:以管理员身份运行服务 - **Linux/macOS**: ```bash chown -R mysql:mysql /usr/local/var/mysql chmod -R 755 /usr/local/var/mysql ``` 3. **初始化数据目录**(如引用[^4]) - 执行初始化命令(适用于全新安装): ```bash mysqld --initialize --user=mysql --basedir="安装路径" --datadir="数据路径" ``` #### 四、分系统操作指南 | 系统 | 启动命令 | 配置文件路径 | |-----------|------------------------------|------------------------| | Windows | `net start mysql` | `C:\ProgramData\MySQL\my.ini` | | Linux | `systemctl start mysqld` | `/etc/my.cnf` | | macOS | `brew services start mysql` | `/usr/local/etc/my.cnf`| #### 五、进阶排查 若仍无法启动,尝试以下命令: ```bash # 控制台模式查看实时报错 mysqld --console # 安全模式启动 mysqld --defaults-file=my.ini --skip-grant-tables ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值