生产环境执行 UPDATE 语句提示锁冲突(无实际锁进程),通过df -h排查发现服务器磁盘空间耗尽,导致MySQL 服务卡死、无法连接。之后执行rm -rf批量删除服务器中的备份数据及所有 binlog 文件(mysql-bin.000*)释放空间,同时发现ibtmp1文件膨胀至 993G,用vim my.cnf添加ibtmp1大小限制配置。通过./mysql.server start重启服务失败,提示有/var/lock/subsys/mysql锁文件,之后执行rm -f删除锁文件,但是启动失败。通过查看错误日志定位到 binlog 索引与文件不一致,用vim mysql-bin.index清空索引文件,配合chown修复权限后重启 MySQL 服务成功。
| 命令用途 | 具体命令 |
|---|---|
| 切换目录定位文件 | cd /data/、cd bigdata/mysql/、cd /data/mysql-5.7.37/data/等系列cd命令 |
| 查看目录 / 文件列表 | ll、ll -h |
| 排查磁盘空间 | df -h(多次执行,确认磁盘占用及释放情况) |
| 查看文件 / 目录大小 | du、du -sh、du -h --max-depth=1、du -ah | sort -hr、du -sh -d 1 |
| 查看 MySQL 进程状态 | ps -ef | grep mysql、ps -ef | grep mysql.server |
| 查看服务运行状态 | ./mysql.server status、systemctl status mysql、systemctl status mysqld |
| 查看端口占用 | netstat -tlnp | grep :3306 |
| 检索历史操作 | history、history | grep status、history | grep mysql |
| 命令用途 | 具体命令 |
|---|---|
| 释放磁盘空间(不规范) | rm -rf mysql-bin.000*(批量删除 binlog 文件) |
| 修改 MySQL 配置文件 | vim my.cnf(添加innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:10G) |
| 管理 MySQL 服务 | ./mysql.server start、./mysql.server stop |
| 删除服务锁文件 | rm -f /var/lock/subsys/mysql |
| 修复文件 / 目录权限 | chown -R mysql:mysql /data/mysql-5.7.37/data、chown -R mysql:mysql /data/mysql-5.7.37 |
| 编辑 binlog 索引文件 | vim mysql-bin.index(清空无效记录) |
| 命令用途 | 具体命令 |
|---|---|
| 查看命令帮助 | du --help |
| 切换根目录 | cd //、cd /var/lock/subsys/等 |
并非真实数据库锁冲突,而是磁盘空间被ibtmp1(993G)和未清理的 binlog 文件完全耗尽,导致 MySQL 服务进程异常,触发虚假锁提示,这也是ps -ef|grep mysql未发现锁进程的原因。
ibtmp1文件无大小限制,大查询生成的临时表持续写入,导致无限膨胀;/var/lock/subsys/mysql锁文件未自动删除,阻碍服务重启;mysql-bin.000*后,未同步更新mysql-bin.index索引文件,MySQL 启动时校验 binlog 完整性失败,无法初始化事务日志(tc log)。部分文件 / 目录权限非mysql用户所有,导致服务启动时无法正常读写数据,需通过chown -R修复权限。
mysql-bin.index与实际 binlog 文件的对应关系,引发启动失败(本次已触发)。chown -R mysql:mysql递归修改整个安装目录权限,若目录包含非 MySQL 相关文件,可能导致其他程序访问异常;my.cnf后未通过mysqld --help --verbose验证参数合法性,若存在格式错误,会直接导致服务启动失败,增加故障排查成本。my.cnf中添加expire_logs_days=3(5.7 版本),自动删除 3 天前的 binlog,避免累积;PURGE BINARY LOGS BEFORE 'YYYY-MM-DD HH:MM:SS',自动同步更新mysql-bin.index;SHOW SLAVE STATUS确认从库已同步至目标 binlog 位点,避免同步中断。my.cnf中固定innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:10G,限制ibtmp1最大大小;ibtmp1写入。ibtmp1大小(阈值 8G 告警)、binlog 占用空间、MySQL 服务状态及端口连通性;ps -ef|grep mysqld确认进程已完全退出;②查看错误日志定位核心问题;③清理锁文件前验证进程状态;my.cnf后,先执行./bin/mysqld --help --verbose | grep 配置项验证合法性,再在业务低峰期重启服务;data/)、日志目录等必要路径调整权限,权限设置为755(目录)、660(文件)。mysql-bin.index与实际 binlog 文件一致性(diff <(cat mysql-bin.index) <(ls -1 mysql-bin.*));②查看ibtmp1大小及慢查询日志;ibtmp1大小导致磁盘耗尽,是引发连锁问题的根源;du系列命令、df -h等排查命令有效,但删除操作(rm -rf mysql-bin.000*)存在严重风险,需替换为官方规范命令;