MySQL启动报错:未更新PID文件,端口3306被占用求助
MySQL启动失败:端口3306被占用问题解决指南
我知道你已经把Stack Overflow上能找到的相关方案都试了个遍,但启动MySQL还是卡壳在同一个问题上。先看看你提供的.err日志里的核心信息:
2018-01-07T06:58:11.729500Z 0 [警告] 因/usr/local/var/mysql/文件系统不区分大小写,设置lower_case_table_names=2 2018-01-07T06:58:11.731659Z 0 [注意] InnoDB:互斥锁和读写锁使用GCC原子内置函数 2018-01-07T06:58:11.731673Z 0 [注意] InnoDB:使用事件互斥锁 2018-01-07T06:58:11.731679Z 0 [注意] InnoDB:GCC内置函数__atomic_thread_fence()用于内存屏障 2018-01-07T06:58:11.731682Z 0 [注意] InnoDB:压缩表使用zlib 1.2.3 2018-01-07T06:58:11.731969Z 0 [注意] InnoDB:缓冲池数量:1 2018-01-07T06:58:11.732068Z 0 [注意] InnoDB:使用CPU crc32指令 2018-01-07T06:58:11.733672Z 0 [注意] InnoDB:初始化缓冲池,总大小=128M,实例数=1,块大小=128M 2018-01-07T06:58:11.745339Z 0 [注意] InnoDB:缓冲池初始化完成 2018-01-07T06:58:11.761905Z 0 [注意] InnoDB:支持的最高文件格式为Barracuda 2018-01-07T06:58:11.906535Z 0 [注意] InnoDB:为临时表创建共享表空间 2018-01-07T06:58:11.906692Z 0 [注意] InnoDB:设置文件'./ibtmp1'大小为12 MB,正在物理写入文件,请等待... 2018-01-07T06:58:11.918639Z 0 [注意] InnoDB:文件'./ibtmp1'大小现在为12 MB 2018-01-07T06:58:11.919925Z 0 [注意] InnoDB:发现96个重做回滚段,96个重做回滚段处于活动状态 2018-01-07T06:58:11.919938Z 0 [注意] InnoDB:32个非重做回滚段处于活动状态 2018-01-07T06:58:11.920116Z 0 [注意] InnoDB:等待清理启动 2018-01-07T06:58:11.974340Z 0 [注意] InnoDB:5.7.20已启动;日志序列号129183358 2018-01-07T06:58:11.974571Z 0 [注意] InnoDB:从/usr/local/var/mysql/ib_buffer_pool加载缓冲池 2018-01-07T06:58:11.974744Z 0 [注意] 插件'FEDERATED'已禁用 2018-01-07T06:58:11.974853Z 0 [注意] InnoDB:缓冲池加载完成于180107 12:28:11 2018-01-07T06:58:11.983233Z 0 [注意] 在数据目录中找到ca.pem、server-cert.pem和server-key.pem,尝试使用它们启用SSL支持 2018-01-07T06:58:11.983254Z 0 [注意] 因数据目录中已有证书文件,跳过SSL证书生成 2018-01-07T06:58:11.983981Z 0 [警告] CA证书ca.pem为自签名 2018-01-07T06:58:11.984032Z 0 [注意] 因数据目录中已有密钥文件,跳过RSA密钥对生成 2018-01-07T06:58:11.989041Z 0 [注意] 服务器主机名(bind-address):'127.0.0.1';端口:3306 2018-01-07T06:58:11.989070Z 0 [注意] - '127.0.0.1'解析为'127.0.0.1' 2018-01-07T06:58:11.989136Z 0 [注意] 已在IP '127.0.0.1'上创建服务器套接字 2018-01-07T06:58:11.989166Z 0 [错误] 无法启动服务器:绑定TCP/IP端口:地址已被占用 2018-01-07T06:58:11.989169Z 0 [错误] 是否已有另一个mysqld服务器在端口3306运行? 2018-01-07T06:58:11.989199Z 0 [错误] 终止
从日志最后几行能直接锁定问题:端口3306已经被其他进程占用了,大概率是后台还跑着另一个MySQL实例,也可能是其他程序占了这个端口。给你几个落地的解决步骤:
第一步:查清楚谁占了端口
- Mac/Linux系统,终端执行:
lsof -i :3306 - Windows系统,命令提示符执行:
netstat -ano | findstr :3306
执行后会看到占用进程的PID和名称,先确认是不是mysqld或者其他程序。
- Mac/Linux系统,终端执行:
第二步:干掉占用端口的进程
- Mac/Linux找到PID后,执行:
kill -9 <你的PID> - Windows执行:
taskkill /F /PID <你的PID>
替换成实际查到的PID就行,-9和/F都是强制终止的参数,能确保进程彻底关掉。
- Mac/Linux找到PID后,执行:
第三步:不想杀进程?那就改MySQL端口
找到MySQL的配置文件(一般是my.cnf或my.ini),找到port=3306这一行,改成3307这类未被占用的端口,保存后重启MySQL就可以了。
按这个流程走,应该就能解决启动失败的问题了。
内容的提问来源于stack exchange,提问作者NevermindAttention
相关产品推荐
相关产品推荐

