KiwiTCMS-具有mysql_native_password加密方法的MySQL DB

问题描述

设置

  • 猕猴桃-最新
  • MysqL -latest(v8.0.21)
  • 操作系统-mac

我如下更改了docker-compose.yml,它可以启动两个容器。

    services:
        db:
            container_name: kiwi_db
            image: MysqL:latest
            volumes:
                - db_data:/var/lib/kiwi_MysqL/data
                # workaround for missing charset & collation support
                # https://github.com/sclorg/mariadb-container/pull/125
                - ./99-charset.sh:/usr/share/container-scripts/MysqL/init/99-charset.sh:Z
                - ./99-charset.cnf:/usr/share/container-scripts/MysqL/cnf/99-charset.cnf:Z
            restart: always
            environment:
                MysqL_ROOT_PASSWORD: kiwi-1s-aw3s0m3
                MysqL_DATABASE: kiwi
                MysqL_USER: kiwi
                MysqL_PASSWORD: kiwi
                MysqL_CHARSET: utf8mb4
                MysqL_COLLATION: utf8mb4_unicode_ci
    
        web:
            container_name: kiwi_web
            depends_on:
                - db
            restart: always
            image: kiwitcms/kiwi:latest
            ports:
                - 9001:8080
                - 9443:8443
            volumes:
                - uploads:/Kiwi/uploads:Z
            environment:
                KIWI_DB_HOST: db
                KIWI_DB_PORT: 3306
                KIWI_DB_NAME: kiwi
                KIWI_DB_USER: kiwi
                KIWI_DB_PASSWORD: kiwi
                KIWI_DONT_ENFORCE_HTTPS: "true"
            links:
                - db
    
    volumes:
        db_data:
        uploads:

当我执行docker exec -it kiwi_web /Kiwi/manage.py migrate时,会收到一些错误消息。

我正在尝试将用户密码的加密方法caching_ sha2_ Password更改为MysqL_native_password,但是它仍然弹出相同的错误消息。

错误的跟踪:

    Traceback (most recent call last):
      File "/venv/lib/python3.6/site-packages/django/db/backends/base/base.py",line 220,in ensure_connection
        self.connect()
      File "/venv/lib/python3.6/site-packages/django/utils/asyncio.py",line 26,in inner
        return func(*args,**kwargs)
      File "/venv/lib/python3.6/site-packages/django/db/backends/base/base.py",line 197,in connect
        self.connection = self.get_new_connection(conn_params)
      File "/venv/lib/python3.6/site-packages/django/utils/asyncio.py",**kwargs)
      File "/venv/lib/python3.6/site-packages/django/db/backends/MysqL/base.py",line 233,in get_new_connection
        return Database.connect(**conn_params)
      File "/venv/lib/python3.6/site-packages/MysqLdb/__init__.py",line 130,in Connect
        return Connection(*args,**kwargs)
      File "/venv/lib/python3.6/site-packages/MysqLdb/connections.py",line 185,in __init__
        super().__init__(*args,**kwargs2)
    MysqLdb._exceptions.OperationalError: (2059,'Plugin caching_sha2_password Could not be loaded: lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory')

上述异常是以下异常的直接原因:

   Traceback (most recent call last):
     File "/Kiwi/manage.py",line 12,in <module>
       execute_from_command_line(sys.argv)
     File "/venv/lib/python3.6/site-packages/django/core/management/__init__.py",line 401,in execute_from_command_line
       utility.execute()
     File "/venv/lib/python3.6/site-packages/django/core/management/__init__.py",line 395,in execute
       self.fetch_command(subcommand).run_from_argv(self.argv)
     File "/venv/lib/python3.6/site-packages/django/core/management/base.py",line 328,in run_from_argv
       self.execute(*args,**cmd_options)
     File "/venv/lib/python3.6/site-packages/django/core/management/base.py",line 366,in execute
       self.check()
     File "/venv/lib/python3.6/site-packages/django/core/management/base.py",in check
       include_deployment_checks=include_deployment_checks,File "/venv/lib/python3.6/site-packages/django/core/management/commands/migrate.py",line 63,in _run_checks
       issues = run_checks(tags=[Tags.database])
     File "/venv/lib/python3.6/site-packages/django/core/checks/registry.py",line 72,in run_checks
       new_errors = check(app_configs=app_configs)
     File "/venv/lib/python3.6/site-packages/django/core/checks/database.py",line 10,in check_database_backends
       issues.extend(conn.validation.check(**kwargs))
     File "/venv/lib/python3.6/site-packages/django/db/backends/MysqL/validation.py",line 9,in check
       issues.extend(self._check_sql_mode(**kwargs))
     File "/venv/lib/python3.6/site-packages/django/db/backends/MysqL/validation.py",line 13,in _check_sql_mode
       with self.connection.cursor() as cursor:
     File "/venv/lib/python3.6/site-packages/django/utils/asyncio.py",in inner
       return func(*args,**kwargs)
     File "/venv/lib/python3.6/site-packages/django/db/backends/base/base.py",line 260,in cursor
       return self._cursor()
     File "/venv/lib/python3.6/site-packages/django/db/backends/base/base.py",line 236,in _cursor
       self.ensure_connection()
     File "/venv/lib/python3.6/site-packages/django/utils/asyncio.py",in ensure_connection
       self.connect()
     File "/venv/lib/python3.6/site-packages/django/db/utils.py",line 90,in __exit__
       raise dj_exc_value.with_traceback(traceback) from exc_value
     File "/venv/lib/python3.6/site-packages/django/db/backends/base/base.py",in ensure_connection
       self.connect()
     File "/venv/lib/python3.6/site-packages/django/utils/asyncio.py",in connect
       self.connection = self.get_new_connection(conn_params)
     File "/venv/lib/python3.6/site-packages/django/utils/asyncio.py",**kwargs)
     File "/venv/lib/python3.6/site-packages/django/db/backends/MysqL/base.py",in get_new_connection
       return Database.connect(**conn_params)
     File "/venv/lib/python3.6/site-packages/MysqLdb/__init__.py",in Connect
       return Connection(*args,**kwargs)
     File "/venv/lib/python3.6/site-packages/MysqLdb/connections.py",in __init__
       super().__init__(*args,**kwargs2)
   django.db.utils.OperationalError: (2059,'Plugin caching_sha2_password Could not be loaded: lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory')

解决方法

您正尝试将正式的MySQL docker镜像与docker-compose.yml配置用于默认情况下Kiwi TCMS使用的CentOS MariaDB镜像。

https://hub.docker.com/_/mysql上快速浏览MySQL的容器映像,它告诉我它不支持MariaDB映像中使用的某些环境变量。

我看到的错误是由尝试使用似乎与MySQL不兼容的mariadb客户端库(进行连接)引起的。而且我认为这些天MariaDB和MySQL最新版本之间存在许多不兼容性。

所以您需要做两件事:

  1. 弄清楚如何根据其文档通过环境变量正确配置MySQL容器

  2. 弄清楚MariaDB客户端库是否可以与MySQL服务器一起工作。

另请参见https://docs.djangoproject.com/en/3.0/ref/databases/#mariadb-notes

对于2),您可以在GitHub上打开一个问题,这样我们就不会忘记将其添加到我们的测试套件中。 IDK在我的头顶上,最近mysql / mariadb库的状态是什么,是否可以并行安装和使用它们,或者它们是否会相互冲突。