Amazon Linux 2能否安装MySQL ODBC Driver 8及解决认证插件报错?
问题背景
在Amazon Linux 2环境下,使用pyodbc搭配系统自带的mysql-connector-odbc 5.2.5驱动连接MySQL时,触发认证插件加载失败错误:
pyodbc.OperationalError: ('08004', "[08004] [unixODBC][MySQL][ODBC 5.2(w) Driver]Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory (2059) (SQLDriverConnect)")
升级Amazon Linux至2.0.20230207.0版本后,报错变为:
pyodbc.OperationalError: ('08004', "[08004] [unixODBC][MySQL][ODBC 5.2(w) Driver]Authentication plugin 'sha256_password' cannot be loaded: /usr/lib64/mysql/plugin/sha256_password.so: cannot open shared object file: No such file or directory (2059) (SQLDriverConnect)")
原因分析
MySQL 8.0及以上版本默认采用caching_sha2_password或sha256_password作为用户认证方式,但系统自带的mysql-connector-odbc 5.2.5版本不支持这些新认证插件,导致驱动无法加载对应文件。
可行方案:手动安装新版MySQL ODBC驱动
Amazon Linux 2完全支持手动安装新版MySQL ODBC驱动(如8.0.x系列),具体操作步骤如下:
卸载旧版驱动
先移除系统自带的旧版ODBC驱动:sudo yum remove mysql-connector-odbc -y安装依赖包
安装驱动运行及编译所需的依赖组件:sudo yum install unixODBC unixODBC-devel -y若系统缺少
mysql-community-devel包,需先添加MySQL官方YUM源(可通过MySQL官网获取对应EL7架构的源配置包),再执行安装:sudo yum install mysql-community-devel -y下载并安装新版驱动
前往MySQL官方网站,下载对应Amazon Linux 2(EL7 x86_64架构)的8.0.x版本ODBC驱动RPM包,然后执行本地安装:sudo rpm -ivh /path/to/mysql-connector-odbc-8.0.x-1.el7.x86_64.rpm验证驱动安装
执行以下命令确认驱动已成功注册:odbcinst -j正常输出中应包含
MySQL ODBC 8.0 Unicode Driver或MySQL ODBC 8.0 ANSI Driver的配置条目。更新连接代码
在pyodbc连接逻辑中,指定使用新版驱动:import pyodbc conn = pyodbc.connect( "DRIVER={MySQL ODBC 8.0 Unicode Driver};" "SERVER=你的MySQL主机地址;" "DATABASE=目标数据库名;" "UID=数据库用户名;" "PWD=数据库密码;" )
临时替代方案:修改MySQL用户认证方式
若暂时无法升级驱动,可将目标MySQL用户的认证方式改为旧版驱动支持的mysql_native_password:
ALTER USER '你的用户名'@'允许访问的主机' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Hassan Syyid

