JumpServer堡垒机从V3升级到V4

直接使用Helm方式升级,在初始化MySQL的过程中出现两个报错

报错一:

/opt/py3/lib/python3.11/site-packages/httpsig/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import get_distribution, DistributionNotFound
2025-10-14 20:42:30 [INFO] init sqlite db /opt/jumpserver/data/system/leak_passwords.db
2025-10-14 20:42:30 [DEBU] Start subscribe for expire orgs mapping from memory
2025-10-14 20:42:30 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:42:30 [DEBU] Start subscribe vault change
2025-10-14 20:42:30 [INFO] Start subscribe for stop job execution
2025-10-14 20:42:30 [DEBU] Start subscribe setting change
2025-10-14 20:42:30 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:42:31 Collect static files
2025-10-14 20:42:31 Collect static files done
2025-10-14 20:42:31 Check database structure change ...
2025-10-14 20:42:31 Migrate model change to database ...
Operations to perform:
  Apply all migrations: accounts, acls, admin, assets, audits, auth, authentication, captcha, contenttypes, django_cas_ng, django_celery_beat, labels, notifications, ops, orgs, perms, rbac, sessions, settings, terminal, tickets, users
Running migrations:
2025-10-14 20:42:33 Perform migrate failed
Traceback (most recent call last):
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
MySQLdb.OperationalError: (1050, "Table 'assets_myasset' already exists")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/jumpserver/./jms", line 203, in <module>
    upgrade_db()
  File "/opt/jumpserver/./jms", line 137, in upgrade_db
    perform_db_migrate()
  File "/opt/jumpserver/./jms", line 92, in perform_db_migrate
    raise e
  File "/opt/jumpserver/./jms", line 89, in perform_db_migrate
    management.call_command('migrate')
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/__init__.py", line 198, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 96, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 349, in handle
    post_migrate_state = executor.migrate(
                         ^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 135, in migrate
    state = self._migrate_all_forwards(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
    state = self.apply_migration(
            ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 252, in apply_migration
    state = migration.apply(state, schema_editor)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/migration.py", line 130, in apply
    operation.database_forwards(
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/operations/models.py", line 96, in database_forwards
    schema_editor.create_model(model)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 447, in create_model
    self.execute(sql, params or None)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 199, in execute
    cursor.execute(sql, params)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/opt/py3/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1050, "Table 'assets_myasset' already exists")

根据报错一的信息,确认assets_myasset表中无数据后,删除assets_myasset表

drop table assets_myasset

继续部署

报错二:

/opt/py3/lib/python3.11/site-packages/httpsig/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import get_distribution, DistributionNotFound
2025-10-14 20:48:06 [INFO] init sqlite db /opt/jumpserver/data/system/leak_passwords.db
2025-10-14 20:48:07 [DEBU] Start subscribe for expire orgs mapping from memory
2025-10-14 20:48:07 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:48:07 [DEBU] Start subscribe vault change
2025-10-14 20:48:07 [INFO] Start subscribe for stop job execution
2025-10-14 20:48:07 [DEBU] Start subscribe setting change
2025-10-14 20:48:07 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:48:07 Collect static files
2025-10-14 20:48:07 Collect static files done
2025-10-14 20:48:07 Check database structure change ...
2025-10-14 20:48:07 Migrate model change to database ...
Operations to perform:
  Apply all migrations: accounts, acls, admin, assets, audits, auth, authentication, captcha, contenttypes, django_cas_ng, django_celery_beat, labels, notifications, ops, orgs, perms, rbac, sessions, settings, terminal, tickets, users
Running migrations:
2025-10-14 20:48:10 Perform migrate failed
Traceback (most recent call last):
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
MySQLdb.OperationalError: (3780, "Referencing column 'asset_id' and referenced column 'id' in foreign key constraint 'assets_myasset_asset_id_eff8cabd_fk_assets_asset_id' are incompatible.")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/jumpserver/./jms", line 203, in <module>
    upgrade_db()
  File "/opt/jumpserver/./jms", line 137, in upgrade_db
    perform_db_migrate()
  File "/opt/jumpserver/./jms", line 92, in perform_db_migrate
    raise e
  File "/opt/jumpserver/./jms", line 89, in perform_db_migrate
    management.call_command('migrate')
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/__init__.py", line 198, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 96, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 349, in handle
    post_migrate_state = executor.migrate(
                         ^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 135, in migrate
    state = self._migrate_all_forwards(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
    state = self.apply_migration(
            ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 249, in apply_migration
    with self.connection.schema_editor(
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 164, in __exit__
    self.execute(sql)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 199, in execute
    cursor.execute(sql, params)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/opt/py3/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (3780, "Referencing column 'asset_id' and referenced column 'id' in foreign key constraint 'assets_myasset_asset_id_eff8cabd_fk_assets_asset_id' are incompatible.")
  Applying assets.0005_myasset...

根据上述报错,是编码问题导致的,综合排查流程如下:

1、排查表结构

SHOW CREATE TABLE assets_asset \G;
*************************** 1. row ***************************
       Table: assets_asset
Create Table: CREATE TABLE `assets_asset` (
  `id` char(32) NOT NULL,
  `address` varchar(767) NOT NULL,
  `name` varchar(128) NOT NULL,
  `is_active` tinyint(1) NOT NULL,
  `created_by` varchar(128) DEFAULT NULL,
  `date_created` datetime(6) DEFAULT NULL,
  `comment` longtext NOT NULL,
  `domain_id` char(32) DEFAULT NULL,
  `org_id` varchar(36) NOT NULL,
  `platform_id` int NOT NULL,
  `connectivity` varchar(16) NOT NULL,
  `date_verified` datetime(6) DEFAULT NULL,
  `date_updated` datetime(6) NOT NULL,
  `updated_by` varchar(128) DEFAULT NULL,
  `custom_info` json NOT NULL DEFAULT (_utf8mb3'{}'),
  `gathered_info` json NOT NULL DEFAULT (_utf8mb3'{}'),
  PRIMARY KEY (`id`),
  UNIQUE KEY `assets_asset_org_id_hostname_13a2c598_uniq` (`org_id`,`name`),
  KEY `assets_asset_ip_ceeb994c` (`address`),
  KEY `assets_asset_domain_id_bda54057_fk_assets_domain_id` (`domain_id`),
  KEY `assets_asset_org_id_f25200c7` (`org_id`),
  KEY `assets_asset_platform_id_b2b0830c_fk_assets_platform_id` (`platform_id`),
  CONSTRAINT `assets_asset_domain_id_bda54057_fk_assets_domain_id` FOREIGN KEY (`domain_id`) REFERENCES `assets_domain` (`id`),
  CONSTRAINT `assets_asset_platform_id_b2b0830c_fk_assets_platform_id` FOREIGN KEY (`platform_id`) REFERENCES `assets_platform` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3


SHOW CREATE TABLE assets_myasset \G;
*************************** 1. row ***************************
       Table: assets_myasset
Create Table: CREATE TABLE `assets_myasset` (
  `created_by` varchar(128) DEFAULT NULL,
  `updated_by` varchar(128) DEFAULT NULL,
  `date_created` datetime(6) DEFAULT NULL,
  `date_updated` datetime(6) NOT NULL,
  `id` char(32) NOT NULL,
  `name` varchar(128) NOT NULL,
  `comment` varchar(512) NOT NULL,
  `asset_id` char(32) NOT NULL,
  `user_id` char(32) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `assets_myasset_user_id_asset_id_d2fd9886_uniq` (`user_id`,`asset_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

发现两个表的编码不一致,一个是utf8mb3,一个是utf8mb4,实际应该是utf8mb4才对

2、修改表结构

ALTER TABLE assets_myasset CONVERT TO CHARACTER SET utf8mb3;

改完之后继续部署发现依旧报错

/opt/py3/lib/python3.11/site-packages/httpsig/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import get_distribution, DistributionNotFound
2025-10-14 20:48:06 [INFO] init sqlite db /opt/jumpserver/data/system/leak_passwords.db
2025-10-14 20:48:07 [DEBU] Start subscribe for expire orgs mapping from memory
2025-10-14 20:48:07 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:48:07 [DEBU] Start subscribe vault change
2025-10-14 20:48:07 [INFO] Start subscribe for stop job execution
2025-10-14 20:48:07 [DEBU] Start subscribe setting change
2025-10-14 20:48:07 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:48:07 Collect static files
2025-10-14 20:48:07 Collect static files done
2025-10-14 20:48:07 Check database structure change ...
2025-10-14 20:48:07 Migrate model change to database ...
Operations to perform:
  Apply all migrations: accounts, acls, admin, assets, audits, auth, authentication, captcha, contenttypes, django_cas_ng, django_celery_beat, labels, notifications, ops, orgs, perms, rbac, sessions, settings, terminal, tickets, users
Running migrations:
2025-10-14 20:48:10 Perform migrate failed
Traceback (most recent call last):
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
MySQLdb.OperationalError: (3780, "Referencing column 'asset_id' and referenced column 'id' in foreign key constraint 'assets_myasset_asset_id_eff8cabd_fk_assets_asset_id' are incompatible.")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/jumpserver/./jms", line 203, in <module>
    upgrade_db()
  File "/opt/jumpserver/./jms", line 137, in upgrade_db
    perform_db_migrate()
  File "/opt/jumpserver/./jms", line 92, in perform_db_migrate
    raise e
  File "/opt/jumpserver/./jms", line 89, in perform_db_migrate
    management.call_command('migrate')
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/__init__.py", line 198, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 96, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 349, in handle
    post_migrate_state = executor.migrate(
                         ^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 135, in migrate
    state = self._migrate_all_forwards(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
    state = self.apply_migration(
            ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 249, in apply_migration
    with self.connection.schema_editor(
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 164, in __exit__
    self.execute(sql)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 199, in execute
    cursor.execute(sql, params)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/opt/py3/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (3780, "Referencing column 'asset_id' and referenced column 'id' in foreign key constraint 'assets_myasset_asset_id_eff8cabd_fk_assets_asset_id' are incompatible.")
  Applying assets.0005_myasset...root@jumpserver-master01:~# 
root@jumpserver-master01:~# 
root@jumpserver-master01:~# 
root@jumpserver-master01:~# 
root@jumpserver-master01:~# kubectl -n jumpserver logs -f dc4-jumpserver-jms-init-db-rq2gk 
jumpserver-mysql-svc no init sleep 120s
/opt/py3/lib/python3.11/site-packages/httpsig/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import get_distribution, DistributionNotFound
2025-10-14 20:51:19 [INFO] init sqlite db /opt/jumpserver/data/system/leak_passwords.db
2025-10-14 20:51:19 [DEBU] Start subscribe for expire orgs mapping from memory
2025-10-14 20:51:19 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:51:19 [DEBU] Start subscribe vault change
2025-10-14 20:51:19 [INFO] Start subscribe for stop job execution
2025-10-14 20:51:19 [DEBU] Start subscribe setting change
2025-10-14 20:51:19 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:51:19 Collect static files
2025-10-14 20:51:20 Collect static files done
2025-10-14 20:51:20 Check database structure change ...
2025-10-14 20:51:20 Migrate model change to database ...
Operations to perform:
  Apply all migrations: accounts, acls, admin, assets, audits, auth, authentication, captcha, contenttypes, django_cas_ng, django_celery_beat, labels, notifications, ops, orgs, perms, rbac, sessions, settings, terminal, tickets, users
Running migrations:
2025-10-14 20:51:22 Perform migrate failed
Traceback (most recent call last):
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
MySQLdb.OperationalError: (1050, "Table 'assets_myasset' already exists")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/jumpserver/./jms", line 203, in <module>
    upgrade_db()
  File "/opt/jumpserver/./jms", line 137, in upgrade_db
    perform_db_migrate()
  File "/opt/jumpserver/./jms", line 92, in perform_db_migrate
    raise e
  File "/opt/jumpserver/./jms", line 89, in perform_db_migrate
    management.call_command('migrate')
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/__init__.py", line 198, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 96, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 349, in handle
    post_migrate_state = executor.migrate(
                         ^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 135, in migrate
    state = self._migrate_all_forwards(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
    state = self.apply_migration(
            ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 252, in apply_migration
    state = migration.apply(state, schema_editor)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/migration.py", line 130, in apply
    operation.database_forwards(
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/operations/models.py", line 96, in database_forwards
    schema_editor.create_model(model)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 447, in create_model
    self.execute(sql, params or None)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 199, in execute
    cursor.execute(sql, params)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/opt/py3/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1050, "Table 'assets_myasset' already exists")
  Applying assets.0005_myasset...root@jumpserver-master01:~# kubectl -n jumpserver logs -f dc4-jumpserver-jms-init-db-rq2gk 
jumpserver-mysql-svc no init sleep 120s
/opt/py3/lib/python3.11/site-packages/httpsig/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import get_distribution, DistributionNotFound
2025-10-14 20:51:19 [INFO] init sqlite db /opt/jumpserver/data/system/leak_passwords.db
2025-10-14 20:51:19 [DEBU] Start subscribe for expire orgs mapping from memory
2025-10-14 20:51:19 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:51:19 [DEBU] Start subscribe vault change
2025-10-14 20:51:19 [INFO] Start subscribe for stop job execution
2025-10-14 20:51:19 [DEBU] Start subscribe setting change
2025-10-14 20:51:19 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:51:19 Collect static files
2025-10-14 20:51:20 Collect static files done
2025-10-14 20:51:20 Check database structure change ...
2025-10-14 20:51:20 Migrate model change to database ...
Operations to perform:
  Apply all migrations: accounts, acls, admin, assets, audits, auth, authentication, captcha, contenttypes, django_cas_ng, django_celery_beat, labels, notifications, ops, orgs, perms, rbac, sessions, settings, terminal, tickets, users
Running migrations:
2025-10-14 20:51:22 Perform migrate failed
Traceback (most recent call last):
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
MySQLdb.OperationalError: (1050, "Table 'assets_myasset' already exists")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/jumpserver/./jms", line 203, in <module>
    upgrade_db()
  File "/opt/jumpserver/./jms", line 137, in upgrade_db
    perform_db_migrate()
  File "/opt/jumpserver/./jms", line 92, in perform_db_migrate
    raise e
  File "/opt/jumpserver/./jms", line 89, in perform_db_migrate
    management.call_command('migrate')
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/__init__.py", line 198, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 96, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 349, in handle
    post_migrate_state = executor.migrate(
                         ^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 135, in migrate
    state = self._migrate_all_forwards(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
    state = self.apply_migration(
            ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 252, in apply_migration
    state = migration.apply(state, schema_editor)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/migration.py", line 130, in apply
    operation.database_forwards(
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/operations/models.py", line 96, in database_forwards
    schema_editor.create_model(model)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 447, in create_model
    self.execute(sql, params or None)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 199, in execute
    cursor.execute(sql, params)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/opt/py3/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1050, "Table 'assets_myasset' already exists")
  Applying assets.0005_myasset...root@jumpserver-master01:~# kubectl -n jumpserver logs -f dc4-jumpserver-jms-init-db-rh5c2 
root@jumpserver-master01:~# kubectl -n jumpserver logs -f dc4-jumpserver-jms-init-db-rh5c2 
jumpserver-mysql-svc no init sleep 120s
/opt/py3/lib/python3.11/site-packages/httpsig/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import get_distribution, DistributionNotFound
2025-10-14 20:55:12 [INFO] init sqlite db /opt/jumpserver/data/system/leak_passwords.db
2025-10-14 20:55:12 [DEBU] Start subscribe for expire orgs mapping from memory
2025-10-14 20:55:12 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:55:12 [DEBU] Start subscribe vault change
2025-10-14 20:55:12 [INFO] Start subscribe for stop job execution
2025-10-14 20:55:12 [DEBU] Start subscribe setting change
2025-10-14 20:55:12 [DEBU] Start subscribe for expire node assets id mapping from memory
2025-10-14 20:55:12 Collect static files
2025-10-14 20:55:13 Collect static files done
2025-10-14 20:55:13 Check database structure change ...
2025-10-14 20:55:13 Migrate model change to database ...
Operations to perform:
  Apply all migrations: accounts, acls, admin, assets, audits, auth, authentication, captcha, contenttypes, django_cas_ng, django_celery_beat, labels, notifications, ops, orgs, perms, rbac, sessions, settings, terminal, tickets, users
Running migrations:
2025-10-14 20:55:15 Perform migrate failed
Traceback (most recent call last):
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
MySQLdb.OperationalError: (1050, "Table 'assets_myasset' already exists")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/jumpserver/./jms", line 203, in <module>
    upgrade_db()
  File "/opt/jumpserver/./jms", line 137, in upgrade_db
    perform_db_migrate()
  File "/opt/jumpserver/./jms", line 92, in perform_db_migrate
    raise e
  File "/opt/jumpserver/./jms", line 89, in perform_db_migrate
    management.call_command('migrate')
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/__init__.py", line 198, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/base.py", line 96, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 349, in handle
    post_migrate_state = executor.migrate(
                         ^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 135, in migrate
    state = self._migrate_all_forwards(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
    state = self.apply_migration(
            ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/executor.py", line 252, in apply_migration
    state = migration.apply(state, schema_editor)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/migration.py", line 130, in apply
    operation.database_forwards(
  File "/opt/py3/lib/python3.11/site-packages/django/db/migrations/operations/models.py", line 96, in database_forwards
    schema_editor.create_model(model)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 447, in create_model
    self.execute(sql, params or None)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 199, in execute
    cursor.execute(sql, params)
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/opt/py3/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/opt/py3/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1050, "Table 'assets_myasset' already exists")
  Applying assets.0005_myasset

3、再次修改表结构

ALTER TABLE assets_asset CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

改完之后发现有依赖

ERROR 3780 (HY000): Referencing column 'domain_id' and referenced column 'id' in foreign key constraint 'assets_asset_domain_id_bda54057_fk_assets_domain_id' are incompatible.

这说明还有很多的表需要修改,一个一个的修改非常的不现实

4、查询官网,确认官方的处理办法

https://github.com/jumpserver/jumpserver/issues/14211#issuecomment-2376577808

最终找到方法

到此,找到解决方案,开始测试并正式使用

最终解决办法是:

1、备份数据库

2、删除数据库里面的数据,使用新版本重新构建堡垒机

3、删除新构建的数据库里面的数据

4、把备份里面的CHARSET=utf8mb3改成CHARSET=utf8mb4

sed -i 's/CHARSET=utf8mb3/CHARSET=utf8mb4/g' jumpserver_utf8mb4.sql

5、导入数据库

6、删除所有Pod,让Pod自动重建

7、堡垒机服务恢复

留下评论

error: Content is protected !!