Superset连接MySQL异常解决

将Superset的元数据库配置为MySQL,配置方法见:Superset配置。配置完成后,在启动Superset的时候,出现以下异常信息:

2024-09-01 16:28:36,614:ERROR:flask_appbuilder.security.sqla.manager:DB Creation and initialization failed: (MySQLdb.OperationalError) (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Loaded your LOCAL configuration at [/home/zhangjc/github/superset/superset_config.py]

这个错误跟连接MySQL的方式有关,详细信息见:无法连接本地MySQL-CSDN博客。我的连接配置信息如下:

SQLALCHEMY_DATABASE_URI = 'mysql://superset:superset%4001@localhost/superset'

如果想快速解决问题,可将连接串中的localhost改为127.0.0.1。但作为技术人,还是需要深究下。中的描述,连接MySQL用的是mysqlclient驱动,问题可能出现在该驱动上。用以下方式进行验证:

$ python
Python 3.11.9 (main, Aug 28 2024, 23:13:21) [GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> from MySQLdb import _mysql
>>> db=_mysql.connect(host="localhost",user="superset", password="superset@01", database="superset")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MySQLdb.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
>>> db=_mysql.connect(host="localhost",user="superset", password="superset@01", database="superset", unix_socket='/tmp/mysql.sock')
>>>

从上面的验证可以看出,问题出在mysqlclient默认使用的Unix socket文件与MySQL服务的不同,在指定正确的Unix socket文件后,问题解决。

如何在superset中配置指定MySQL连接的Unix socket文件呢?查看MySQL官方文档,可以看到在连接串中通过socket参数设置。

无法连接本地MySQL-CSDN博客

修改Superset元数据库连接串配置,如下:

SQLALCHEMY_DATABASE_URI = 'mysql://superset:superset%4001@localhost/superset?socket=(/tmp/mysql.sock)'

启动Superset出现以下错误:

$ superset run -p 8088 --with-threads --reload --debugger
Loaded your LOCAL configuration at [/home/zhangjc/github/superset/superset_config.py]
logging was configured successfully
2024-09-05 11:45:16,426:INFO:superset.utils.logging_configurator:logging was configured successfully
2024-09-05 11:45:16,433:INFO:root:Configured event logger of type <class 'superset.utils.log.DBEventLogger'>
/home/zhangjc/frin/python/venvs/superset/lib/python3.11/site-packages/flask_limiter/extension.py:333: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
  warnings.warn(
2024-09-05 11:45:16,438:ERROR:flask_appbuilder.security.sqla.manager:DB Creation and initialization failed: 'socket' is an invalid keyword argument for connect()

说明mysqlclient模块使用的参数名与MySQL文档中的不一致。但查询mysqlclient文档并未发现Unix socket文件参数的说明😂。没办法,只能使用码农基本能力 - 读源代码了😁。原来mysqlclient中的名称是unix_socket:

修改连接串如下:

SQLALCHEMY_DATABASE_URI = 'mysql://superset:superset%4001@localhost/superset?unix_socket=/tmp/mysql.sock'

再次启动Superset,Done!✌️✌️✌️

Superset是一个开源的数据可视化和探索平台,它可以连接多种数据源,包括MySQL数据库。下面是连接SupersetMySQL的步骤: 1. 安装Superset:首先,你需要按照Superset的安装指南在你的机器上安装Superset。 2. 配置数据库连接:在Superset的配置文件中,你需要配置MySQL数据库的连接信息。打开Superset的配置文件(一般是superset_config.py),找到`SQLALCHEMY_DATABASE_URI`参数,并将其设置为你的MySQL数据库的连接字符串。连接字符串的格式通常是`mysql://username:password@host:port/database_name`。 3. 初始化数据库:运行Superset的初始化命令,以创建必要的数据库表和数据模型。在命令行中执行以下命令: ``` superset db upgrade ``` 4. 启动Superset:运行Superset的启动命令,以启动Superset服务器。在命令行中执行以下命令: ``` superset runserver ``` 5. 添加MySQL数据源:在Superset的Web界面中,登录到Superset后台管理界面,点击左侧导航栏中的“Sources”选项,然后点击右上角的“+”按钮添加新的数据源。选择MySQL作为数据源类型,并填写MySQL数据库的连接信息。 6. 测试连接:保存数据源配置后,可以点击“Test Connection”按钮来测试与MySQL数据库的连接是否成功。 至此,你已经成功地将Superset连接到了MySQL数据库。你可以使用Superset的数据探索和可视化功能来查询和展示MySQL数据库中的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值