Skip to content

Database Migration⚓︎

Note

  • Be sure to backup before migration.
  • Starting from v2.5, MySQL >= 5.7 is required
  • It is recommended to use external databases for convenient expansion and upgrade.

1 Database Requirements⚓︎

  • Version requirements for MySQL/MariaDB and Redis are as follows:
DB Version Cache Version
MySQL >= 5.7 Redis >= 6.0
MariaDB >= 10.6 - -

2 Operation Process⚓︎

Backup Database

cp -r /opt/jumpserver /opt/jumpserver_bak
mysqldump -uroot -p jumpserver > /opt/jumpserver.sql
docker exec -it jms_db /bin/bash
cd /opt/jumpserver/data
mysqldump -uroot -p jumpserver > /opt/jumpserver.sql
cd /opt/jumpserver
./jms backup_db
docker exec jms_db /bin/bash -c 'mysqldump -uroot -ppassword jumpserver > /opt/jumpserver.sql'
docker cp jms_db:/opt/jumpserver.sql /opt/
docker-compose exec -T db /bin/bash -c 'mysqldump -uroot -ppassword jumpserver > /opt/jumpserver.sql'
docker cp jms_db:/opt/jumpserver.sql /opt/
cd /opt/jumpserver-installer-version
./jmsctl.sh backup_db

Modify Database Character Set

if grep -q 'COLLATE=utf8_bin' /opt/jumpserver.sql; then
    cp /opt/jumpserver.sql /opt/jumpserver_bak.sql
    sed -i 's@COLLATE utf8_bin@@g' /opt/jumpserver.sql
else
    echo "Database character set is correct";
fi

Migrate to New Server

  • Copy the exported /opt/jumpserver.sql to the new server.
  • The following example takes migration to another CentOS7 server as an example. In actual operation, please replace the corresponding commands as needed.
# Install MariaDB
yum -y install mariadb-server
systemctl start mariadb
systemctl enable mariadb

# Import database
mysql -uroot < /opt/jumpserver.sql

# Verify import success
mysql -uroot -e 'use jumpserver; select * from users_user;'
# Install MySQL 5.7
yum -y install mysql-community-server

# Start MySQL
systemctl start mysqld
systemctl enable mysqld

# Import database
mysql -uroot -p < /opt/jumpserver.sql

# Verify import success
mysql -uroot -p -e 'use jumpserver; select * from users_user;'
# Install MySQL 8.0
yum -y install mysql-community-server

# Start MySQL
systemctl start mysqld
systemctl enable mysqld

# Reset password
grep 'password' /var/log/mysqld.log
mysql -uroot -p

# Import database
mysql -uroot -p < /opt/jumpserver.sql

# Verify import success
mysql -uroot -p -e 'use jumpserver; select * from users_user;'
# Start database container
docker run -d --name jms_db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql:5.7

# Import database
docker cp /opt/jumpserver.sql jms_db:/opt/
docker exec -it jms_db bash
mysql -uroot -p < /opt/jumpserver.sql
exit
  • Start jms_core and check jumpserver.log for errors.

Startup Error: Cannot add foreign key constraint

# Check database encoding
mysql -uroot -p
select @@collation_database, @@character_set_database;

# Modify database encoding
ALTER DATABASE jumpserver CHARACTER SET utf8 COLLATE utf8_general_ci;