Ubuntu 20执行sudo mysql无法进入MySQL shell,如何调整命令默认路径
Ubuntu 20 下sudo mysql调用服务脚本而非客户端的解决方案
问题根因
出现该问题的核心原因是sudo环境的PATH优先级配置异常:/etc/init.d路径在PATH中的排序早于/usr/bin,导致sudo执行mysql命令时,优先匹配到了/etc/init.d/mysql服务管理脚本,而不是/usr/bin/mysql官方客户端,所以返回了服务脚本的用法提示:
Usage: /etc/init.d/mysql start|stop|restart|reload|force-reload|status.
临时访问MySQL shell可以直接执行全路径命令:sudo /usr/bin/mysql
解决方案(按推荐度排序)
方案1:修改sudo的secure_path配置(全局永久生效,最稳定)
sudo的执行PATH是单独配置的,不会继承普通用户的PATH,修改方法如下:
- 执行命令打开sudo配置文件:
sudo visudo - 找到包含
Defaults secure_path=的配置行,调整路径顺序,确保/usr/bin排在/etc/init.d之前,正常的默认配置参考如下:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" - 按
Ctrl+O保存,按Ctrl+X退出编辑器,配置即时生效,之后执行sudo mysql就会默认调用客户端。
方案2:配置shell别名(仅对当前用户生效,无需修改全局配置)
如果不想修改全局sudo配置,可以通过别名指定mysql命令的路径:
- 编辑当前用户的shell配置文件,使用Bash的用户修改
~/.bashrc,使用Zsh的用户修改~/.zshrc - 在文件末尾添加两行配置:
第一行的作用是让sudo可以继承当前用户设置的别名alias sudo='sudo ' alias mysql='/usr/bin/mysql' - 执行
source ~/.bashrc(对应你使用的shell配置文件)让配置生效。
补充说明
MySQL客户端本身不支持服务启停操作,修改配置后如果需要管理MySQL服务,直接使用systemd命令即可,和客户端调用互不冲突:
- 启动服务:
sudo systemctl start mysql - 停止服务:
sudo systemctl stop mysql - 查看服务状态:
sudo systemctl status mysql - 设置开机自启:
sudo systemctl enable mysql
内容的提问来源于stack exchange,提问作者Delpux
相关产品推荐
相关产品推荐

