FChao
发布于 2025-11-22 / 3 阅读
0
0

Linux和MySQL的补全问题

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 wrapper

MariaDB/MySQL 的客户端有两种编译方式:

功能

补全情况

readline

GNU 的高级行编辑库

支持 SQL 自动补全(包括库名/表名/关键字)

editline(libedit)

BSD 的轻量行编辑库

❌ 不支持 MySQL/MariaDB 自动补全

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 -p
  • openEuler(欧拉系统)的系统默认源没有 MariaDB-client ,只有 mariadb。

操作步骤:

  1. 备份数据库(非常重要):

    mysqldump --all-databases > all_db_backup.sql
    cp -r /etc/my.cnf.d /root/my_cnf_backup
  2. 卸载旧版本
    你需要卸载所有 mariadb-* 开头的包:

    dnf remove mariadb mariadb-server mariadb-common mariadb-connector-c

    (注意:这一步会提示卸载很多包,请确认没有把其他关键业务软件卸载掉)

  3. 添加 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
  4. 安装官方版

    dnf clean all
    dnf makecache
    dnf install MariaDB-client MariaDB-server

    (此时你就能安装到大写的 MariaDB-client 了)

  5. 启动并恢复数据

    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 -p

MyCLI 支持:

  • 自动补全(表名、库名、字段名、关键字)

  • 智能提示

  • 语法高亮

方法 3:使用 rlwrap

全称:Readline Wrapper,它不是数据库客户端,而是一个通用的命令行外挂工具。

很多古老的或者为了避开版权协议(如 GPL)而“阉割”了交互功能的命令行工具(比如 Oracle 的 sqlplus,或者 EditLine 版 mysql),不支持按“上/下”键翻历史记录,也不支持左右移动光标修改命令。

rlwrap 的作用就是站在用户和这些“笨”程序中间。

  • 输入的内容先给 rlwrap(它使用了强大的 GNU Readline 库,支持所有快捷键、历史记录)。

  • 按回车后,rlwrap 再把整行命令传给后面的 mysql

dnf install rlwrap
# 使用方式:
rlwrap mysql -u root -p


评论