如何使用URI连接字符串直接连接MySQL/MariaDB命令行客户端?
用MySQL URI直接连接MariaDB命令行客户端的办法
问题说明
你手里有这种格式的数据库连接URI:mysql://<user>:<pass>@<host>:<port>/<database>,想不用拆成mysql -u <user> -h <host> -p ...这种长命令直接连,但你用的MariaDB客户端(mysql Ver 15.1 Distrib 10.11.2-MariaDB)没有官方文档里提到的--uri选项,下面给你几个可行的替代方案:
解决方案
1. 用环境变量MYSQL_URI
MariaDB客户端支持通过MYSQL_URI环境变量传递连接URI,直接这么用就行:
# 先设置环境变量再启动客户端 export MYSQL_URI="mysql://<user>:<pass>@<host>:<port>/<database>" mysql # 或者一次性执行,不用持久化环境变量 MYSQL_URI="mysql://<user>:<pass>@<host>:<port>/<database>" mysql
2. 借助临时配置文件+--defaults-extra-file
新建一个临时配置文件,比如命名为temp_conn.cnf,写入以下内容:
[client] user=<user> password=<pass> host=<host> port=<port> database=<database>
先给配置文件设置安全权限(避免其他用户读取敏感信息),再用客户端加载:
chmod 600 temp_conn.cnf mysql --defaults-extra-file=temp_conn.cnf
3. 脚本里自动解析URI拼接命令(适合批量操作)
如果需要在脚本中自动处理,可以用shell命令拆分URI参数,示例如下:
URI="mysql://<user>:<pass>@<host>:<port>/<database>" USER=$(echo "$URI" | awk -F'[:@]' '{print $2}') PASS=$(echo "$URI" | awk -F'[:@]' '{print $3}') HOST=$(echo "$URI" | awk -F'[@:/]' '{print $4}') PORT=$(echo "$URI" | awk -F'[:/]' '{print $5}') DB=$(echo "$URI" | awk -F'/' '{print $4}') mysql -u "$USER" -p"$PASS" -h "$HOST" -P "$PORT" "$DB"
⚠️ 注意:这种方式会在命令行暴露密码,生产环境优先选择前两种方法。
额外提示
MariaDB 10.13及以上版本的客户端已经支持--uri选项,要是你经常需要用URI连接,升级客户端版本会更方便。
内容的提问来源于stack exchange,提问作者Matt Sanders
相关产品推荐
相关产品推荐

