MySQL ERROR2013完美解决方案

这个错误一般是安装了多个MySQL服务器导致的,解决方案如下:

1、进入MySQL安装目录:D:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>

2、输入mysqld-nt -remove

D:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysqld-nt -remove
The service doesn't exist!

3、输入mysqld-nt -install

D:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysqld-nt -install
Service successfully installed.

### 优化 `check_port` 函数,仅检测当前服务端口 为了确保在部署 MySQL 时只检测 MySQL 的端口(默认为 `3306`),而不是循环检测所有服务端口,可以将 `check_port` 函数调整为仅接受端口和超时重试次数作为参数,而非遍历整个服务列表。优化后的函数如下: ```bash check_port() { local port=$1 local retries=${2:-3} local delay=${3:-2} for ((i=1; i<=retries; i++)); do if ss -tuln | grep -q ":$port "; then echo "Port $port is listening." return 0 fi sleep "$delay" done echo "Port $port is not listening after $retries attempts." return 1 } ``` 此函数使用 `ss` 替代 `netstat`,因其在现代 Linux 系统中更高效且推荐使用。通过传入端口号、重试次数和延迟时间,可以灵活控制检测逻辑,仅针对当前部署的服务进行检测,避免不必要的全局检查。 ### 部署脚本中调用 `check_port` 函数 在部署 MySQL 的流程中,可以在启动 MySQL 后调用 `check_port` 函数,确保其端口已正常监听。示例如下: ```bash start_mysql() { echo "Starting MySQL service..." systemctl start mysqld if ! check_port 3306 5 3; then echo "MySQL failed to start on port 3306." exit 1 fi } ``` 该函数在启动 MySQL 服务后,最多尝试 5 次检测端口 `3306` 是否开放,每次间隔 3 秒。若检测失败,则输出错误信息并终止脚本。 ### 优化部署流程,提升健壮性与可维护性 为提升脚本的健壮性,可以引入日志记录、错误处理和依赖检测机制。例如,在部署前检测是否已有服务运行,避免重复部署: ```bash log() { local level=$1 local message=$2 echo "[$(date +'%Y-%m-%d %H:%M:%S')] [$level] $message" } die() { log "ERROR" "$1" exit 1 } ``` 结合上述函数,可以构建结构清晰、易于维护的部署脚本。例如: ```bash main() { if ss -tuln | grep -q ":3306 "; then log "INFO" "MySQL is already running." else start_mysql fi } ``` 该脚本首先检测 MySQL 是否已经在运行,若未运行则调用 `start_mysql` 函数启动服务,并通过 `check_port` 确认端口状态。 ### 使用 `wait-for-it.sh` 控制部署顺序 若部署流程中存在依赖关系(如应用需等待 MySQL 启动后再连接),可以使用 `wait-for-it.sh` 确保依赖服务已就绪。例如: ```bash ./wait-for-it.sh localhost:3306 -t 30 -- echo "MySQL is ready" ``` 该命令会等待最多 30 秒,直到端口 `3306` 可用为止,确保后续操作不会因服务未启动而失败。 ### 示例完整脚本结构 ```bash #!/bin/bash log() { local level=$1 local message=$2 echo "[$(date +'%Y-%m-%d %H:%M:%S')] [$level] $message" } die() { log "ERROR" "$1" exit 1 } check_port() { local port=$1 local retries=${2:-3} local delay=${3:-2} for ((i=1; i<=retries; i++)); do if ss -tuln | grep -q ":$port "; then log "SUCCESS" "Port $port is listening." return 0 fi sleep "$delay" done log "ERROR" "Port $port is not listening after $retries attempts." return 1 } start_mysql() { log "INFO" "Starting MySQL service..." systemctl start mysqld if ! check_port 3306 5 3; then die "MySQL failed to start on port 3306." fi } main() { if ss -tuln | grep -q ":3306 "; then log "INFO" "MySQL is already running." else start_mysql fi # 等待 MySQL 就绪后再部署其他依赖服务 ./wait-for-it.sh localhost:3306 -t 30 -- echo "MySQL is ready for next steps." } main ``` 此脚本具备清晰的结构、日志记录、端口检测、错误处理和依赖控制,确保部署流程高效、稳定。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值