Ubantu用AMH安装mysql,不能用正常的命令
你通过 `ps` 命令查到有 MySQL 进程在运行,但 `systemctl list-unit-files | grep -i mysql` 没有任何输出,这说明你的 MySQL 是**通过手动/脚本方式启动的(非系统服务)**,所以无法用 `systemctl` 管理,接下来我会告诉你适配这种情况的完整操作流程。
### 一、先明确核心结论 没有系统服务输出 → MySQL 不是通过 `systemd` 注册的服务,所有启停、验证操作都要基于 MySQL 的二进制文件(`mysqladmin`/`mysqld_safe`)来做,而非 `systemctl`。
### 二、适配你的情况的完整操作步骤
#### 步骤 1:先定位运行中的 MySQL 依赖哪个目录(关键!) 先把 `ps -ef | grep mysql` 的输出记下来,重点看可执行文件路径: ```bash
# 再次执行并复制输出(示例输出供你参考) ps -ef | grep mysql | grep -v grep # 示例输出(重点看 /usr/local/xxx 部分):
# root 1234 1 0 09:00 ? 00:00:00 /usr/local/mysql-5.7/bin/mysqld_safe --datadir=/var/lib/mysql # mysql 5678 1234 0 09:00 ? 00:00:10 /usr/local/mysql-5.7/bin/mysqld --pid-file=/var/lib/mysql/xxx.pid ``` - 如果路径是 `/usr/local/mysql-5.7/bin/` → `mysql-5.7` 是核心目录,`mysql-5.7-p1` 大概率可删; - 如果路径是 `/usr/local/mysql-5.7-p1/bin/` → 反之。
#### 步骤 2:优雅停止运行中的 MySQL(不用 systemctl) 手动启动的 MySQL 优先用 `mysqladmin` 停止,这是最安全的方式: ```bash
# 替换为你实际的 mysqladmin 路径(从步骤1的输出里找) /usr/local/mysql-5.7/bin/mysqladmin -uroot -p shutdown
# 执行后会提示输入 root 密码,输入后回车即可停止 MySQL
# 验证是否停掉:无输出则说明已停止 ps -ef | grep mysql | grep -v grep ``` 如果提示 `Access denied`(权限拒绝),用以下方式强制停止(谨慎使用,优先上面的方式): ```bash
# 自动获取 mysqld 进程ID并停止(避免手动输错PID)
# 先杀 mysqld 主进程(不是 mysqld_safe) kill -15 $(ps -ef | grep mysqld | grep -v grep | grep -v mysqld_safe | awk '{print $2}')
# 再杀 mysqld_safe 进程(如果还有) kill -15 $(ps -ef | grep mysqld_safe | grep -v grep | awk '{print $2}') # 再次验证:无输出即停止成功 ps -ef | grep mysql | grep -v grep ```
#### 步骤 3:测试要删除的目录是否有用(重命名测试) 假设你判断要删 `mysql-5.7-p1`(先重命名,不要直接删!): ```bash
# 重命名目录(替换为你的实际路径) mv /usr/local/mysql-5.7-p1 /usr/local/mysql-5.7-p1.bak
# 重新启动 MySQL(用你原来的启动方式,示例如下)
# 一般手动启动的命令类似: /usr/local/mysql-5.7/bin/mysqld_safe --datadir=/var/lib/mysql --user=mysql &
# 验证是否能正常连接(替换为你的 mysql 路径) /usr/local/mysql-5.7/bin/mysql -uroot -p
# 如果能正常登录 MySQL → 说明 mysql-5.7-p1 无用;
# 如果登录报错(比如 "Can't connect to local MySQL server")→ 说明有用,立即改回: mv /usr/local/mysql-5.7-p1.bak /usr/local/mysql-5.7-p1 ```
#### 步骤 4:确认无用后,安全删除 ```bash
# 1. 先备份(可选但推荐,防止误删) tar -zcvf /tmp/mysql-5.7-p1.bak.tar.gz /usr/local/mysql-5.7-p1.bak # 2. 删除重命名后的目录 rm -rf /usr/local/mysql-5.7-p1.bak
# 3. 再次验证 MySQL 能正常启动和使用 /usr/local/mysql-5.7/bin/mysqld_safe --datadir=/var/lib/mysql --user=mysql & /usr/local/mysql-5.7/bin/mysql -uroot -p ```
### 三、额外注意事项 如果你的 MySQL 启动脚本在其他位置(比如 `/etc/init.d/mysql`),也可以用这个脚本启停: ```bash #
停止 /etc/init.d/mysql stop #
启动 /etc/init.d/mysql start #
查看状态 /etc/init.d/mysql status ```
### 总结
1. **核心原因**:你的 MySQL 是手动启动的,未注册为 systemd 服务,所以 `systemctl` 命令无效;
2. **启停关键**:用 `mysqladmin shutdown` 优雅停止,或 `kill -15` 杀进程,启动用 `mysqld_safe`;
3. **删除原则**:先重命名测试 MySQL 能否正常运行,确认无用后再备份删除,绝对不要直接 `rm -rf`。
验证能否正常连接:
/usr/local/mysql-5.7/bin/mysql -uroot -p -S /tmp/mysql-5.7.sock