Rinvay
2024 年10 月 9 日 13:54
#1
【 使用环境 】生产环境
【 OB or 其他组件 】OB4.2.1.8
【 使用版本 】OB4.2.1.9
【问题描述】
操作系统版本:Debian 11 Python版本7.2.18 mysql-connector-python-8.0.33
使用OBD升级OB从4.2.1.8升级到4.2.1.9的时候报错:
[2024-10-09 12:12:40.537] [DEBUG] -- exited code 255, error output:
[2024-10-09 12:12:40.537] [DEBUG] Traceback (most recent call last):
[2024-10-09 12:12:40.537] [DEBUG] File "executer27.py", line 52, in <module>
[2024-10-09 12:12:40.537] [DEBUG] File "/tmp/10.10.10.148:2882/2d2109a5da1b037403c50d6351649688eae62d7c/upgrade_checker.py", line 7, in <module>
[2024-10-09 12:12:40.537] [DEBUG] import mysql.connector
[2024-10-09 12:12:40.537] [DEBUG] ImportError: No module named mysql.connector
[2024-10-09 12:12:40.537] [DEBUG] [3713205] Failed to execute script executer27
后续排查发现使用的Python2.7.18版本在 import mysql.connector的时候会报错,不知道官方有没有针对的解决方案
>>> import mysql.connector
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/__init__.py", line 32, in <module>
from .connection_cext import CMySQLConnection
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection_cext.py", line 86
f"MySQL Connector/Python C Extension not available ({exc})"
^
SyntaxError: invalid syntax
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手 ] 即可召唤小助手,欢迎试用!
论坛小助手
2024 年10 月 9 日 13:55
#3
根据您提供的报错信息,问题主要集中在使用 obd
升级 OceanBase 数据库时遇到的 ImportError: No module named mysql.connector
错误。这表明在执行升级脚本的过程中,系统未能找到 mysql.connector
模块。考虑到您提到的 Python 2.7.18 版本在尝试导入 mysql.connector
时出现了 SyntaxError: invalid syntax
的错误,这可能是由于 mysql-connector-python
不完全支持 Python 2.7 导致的。
以下是可能的解决方案:
升级 Python 版本 :鉴于 Python 2.7 已经停止维护,并且 mysql-connector-python
对于 Python 2.7 的支持有限,建议您考虑将 Python 升级到 Python 3.x 版本。这不仅能解决当前遇到的 mysql-connector-python
兼容性问题,还能确保您能够使用到最新的语言特性和安全更新。
安装兼容版本的 mysql-connector-python
:尽管 Python 2.7 的支持已经终止,您仍可以尝试查找一个与 Python 2.7 兼容的 mysql-connector-python
版本。不过,需要注意的是,这样的做法可能会带来其他潜在的风险,因为旧版本的库可能不包含最新的安全补丁。
使用其他 MySQL 连接器 :如果升级 Python 版本不可行,您可以考虑使用其他支持 Python 2.7 的 MySQL 连接库,如 PyMySQL
。然而,这需要您调整现有的代码以适应新的库接口。
检查环境变量 :确保您的环境变量正确设置了 PYTHONPATH
,以便 Python 能够找到 mysql.connector
模块。可以通过打印 os.environ['PYTHONPATH']
来验证这一点。
重新安装 mysql-connector-python
:有时候,简单的重新安装库也能解决问题。您可以尝试使用 pip install --upgrade mysql-connector-python
命令来更新库。
综上所述,最推荐的做法是升级 Python 到 3.x 版本,这样可以从根本上解决兼容性问题,并且能够更好地支持未来的开发需求。 [1]
详情请参考:
升级 OceanBase 数据库
0001 ~ 3999
错误码
Rinvay
2024 年10 月 9 日 14:46
#5
2.10.0 sudo alien --scripts -i ob-deploy-*.rpm安装的
论坛小助手
2024 年10 月 9 日 14:50
#6
根据您提供的信息,您已经在 Debian 系统上使用 alien
命令将 RPM 包转换为 Debian 可用的 .deb
包,并成功安装了 obd
。但是,在使用 obd
进行 OceanBase 数据库升级时遇到了 mysql.connector
模块缺失的问题。考虑到您正在使用的是 Debian 11 系统,并且您提到的 mysql-connector-python
在 Python 2.7 上存在兼容性问题,这里有几个可能的解决方案:
解决方案
确保 mysql-connector-python
正确安装
确认 mysql-connector-python
是否已经正确安装,并且版本与您的 Python 版本兼容。您可以使用 pip list
命令查看已安装的库列表,确认 mysql-connector-python
是否在其中。
如果未安装或版本不兼容,尝试使用 pip install mysql-connector-python
安装或更新至兼容版本。
创建虚拟环境
创建一个新的 Python 虚拟环境,并在这个环境中安装 mysql-connector-python
。这样做可以避免系统范围内的依赖冲突。
python3 -m venv myenv
source myenv/bin/activate
pip install mysql-connector-python
使用兼容的 Python 版本
如果您当前的 Python 版本确实存在问题,可以考虑使用 Python 3.x 版本来运行 obd
的升级脚本。通常情况下,obd
支持 Python 3.x,并且 mysql-connector-python
对 Python 3.x 的支持更好。
检查环境变量
确保您的环境变量正确设置了 PYTHONPATH
,以便 Python 能够找到 mysql.connector
模块。可以通过打印 os.environ['PYTHONPATH']
来验证这一点。
重新安装 obd
如果以上方法都不能解决问题,您可以尝试卸载并重新安装 obd
,确保所有依赖项都被正确安装。
sudo dpkg -r obd
sudo alien --scripts -i ob-deploy-*.rpm
综合建议
考虑到您提到的 mysql-connector-python
在 Python 2.7 上的兼容性问题,最推荐的做法是确保您使用的是 Python 3.x,并且在该环境下安装 mysql-connector-python
。这样不仅可以解决当前的问题,还可以确保未来在使用 obd
时不会遇到类似的兼容性问题。
如果您仍然遇到问题,建议您联系 OceanBase 的技术支持团队,他们可以提供更详细的指导和支持。 [1]
检索到的文档如下:
安装并配置 obd
OceanBase 安装部署工具 V2.9.0
诊断工具命令组
上传 RPM 包
(可选)部署 OBProxy
通过白屏部署 OceanBase 集群
在 Kubernetes 环境中部署 OceanBase 集群
通过 OBD 白屏部署 OceanBase 集群
ob_error
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
1 个赞
谐云
2024 年10 月 9 日 15:45
#8
我们在debain 11/ 12都没有复现这个问题。帮忙提供下你的obd日志,位置在 ~/.obd/log/obd
obd升级过程不依赖系统的python环境,自带的有python执行器。
Rinvay
2024 年10 月 9 日 16:34
#9
是的,我仔细确认了一下,确实是不是用的外部python,所以我觉得很神奇
obd.zip (120.8 KB)
谐云
2024 年10 月 9 日 16:57
#10
看了下日志, 我们的mysql依赖是安装在这个目录,猜测应该是你安装过程中这个依赖损坏了。
/usr/obd/lib/executer/executer27/site-packages
解决办法:在找个机器重新解压安装一个obd 然后把这个目录site-packages内容都替换了(担心其他的也有损坏的)
谐云
2024 年10 月 9 日 17:21
#14
你这是obd 2.9.2 啊。在2.10.0 里面做的对python3的兼容。
Rinvay
2024 年10 月 9 日 17:22
#15
不要惊慌我刚刚尝试了一下降级了obd,之前是2.10.0,
Rinvay
2024 年10 月 9 日 18:14
#17
最终发现:
ocp在老版本安装的时候设置了环境变量OBD_INSTALL_PRE=/root/.oceanbase-all-in-one/obclient,新版本OCP在升级obd的时候路径发生了变更/usr/obd/lib/executer/executer27/bin导致obd的executer执行器位置错误无法正确执行程序,导致升级检测的时候卡包导入