2016-07-12 11:58:15 +02:00
# Harbor upgrade and database migration guide
2016-06-03 12:01:07 +02:00
2018-04-16 13:33:42 +02:00
When upgrading your existing Habor instance to a newer version, you may need to migrate the data in your database and the settings in harbor.cfg. Refer to [change log ](../tools/migration/changelog.md ) to find out whether there is any change in the database. If there is, you should go through the database migration process. Since the migration may alter the database schema and the settings of harbor.cfg, you should **always** back up your data before any migration.
2016-05-09 08:11:34 +02:00
2016-07-12 11:58:15 +02:00
*If your install Harbor for the first time, or the database version is the same as that of the lastest version, you do not need any database migration.*
2016-05-09 08:11:34 +02:00
2018-04-16 13:33:42 +02:00
**NOTE:**
- From v1.5.0 on, the migration tool add support for the harbor.cfg migration, which supports upgrade from v1.2.x, v1.3.x and v1.4.x.
2017-08-07 08:38:10 +02:00
- From v1.2 on, you need to use the release version as the tag of the migrator image. 'latest' is no longer used for new release.
2016-06-28 10:49:08 +02:00
2017-08-07 08:38:10 +02:00
- You must back up your data before any data migration.
2016-06-28 10:49:08 +02:00
2018-01-11 08:50:26 +01:00
- To migrate harbor OVA, please refer [migrate OVA guide ](migrate_ova_guide.md )
2016-07-12 11:58:15 +02:00
### Upgrading Harbor and migrating data
2017-01-23 14:17:06 +01:00
1. Log in to the host that Harbor runs on, stop and remove existing Harbor instance if it is still running:
2016-06-03 12:01:07 +02:00
2017-04-24 10:44:02 +02:00
```
2017-01-04 11:45:26 +01:00
cd harbor
2016-06-03 12:01:07 +02:00
docker-compose down
```
2016-07-12 11:58:15 +02:00
2017-01-23 14:17:06 +01:00
2. Back up Harbor's current files so that you can roll back to the current version when it is necessary.
2016-07-12 11:58:15 +02:00
```sh
2017-01-04 11:45:26 +01:00
cd ..
2017-08-07 08:38:10 +02:00
mv harbor /my_backup_dir/harbor
2016-07-13 09:42:47 +02:00
```
2017-01-23 14:17:06 +01:00
3. Get the lastest Harbor release package from Github:
2017-01-04 11:45:26 +01:00
https://github.com/vmware/harbor/releases
2017-04-24 10:44:02 +02:00
2018-04-16 13:33:42 +02:00
4. Before upgrading Harbor, perform migration first. The migration tool is delivered as a docker image, so you should pull the image from docker hub. Replace [tag] with the release version of Harbor (e.g. v1.5.0) in the below command:
2016-07-12 11:58:15 +02:00
```
2018-04-16 13:33:42 +02:00
docker pull vmware/harbor-migrator:[tag]
2016-07-12 11:58:15 +02:00
```
2018-04-16 13:33:42 +02:00
5. Back up database/harbor.cfg to a directory such as `/path/to/backup` . You need to create the directory if it does not exist. Also, note that the username and password to access the db are provided via environment variable "DB_USR" and "DB_PWD".
2018-01-08 10:40:47 +01:00
**NOTE:** Upgrade from harbor 1.2 or older to harbor 1.3 must use `vmware/migratorharbor-db-migrator:1.2` . Because DB engine replaced by MariaDB in harbor 1.3
2016-06-03 12:01:07 +02:00
```
2018-04-16 13:33:42 +02:00
docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg -v ${backup_path}:/harbor-migration/backup vmware/harbor-migrator:[tag] backup
```
**NOTE:** By default, the migrator handles the backup for DB or CFG. If you want to backup DB or CFG only, refer to the following commands:
```
docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${backup_path}:/harbor-migration/backup vmware/harbor-migrator:[tag] --db backup
```
```
docker run -it --rm -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg -v ${backup_path}:/harbor-migration/backup vmware/harbor-migrator:[tag] --cfg backup
```
6. Upgrade database schema, harbor.cfg and migrate data.
```
docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg vmware/harbor-migrator:[tag] up
2016-06-03 12:01:07 +02:00
```
2018-04-16 13:33:42 +02:00
**NOTE:** By default, the migrator handles the upgrade for DB and CFG. If you want to upgrade DB or CFG only,
refer to the following commands:
```
docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql vmware/harbor-migrator:[tag] --db up
```
2016-06-03 12:01:07 +02:00
2016-07-12 11:58:15 +02:00
```
2018-04-16 13:33:42 +02:00
docker run -it --rm -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg vmware/harbor-migrator:[tag] --cfg up
2016-07-12 11:58:15 +02:00
```
2016-06-03 12:01:07 +02:00
2018-01-08 10:40:47 +01:00
**NOTE:** Some errors like
```
[ERROR] Missing system table mysql.roles_mapping; please run mysql_upgrade to create it
[ERROR] Incorrect definition of table mysql.event: expected column 'sql_mode' at position ... ...
[ERROR] mysqld: Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
[Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 1146: Table 'mysql.gtid_slave_pos' doesn't exist
```
will be occurred during upgrading from harbor 1.2 to harbor 1.3, just ignore them if harbor can start successfully.
2018-04-16 13:33:42 +02:00
7. Under the directory `./harbor` , run the `./install.sh` script to install the new Harbor instance. If you choose to install Harbor with components like Notary and/or Clair, refer to [Installation & Configuration Guide ](../docs/installation_guide.md ) for more information.
2017-04-24 10:44:02 +02:00
2016-07-13 09:42:47 +02:00
### Roll back from an upgrade
For any reason, if you want to roll back to the previous version of Harbor, follow the below steps:
1. Stop and remove the current Harbor service if it is still running.
2017-04-24 10:44:02 +02:00
```
2017-01-04 11:45:26 +01:00
cd harbor
2016-07-13 09:42:47 +02:00
docker-compose down
```
2018-01-08 10:40:47 +01:00
2. Restore database from backup file in `/path/to/backup` .
2016-07-13 09:42:47 +02:00
```
2018-04-16 13:33:42 +02:00
docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg -v ${backup_path}:/harbor-migration/backup vmware/harbor-migrator:[tag] restore
```
**NOTE:** By default, the migrator handles the restore for DB and CFG. If you want to restore DB or CFG only,
refer to the following commands:
2016-07-13 09:42:47 +02:00
```
2018-04-16 13:33:42 +02:00
docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${backup_path}:/harbor-migration/backup vmware/harbor-migrator:[tag] --db restore
```
```
docker run -it --rm -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg -v ${backup_path}:/harbor-migration/backup vmware/harbor-migrator:[tag] --cfg restore
```
2018-01-29 06:06:49 +01:00
**NOTE:** Rollback from harbor 1.3 to harbor 1.2 should delete `/data/database` directory first, then create new database directory `docker-compose up -d && docker-compose stop` . And must use `vmware/harbor-db-migrator:1.2` to restore. Because of DB engine change.
2016-07-13 09:42:47 +02:00
2017-01-23 14:17:06 +01:00
3. Remove current Harbor instance.
2017-04-24 10:44:02 +02:00
```
2016-07-13 09:42:47 +02:00
rm -rf harbor
```
2017-04-24 10:44:02 +02:00
4. Restore the older version package of Harbor.
2016-07-13 09:42:47 +02:00
```sh
2017-08-07 08:38:10 +02:00
mv /my_backup_dir/harbor harbor
2016-07-13 09:42:47 +02:00
```
2017-01-23 14:17:06 +01:00
5. Restart Harbor service using the previous configuration.
If previous version of Harbor was installed by a release build:
2016-07-13 09:42:47 +02:00
```sh
2017-01-04 11:45:26 +01:00
cd harbor
2017-01-23 14:17:06 +01:00
./install.sh
2016-07-13 09:42:47 +02:00
```
2018-01-08 10:40:47 +01:00
**Note:** If you choose to install Harbor with components like Notary and/or Clair, refer to [Installation & Configuration Guide ](../docs/installation_guide.md ) for more information.
2017-01-23 14:17:06 +01:00
2017-01-23 14:24:25 +01:00
If your previous version of Harbor was installed from source code:
2017-01-04 11:45:26 +01:00
```sh
cd harbor
2017-01-23 14:17:06 +01:00
docker-compose up --build -d
2017-01-04 11:45:26 +01:00
```
2017-04-24 10:44:02 +02:00
2016-07-12 11:58:15 +02:00
### Migration tool reference
- Use `test` command to test mysql connection:
2016-05-13 12:05:27 +02:00
2018-04-16 13:33:42 +02:00
```docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg vmware/harbor-migrator:[tag] test```