Linux无法补全参数和选项
几乎所有 Linux 发行版的最小化安装都默认不包含 bash-completion,需要手动安装
Bash 原生补全:只能补全 “命令名” 或 “文件名”(比如输入
ls /u按 Tab 补全为ls /usr)。bash-completion 增强补全:可以补全命令的具体参数 / 选项(比如输入
docker run --按 Tab 补全出--detach、--name等选项)、子命令(比如输入git che补全为git checkout)、动态补全(比如补全 Kubernetes 的 Pod 名称)。
装包:
sudo dnf install bash-completion -y立即生效:
source /etc/profile.d/bash_completion.sh
或
退出当前终端,重新登录MySQL无法补全
在登录到数据库后执行
MariaDB [(none)]> status
--------------
mysql Ver 15.1 Distrib 10.5.29-MariaDB, for Linux (x86_64) using EditLine wrapper在 status 输出中有:
using EditLine wrapperMariaDB/MySQL 的客户端有两种编译方式:
libedit 默认安装在很多 Linux 发行版上(包括 RHEL/CentOS 的 yum 默认包),它是 BSD 许可,不会因为 GPL 的授权影响到发布的软件
Readline 是 GPL 许可,MySQL 官方为了避免 GPL 授权约束,用了 EditLine/libedit。
方法 1:安装支持补全的 mysql-client / mariadb-client
大多数发行版的 mysql-client 默认使用 readline。
你可以试试安装 MySQL 官方社区版客户端:
yum remove mariadb
yum install https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
yum install mysql-community-client然后用新的 client 连接:
mysql -u root -popenEuler(欧拉系统)的系统默认源没有 MariaDB-client ,只有 mariadb。
操作步骤:
备份数据库(非常重要):
mysqldump --all-databases > all_db_backup.sql cp -r /etc/my.cnf.d /root/my_cnf_backup卸载旧版本:
你需要卸载所有mariadb-*开头的包:dnf remove mariadb mariadb-server mariadb-common mariadb-connector-c(注意:这一步会提示卸载很多包,请确认没有把其他关键业务软件卸载掉)
添加 MariaDB 官方源:
创建文件/etc/yum.repos.d/mariadb.repo:[mariadb] name = MariaDB baseurl = https://mirrors.aliyun.com/mariadb/yum/10.5/centos8-amd64 # 注意:openEuler 22.03 兼容 CentOS 8,所以用 centos8 的源通常没问题 # 如果你想升级到最新版,把上面的 10.5 改成 10.11 (LTS) gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1安装官方版:
dnf clean all dnf makecache dnf install MariaDB-client MariaDB-server(此时你就能安装到大写的 MariaDB-client 了)
启动并恢复数据:
systemctl start mariadb # 如果版本跨度大,可能需要执行 mysql_upgrade
方法 2:使用 MyCLI
一个比 MySQL CLI 更强大的第三方客户端:
yum install -y python3
yum install -y python3-pip
yum install -y gcc gcc-c++ make
yum install -y python3-devel
yum install -y openssl-devel libffi-devel
pip3 install mycli
# 国内源
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple mycli然后:
mycli -u root -pMyCLI 支持:
自动补全(表名、库名、字段名、关键字)
智能提示
语法高亮
方法 3:使用 rlwrap
全称:Readline Wrapper,它不是数据库客户端,而是一个通用的命令行外挂工具。
很多古老的或者为了避开版权协议(如 GPL)而“阉割”了交互功能的命令行工具(比如 Oracle 的 sqlplus,或者 EditLine 版 mysql),不支持按“上/下”键翻历史记录,也不支持左右移动光标修改命令。
rlwrap 的作用就是站在用户和这些“笨”程序中间。
输入的内容先给
rlwrap(它使用了强大的 GNU Readline 库,支持所有快捷键、历史记录)。按回车后,
rlwrap再把整行命令传给后面的mysql。
dnf install rlwrap
# 使用方式:
rlwrap mysql -u root -p