Migrating to MySQL

On this page

Still need help?

The Atlassian Community is here for you.

Ask the community

This page describes how to use Fisheye/Crucible with both MySQL Enterprise Server and MySQL Community Server. Note that when they are used together, Fisheye and Crucible share the same external database.

To switch to a MySQL database, install MySQL and then follow the steps below. Please note that during the migration of database servers, the Fisheye/Crucible instance will not be available to users or to external API clients.

(warning) Note that for Fisheye 2.9+, the JDBC driver for MySQL is not bundled with Fisheye/Crucible (due to licensing restrictions).

MySQL 5.6.x and 5.7.x compatibility

For MySQL 5.6, Fisheye/Crucible requires at least version 5.6.11.

For MySQL 5.7, Fisheye/Crucible requires at least version 5.7.5.

MySQL JDBC Connector compatibility

MySQL JDBC Connector 8.0.x is known to cause problems with the ActiveObjects library, see AO-3462 bug for details.

We recommend using version 5.1.x of the driver.


Prerequisites

To start with:

  1. Install a supported version of MySQL. Check the Supported platforms page for the exact versions that are supported. Note that MariaDB and Percona variants of MySQL are not supported, and are known to cause issues when used with Fisheye.
  2. Download and install the JDBC driver, if necessary. Note that for Fisheye 2.9+, the JDBC driver for MySQL is not bundled with Fisheye/Crucible (due to licensing restrictions).
    1. Download the MySQL Connector/J JDBC driver from the MySQL download website.
    2. Expand the downloaded zip/tar.gz file.
    3. Copy the mysql-connector-java-x.y.zz-bin.jar file to your FISHEYE_INST/lib directory. If the lib/ directory doesn't already exist, you will need to create it. 
    4. Restart Fisheye/Crucible.

Step 1. Create a MySQL database

Set up a MySQL database as follows:

  • Configure the database to use the InnoDB storage engine
  • Create a database on MySQL for Fisheye/Crucible to use
  • Create a Fisheye user on the database
  • Configure the database to use utf8 character set encoding
  • Configure the database to use utf8_bin collation (to ensure case sensitivity).

Here is an example of how to do that. When Fisheye/Crucible and MySQL run on the same machine (accessible through localhost), issue the following commands (replacing fisheyeuser and password with you own values):

mysql> SET GLOBAL storage_engine = 'InnoDB';
mysql> CREATE DATABASE fisheye CHARACTER SET utf8 COLLATE utf8_bin;
mysql> GRANT ALL PRIVILEGES ON fisheye.* TO 'fisheyeuser'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
mysql> QUIT

For MySQL 5.6 and later, replace the first statement (SET GLOBAL storage_engine = 'InnoDB') with the following:

mysql> SET GLOBAL default_storage_engine = 'InnoDB';

This creates an empty MySQL database with the name fisheye, and a user that can log in from the host that FIshEye is running on who has full access to the newly created database. In particular, the user should be allowed to create and drop tables, indexes and other constraints.

You will also need to set the Server Characterset to utf8. This can be done by adding the following in my.ini for Windows or my.cnf for other operating systems (create the file at /etc/my.cnf if it doesn't already exist). It has to be declared in the Server section, which is the section after [mysqld]:

[mysqld]
character-set-server=utf8

You'll need to restart MySQL for that change to take effect. Now use the status command to verify database character encoding information:

mysql> use fisheye;
mysql> status;

Screenshot: Using the MySQL status command

Both the server and database character set must be UTF-8. You may not initially notice a problem because of the characterset overlap but this is indeed a requirement. We've verified that when using a charset such as Swedish 7 bit as the server charset and UTF-8 as the database charset data corruption is easy to reproduce and obvious.  This proves that the server character set is as important and that data corruption is possible when there is a charset mismatch. We absolutely cannot suggest a configuration where the server charset and database charset are anything other than UTF-8.


Step 2. Configure Fisheye/Crucible to use MySQL, and migrate data

In order to migrate to a different database backend, you must create a backup of sql data, configure the database and finally import the data using a backup restoration process. This can be done from either the Fisheye/Crucible administration console, which streamlines the process, or using the command line tool which Fisheye/Crucible provides.

Option 1: Migrate using the UI (Fisheye/Crucible Administration)

  1. Navigate to the Database page in Fisheye/Crucible's Administration console.

    To log in to the Admin area, you can either:

    • click Administration at the foot of the page. 
    • navigate to http://HOSTNAME:8060/admin/, where HOSTNAME is the name of the server on which you installed Fisheye.

    Once logged in as an administrator you can also get to the Admin area by clicking the 'cog' menu in the Fisheye/Crucible header, and choosing Administration.

  2. Choose Edit > Test Connection to verify that Fisheye/Crucible can log in to the database.
  3. Select MySQL from the database type.
  4. Fill in the appropriate fields, replacing the host, port, database name, username and password using the same connection details as used when creating the MySQL database in Step 1 above.
  5. Click Test Connection to validate the values.

    Screenshot: Testing the connection



    If this fails, verify that you have the MySQL JDBC driver .jar file in the classpath (see Prerequisites section above for instructions on how to install the driver). Also, ensure that the database user can log in to the database from the machine that Fisheye/Crucible is running on and that all the required privileges are present.
  6. Click Save & Migrate to start the migration process.

    During the migration process (which will take several minutes, depending on the size of your database and network throughput), the product will be inaccessible to users and external API clients. Users will see a maintenance screen that informs them of the process. Should the migration fail for any reason, Fisheye/Crucible will not switch to the new database, and will report on the encountered problems. Because the destination database may now contain some, but not yet all data, drop all tables, indexes and constraints before attempting a new migration.

    Screenshot: Migrating the database

Option 2: Migrate using the command line

  1. Create a backup of the sql data from the Fisheye/Crucible instance. Read Backing up and restoring Fisheye data and Backing up and restoring Crucible data for information on how to create a backup.
  2. Run the following command from the <FishEye installation directory>/bin directory:

    $ ./fisheyectl.sh restore --sql \
            --file /path/to/backup.zip \
            --dbtype mysql \
            --jdbcurl jdbc:mysql://hostname/dbname \
            --username crucible \
            --password password
    
  3. When the import is complete, Fisheye/Crucible can be started and will use MySQL.
Last modified on Mar 28, 2023

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.