MacOS下Apache Superset连接MySQL报错及解决求助
我之前在Mac上部署Superset时也碰到过几乎一模一样的坑,给你分享几个亲测有效的解决办法:
一、先解决mysql.h not found,成功安装mysqlclient
你遇到的mysqlclient安装失败,本质是Mac系统缺少MySQL的开发头文件和库文件,通过Homebrew就能搞定:
先安装MySQL(或者仅安装开发依赖):
brew install mysql安装完成后,它会自动把
mysql.h这类头文件放到/usr/local/mysql/include目录,库文件放到/usr/local/mysql/lib。设置环境变量,让pip能找到这些文件:
export PATH="/usr/local/mysql/bin:$PATH" export LDFLAGS="-L/usr/local/mysql/lib" export CPPFLAGS="-I/usr/local/mysql/include"如果是zsh用户,建议把这几行加到
~/.zshrc里;bash用户加到~/.bash_profile,避免重启终端后失效。重新安装mysqlclient:
pip3 install mysqlclient这时候应该就能顺利安装完成了,之后用
mysql://user:password@host:port/dbname作为URI连接MySQL,Superset就能正常执行查询了。
二、如果坚持用mysql-connector,解决execute() got an unexpected keyword argument 'args'报错
这个错误是因为新版本的mysql-connector-python修改了底层方法的参数,和Superset依赖的SQLAlchemy版本不兼容导致的,解决办法是降级到兼容的版本:
先卸载当前的mysql-connector-python:
pip3 uninstall mysql-connector-python -y安装指定兼容版本(亲测8.0.28版本可以正常工作):
pip3 install mysql-connector-python==8.0.28重启Superset服务,然后用
mysql+mysqlconnector://user:password@host:port/dbname作为URI重新连接数据库,再执行查询应该就不会报错了。
总结
优先推荐用mysqlclient作为驱动,它是SQLAlchemy官方推荐的MySQL适配驱动,兼容性和稳定性都比mysql-connector-python更好,后续也不容易出现这类奇怪的兼容性问题。
内容的提问来源于stack exchange,提问作者Bireon

