使用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客户端配置文件,避免每次连接都手动加参数:
- 打开或创建配置文件:
vi /etc/mysql/mariadb.conf.d/50-client.cnf
- 在
[client]段落中添加以下配置:
default-auth=mysql_native_password
- 保存退出后,重新连接即可生效。
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
相关产品推荐
相关产品推荐

