Migrating RMsis from H2 to MySQL

Introduction

There have been some requests, where RMsis users entered some critical data in the during the evaluation period and at a later date wish to migrate to a production ready DataBase.

The process is not straightforward and we have worked out a solution, which is presented below.

However, specific installations may have some unique issues. If you face any such issue, please contact [email protected]. Also see the notes at the end of this article.

Supported Platforms

Linux OS has been used in the procedure described below. For migration on MS Windows platform, please use windows versions of all the listed tools. One of our customers has migrated on Windows 7 Platform and shared the following additional points: When we installed SQuirrel SQL on our Windows 7 machine, some plugins where not correctly installed although they were selected for installation in the installer. Especially "Copy Table" did not show up in the context menu. After manually installing the plugins in the right place and restarting the tool the context menu was there.

Resources / Tools Required

You must have installed on your machine. SQuirrel SQL (http://squirrel-sql.sourceforge.net/) VIM JDBC database drivers -1.3.160.jar -connector-java-5.1.6.jar Blank RMsis database (be sure you use correct database version) rmsis_164_blank. for RMsis-1.6.4 rmsis_167_blank.sql for RMsis-1.6.7 rmsis_168_blank.sql for RMsis-1.6.8 rmsis_170_blank.sql for RMsis-1.7.0 rmsis_171_r168_blank.sql for RMsis-1.7.1-r168 rmsis_171_r183_blank.sql for RMsis-1.7.1-r183 rmsis_171_r200_blank.sql for RMsis-1.7.1-r200 rmsis_178_r206_blank.sql for RMsis-1.7.8-r206 rmsis_186_r297_blank.sql for RMsis-1.8.6-r297

Perquisite

Jira admin access MySQL root access

Procedure

1. Installing SQuirrel SQL a. Download SQuirrel SQL from link given above b. Follow installation instructions given on http://www.squirrelsql.org/#installation c. Make sure, you enable all the plugins, specially H2 and MySQL database support d. Copy provided H2 and MySQL driver file in /Contents/Resources/Java/lib directory 2. Stop your JIRA instance 3. Take RMsis database backup a. Go to /rmsis/db/h2//rmsis.h2.db b. Copy this file and put in your i. we will use this folder for most of our activities, so make sure it doesn't contain any other file ii. creating a new folder is good idea 4. Create two MySQL databases a. Only one will be used by RMsis, and you can drop other one later b. we will assume "rmsis_db_1" and "rmsis_db_2" as two database with user name "rmsis" and password "rmsis" c. You can choose different parameters, if you wish 5. Start SQuirrel SQL (follow instructions given on installation page) 6. Connecting to your H2 database file, placed in your work folder a. Go to Alias > New Alias b. Put rmsis-h2 as alias name c. From driver select "H2 Embedded" d. In URL replace with path to /rmsis e. User Name - "sa" f. Leave other password blank g. Click "Test" for testing your connection, if it fine, press save alias by clicking "OK".

7. Preparing H2 database for migration a. In alias section click on rmsis-h2 (connect to it) b. On left hand pane select rmsis-h2 > RMSIS > PUBLIC c. Go to SQL pane and write following queries, one per line i. ALTER TABLE PROJECT ALTER COLUMN VERSION RENAME TO VERSION_NEW; ii. ALTER TABLE TEST_CASE ALTER COLUMN VERSION RENAME TO VERSION_NEW; iii. ALTER TABLE REQUIREMENT_HIERARCHY ALTER COLUMN LEVEL RENAME TO LEVEL_NEW; (Only for RMsis-1.7.1- r183 and earlier versions) iv. ALTER TABLE REQUIREMENT_BASELINE ALTER COLUMN LEVEL RENAME TO LEVEL_NEW; (Only for RMsis-1.7.1-r183 and earlier versions) v. ALTER TABLE ATTACHMENT ALTER COLUMN SIZE RENAME TO SIZE_NEW; (Only for RMsis-1.7.1-r183 and earlier versions) vi. ALTER TABLE REPORTING ALTER COLUMN DOMAIN RENAME TO DOMAIN_NEW; vii. ALTER TABLE TEST_STEP ALTER COLUMN ACTION RENAME TO ACTION_NEW; (Only for RMsis-1.7.1-r168 and later versions) viii. Update rmsis_sync_status SET LAST_SYNC_AT='1980-01-01 00:00:00' WHERE LAST_SYNC_AT < '1980-01-01 00:00:00'; (O nly for RMsis-1.8.6-r297) d. Run queries (CTRL + ENTER) e. Now your H2 database is ready for migration

8. Connecting to MySQL database

a. Go to Alias > New Alias b. Put rmsis-mysql as alias name c. Select "MySQL Driver" for driver d. In URL put jdbc:mysql://:/?useUnicode=true&characterSetResults=UTF-8&characterEncoding=UTF8 i. replace with MySQL host name, localhost if it is running on localhost, ii. replace with MySQL port, 3306 is default iii. replace with rmsis_db_1 (created in step 4) e. Put user name and password, that you can created in step 4 f. Test connection and save it once it is done.

9. Copying database

a. Go to Alias pane b. Connect to "rmsis-h2" c. Go to rmsis-h2 > RMSIS > PUBLIC > TABLE d. Right click on TABLE and select "Copy Table" from context menu

10. Pasting database

a. Go to Alias pane b. Connect to "rmsis-mysql" c. Go to "rmsis-mysql > rmsis_db_1 > TABLE d. Right click on TABLE and select "Paste Table" from context menu e. it will take some time according to size of your database f. once it is done successfully, close SQuirrel SQL Client

11. Preparing MySQL database from step 10

a. Open terminal and connect to rmsis_db_1 using MySQL i. mysql -u -p rmsis_db_1 b. Run following queries i. ALTER TABLE `PROJECT` CHANGE `VERSION_NEW` `VERSION` INT( 11 ) NULL DEFAULT NULL; ii. ALTER TABLE `TEST_CASE` CHANGE `VERSION_NEW` `VERSION` INT( 11 ) NULL DEFAULT NULL; iii. ALTER TABLE `REQUIREMENT_HIERARCHY` CHANGE `LEVEL_NEW` `LEVEL` INT( 11 ) NULL DEFAULT NULL; (RMsis- 1.7.1-r183 and below) iv. ALTER TABLE `REQUIREMENT_BASELINE` CHANGE `LEVEL_NEW` `LEVEL` INT( 11 ) NULL DEFAULT NULL; (RMsis- 1.7.1-r183 and below) v. ALTER TABLE `ATTACHMENT` CHANGE `SIZE_NEW` `SIZE` BIGINT( 20 ) NULL DEFAULT NULL; (RMsis-1.7.1-r183 and below) vi. ALTER TABLE `REPORTING` CHANGE `DOMAIN_NEW` `DOMAIN` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; vii. ALTER TABLE `TEST_STEP` CHANGE `ACTION_NEW` `ACTION` LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci; (Only for RMsis-1.7.1-r168 and above) c. Now close MySQL connection d. Go to your work folder (created in step 3), and dump your RMsis database MySQL file (rmsis_db_1) i. mysqldump -u -p --no-create-info --skip-add-drop-table rmsis_db_1 > rmsis_db_1.sql e. Open this SQL file in VIM i. Run command 1. :%s/`\(\w\+\)`/\L&/g (it is to change case of table and column name) ii. Save and exit editor 1. :wq

12. Loading blank RMsis database to second RMsis database (created in step 4, rmsis_db_2)

a. Copy RMsis blank database (rmsis_blank_db.sql) attached to work folder b. Run command i. mysql -u -p rmsis_db_2 < rmsis_blank_db.sql ii. replace , as required 13. Loading data to second MySQL database (using sql file created in step 11)

a. Run command i. mysql -u -p rmsis_db_2 < rmsis_db_1.sql ii. replace , as required

14. You are almost ready now ...

15. Replacing database pointer in RMsis

a. Start your Jira Server (switched off in step 2) b. Login using Administration c. Go to RMsis > RMsis Configuration (click on down arrow near RMsis tab for RMsis configuration) d. Open "Database Configuration" tab e. Change "Database Connection" to External f. Database Type, "MySQL" g. Hostname, your MySQL server host name (localhost if it runs local) h. Port, your MySQL server port (3306 is default for MySQL) i. Database, rmsis_db_2 (replace it, if you used different name for second database in step 4) j. Username, database username k. Password, database password l. Save configuration

16. It will take some time to start RMsis server again, once it is done press "Finish"

17. Go to RMsis, and test if everything is fine.

Have Issues ?

If the process breaks down in between or if you have any issues, do not proceed and contact [email protected]. looking at the complexity of migration, it may not be practical to exchange information on mails. At the minimum, we will need mechanism to view your screen, either through WebEx or Skype. Please ensure that this is possible, before contacting support.