OB 4.2.1.8升级到4.2.1.9时候报错

【 使用环境 】生产环境
【 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 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据您提供的报错信息,问题主要集中在使用 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 导致的。

以下是可能的解决方案:

  1. 升级 Python 版本:鉴于 Python 2.7 已经停止维护,并且 mysql-connector-python 对于 Python 2.7 的支持有限,建议您考虑将 Python 升级到 Python 3.x 版本。这不仅能解决当前遇到的 mysql-connector-python 兼容性问题,还能确保您能够使用到最新的语言特性和安全更新。

  2. 安装兼容版本的 mysql-connector-python:尽管 Python 2.7 的支持已经终止,您仍可以尝试查找一个与 Python 2.7 兼容的 mysql-connector-python 版本。不过,需要注意的是,这样的做法可能会带来其他潜在的风险,因为旧版本的库可能不包含最新的安全补丁。

  3. 使用其他 MySQL 连接器:如果升级 Python 版本不可行,您可以考虑使用其他支持 Python 2.7 的 MySQL 连接库,如 PyMySQL。然而,这需要您调整现有的代码以适应新的库接口。

  4. 检查环境变量:确保您的环境变量正确设置了 PYTHONPATH,以便 Python 能够找到 mysql.connector 模块。可以通过打印 os.environ['PYTHONPATH'] 来验证这一点。

  5. 重新安装 mysql-connector-python:有时候,简单的重新安装库也能解决问题。您可以尝试使用 pip install --upgrade mysql-connector-python 命令来更新库。

综上所述,最推荐的做法是升级 Python 到 3.x 版本,这样可以从根本上解决兼容性问题,并且能够更好地支持未来的开发需求。 [1]

详情请参考:

  1. 升级 OceanBase 数据库
  2. 0001 ~ 3999
  3. 错误码

麻烦发下obd版本

2.10.0 sudo alien --scripts -i ob-deploy-*.rpm安装的

根据您提供的信息,您已经在 Debian 系统上使用 alien 命令将 RPM 包转换为 Debian 可用的 .deb 包,并成功安装了 obd。但是,在使用 obd 进行 OceanBase 数据库升级时遇到了 mysql.connector 模块缺失的问题。考虑到您正在使用的是 Debian 11 系统,并且您提到的 mysql-connector-python 在 Python 2.7 上存在兼容性问题,这里有几个可能的解决方案:

解决方案

  1. 确保 mysql-connector-python 正确安装

    • 确认 mysql-connector-python 是否已经正确安装,并且版本与您的 Python 版本兼容。您可以使用 pip list 命令查看已安装的库列表,确认 mysql-connector-python 是否在其中。
    • 如果未安装或版本不兼容,尝试使用 pip install mysql-connector-python 安装或更新至兼容版本。
  2. 创建虚拟环境

    • 创建一个新的 Python 虚拟环境,并在这个环境中安装 mysql-connector-python。这样做可以避免系统范围内的依赖冲突。
    python3 -m venv myenv
    source myenv/bin/activate
    pip install mysql-connector-python
    
  3. 使用兼容的 Python 版本

    • 如果您当前的 Python 版本确实存在问题,可以考虑使用 Python 3.x 版本来运行 obd 的升级脚本。通常情况下,obd 支持 Python 3.x,并且 mysql-connector-python 对 Python 3.x 的支持更好。
  4. 检查环境变量

    • 确保您的环境变量正确设置了 PYTHONPATH,以便 Python 能够找到 mysql.connector 模块。可以通过打印 os.environ['PYTHONPATH'] 来验证这一点。
  5. 重新安装 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]

检索到的文档如下:

  1. 安装并配置 obd
  2. OceanBase 安装部署工具 V2.9.0
  3. 诊断工具命令组
  4. 上传 RPM 包
  5. (可选)部署 OBProxy
  6. 通过白屏部署 OceanBase 集群
  7. 在 Kubernetes 环境中部署 OceanBase 集群
  8. 通过 OBD 白屏部署 OceanBase 集群
  9. ob_error

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

1 个赞

我们复现下这个问题,有进展回复你

我们在debain 11/ 12都没有复现这个问题。帮忙提供下你的obd日志,位置在 ~/.obd/log/obd

obd升级过程不依赖系统的python环境,自带的有python执行器。

是的,我仔细确认了一下,确实是不是用的外部python,所以我觉得很神奇
obd.zip (120.8 KB)

看了下日志, 我们的mysql依赖是安装在这个目录,猜测应该是你安装过程中这个依赖损坏了。

/usr/obd/lib/executer/executer27/site-packages

解决办法:在找个机器重新解压安装一个obd 然后把这个目录site-packages内容都替换了(担心其他的也有损坏的)

190a86099b46dc8dca97373ae6681ed


问题依旧

ls 看下我截图的目录

image
image

你这是obd 2.9.2 啊。在2.10.0 里面做的对python3的兼容。

不要惊慌我刚刚尝试了一下降级了obd,之前是2.10.0,

最终发现:
ocp在老版本安装的时候设置了环境变量OBD_INSTALL_PRE=/root/.oceanbase-all-in-one/obclient,新版本OCP在升级obd的时候路径发生了变更/usr/obd/lib/executer/executer27/bin导致obd的executer执行器位置错误无法正确执行程序,导致升级检测的时候卡包导入