You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mariadb-client无法远程连接MariaDB,mysql-client可正常连接

解决Docker中MariaDB客户端无法连接远程MariaDB服务器的问题

核心原因

MariaDB客户端与MySQL客户端默认使用的身份认证插件存在差异,远程服务器上的myuser用户使用的认证插件(大概率是mysql_native_password)与MariaDB客户端默认启用的插件不匹配,导致权限验证失败。

解决方案

1. 连接时手动指定认证插件

在使用mariadb-client连接时,添加--default-auth=mysql_native_password参数,强制使用与MySQL客户端一致的认证插件:

mysql -P3307 -hmyurl.com -u myuser -pmypass --default-auth=mysql_native_password mydatabase

2. 永久配置MariaDB客户端默认认证插件

在Docker容器内编辑MariaDB客户端配置文件,避免每次连接都手动加参数:

  1. 打开或创建配置文件:
vi /etc/mysql/mariadb.conf.d/50-client.cnf
  1. 在[client]段落中添加以下配置:
default-auth=mysql_native_password
  1. 保存退出后,重新连接即可生效。

3. 适配Python mysqlclient的连接配置

针对Python的mysqlclient库,在连接时显式指定auth_plugin参数即可解决依赖问题:

直接使用mysqlclient连接

import MySQLdb

db_conn = MySQLdb.connect(
    host="myurl.com",
    port=3307,
    user="myuser",
    passwd="mypass",
    db="mydatabase",
    auth_plugin="mysql_native_password"
)

使用SQLAlchemy连接(若用ORM框架)

from sqlalchemy import create_engine

engine = create_engine(
    "mysql+mysqldb://myuser:mypass@myurl.com:3307/mydatabase?auth_plugin=mysql_native_password"
)

4. 排查密码特殊字符问题(可选)

如果密码包含#、!等特殊字符,MariaDB客户端可能无法正确解析,此时需用引号包裹密码:

mysql -P3307 -hmyurl.com -u myuser -p"mypass" --default-auth=mysql_native_password mydatabase

内容的提问来源于stack exchange,提问作者okainov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 08:31:10