Getting your data from MySQL to Metabase can be a pain. Managing pipelines for all your data sources just isn’t sustainable, but your reporting can’t be put on hold while you wait for IT or Engineering to get to your ticket. With Panoply, you can eliminate that hassle—and all that wasted time. Set up code-free connections to both MySQL. By default it is H2DB. By running migration tool you copy all current data and switch data source from H2 to MySQL. After that H2DB is not loaded by PMS and is kept as is and contains all data that was there by the migration time. Even though it is impossible to migrate data back from MySQL to H2, it is still possible to switch data source back. Migrating from using the H2 database to MySQL or Postgres If you decide to use the default application database (H2) when you initially start using Metabase, but later decide that you’d like to switch to a more production-ready database such as MySQL or Postgres, we make the transition easy for you.
- Metabase Migrate H2 To Mysql Server
- Metabase Migrate H2 To Mysql Download
- Metabase Migrate H2 To Mysql Online
v0.39.0.1 / Operations Guide / Running Metabase on Docker
Metabase Migrate H2 To Mysql Server
Metabase provides an official Docker image via Dockerhub that can be used for deployments on any system that is running Docker.
If you’re trying to upgrade your Metabase version on Docker, check out these upgrading instructions.
Launching Metabase on a new container
Here’s a quick one-liner to get you off the ground (please note, we recommend further configuration for production deployments below):
This will launch a Metabase server on port 3000 by default. You can use docker logs -f metabase
to follow the rest of the initialization progress. Once the Metabase startup completes you can access the app at localhost:3000
Since Docker containers have their own ports and we just map them to the system ports as needed it’s easy to move Metabase onto a different system port if you wish. For example running Metabase on port 12345:
Mounting a mapped file storage volume
In its default configuration Metabase uses the local filesystem to run an H2 embedded database to store its own application data. The end result is that your Metabase application data will be on disk inside your container and lost if you ever remove the container.
To persist your data outside of the container and make it available for use between container launches we can mount a local file path inside our container.
Now when you launch your container we are telling Metabase to use the database file at ~/metabase-data/metabase.db
instead of its default location and we are mounting that folder from our local filesystem into the container.
Getting your config back if you stopped your container
If you have previously run and configured your Metabase using the local Database and then stopped the container, your data will still be there unless you deleted the container with the docker rm
command. To recover your previous configuration:
- Find the stopped container using the
docker ps -a
command.It will look something like this:
Once you have identified the stopped container with your configuration in it, save the container ID from the left most column for the next step.
- Use
docker commit
to create a new custom docker image from the stopped container containing your configuration.
- Run your new image using
docker run
to get up and running again.Hopefully you have your previously configured Metabase Installation back. If it’s not the one you expected try a different stopped container and do these steps again.
Using Postgres as the Metabase application database
If you are ready to completely move off the H2 embedded database for running Metabase and prefer to use Postgres we’ve got that covered too.
In this scenario all you need to do is make sure you launch Metabase with the correct environment variables containing your Postgres database connection details and you’re all set. For example:
Keep in mind that Metabase will be connecting from within your docker container, so make sure that either you’re using a fully qualified hostname or that you’ve set a proper entry in your container’s /etc/hosts file
.
Migrating from H2 to Postgres as the Metabase application database
For general information, see instructions for migrating from H2 to MySQL or Postgres.
To migrate an existing Metabase container from an H2 application database to another database container (e.g. Postgres, MySQL), there are a few considerations to keep in mind:
- The target database container must be accessible (i.e. on an available network)
- The target database container must be supported (e.g. MySQL, Postgres)
- The existing H2 database should be mapped outside the running container
The migration process involves 2 main steps:
- Stop the existing Metabase container
- Run a new, temporary Metabase container to perform the migration
Using a Postgres container as the target, here’s an example invocation:
To further explain the example: in addition to specifying the target database connection details, set the MB_DB_FILE
environment variable for the source H2 database location, and pass the argument load-from-h2
to begin migrating.
Setting the Java Timezone
It’s best to set your Java timezone to match the timezone you’d like all your reports to come in. You can do this by simply specifying the JAVA_TIMEZONE
environment variable which is picked up by the Metabase launch script. For example:
Additional custom settings
While running Metabase on docker you can use any of the custom settings from Customizing the Metabase Jetty Webserver by setting environment variables on your docker run command.
In addition to the standard custom settings there are two docker specific environment variables MUID
and MGID
which are used to set the user and group IDs used by metabase when running in a docker container. These settings make it possible to match file permissions when files, such as the application database, are shared between the host and the container.
Here’s how to use a database file, owned by your account, that is stored in your home directory:
Now that you’ve installed Metabase, it’s time to set it up and connect it to your database.
Copying the application database
If you forgot to configure to the application database, it will be located at /metabase.db/metabase.db.mv.db
in the container. You can copy this whole directory out of the container using the following command (replacing CONTAINER_ID
with the actual container ID or name, metabase
if you named the container):
Download dialogue mice & touchpads driver. The DB contents will be left in a directory named metabase.db.Note that some older versions of metabase stored their db in a different default location.
Fixing OutOfMemoryErrors in some hosted environments
Metabase Migrate H2 To Mysql Download
On some hosts Metabase can fail to start with an error message like:
If that happens, you’ll need to set a JVM option to manually configure the maximum amount of memory the JVM uses for the heap. Referto these instructions for details on how to do that.
Adding external dependencies or plugins
To add external dependency JAR files such as the Oracle or Vertica JDBC drivers or 3rd-party Metabase drivers, you will need to create a plugins
directory in your host system and bind it so it is available to Metabase as the path /plugins
using either --mount
or -v
/--volume
. For example, if you have a directory named /path/to/plugins
on your host system, you can make its contents available to Metabase using the --mount
option as follows:
Metabase Migrate H2 To Mysql Online
Note that Metabase will use this directory to extract plugins bundled with the default Metabase distribution (such as drivers for various databases such as SQLite), thus it must be readable and writable by Docker.
Use Docker Secrets to hide the sensitive parameters
In order to keep your connection parameters hidden from plain sight, you can use Docker Secrets to put all parameters in files so Docker can read and load them in memory before the container is started.
This is an example of a docker-compose.yml
file to start a Metabase container with secrets to connect to a PostgreSQL database. Create 2 files (db_user.txt and db_password.txt) in the same directory as this yml
and fill them with any username and a secure password:
v0.39.0.1 / Operations Guide / Migrating From H2
If you decide to use the default application database (H2) when you initially start using Metabase, but later decide that you’d like to switch to a more production-ready database such as MySQL or Postgres, we make the transition easy for you.
Metabase provides a custom migration command for upgrading H2 application database files by copying their data to a new database. Here’s what you’ll want to do:
- Shutdown your Metabase instance so that it’s not running. This ensures no accidental data gets written to the db while migrating.
- Make a backup copy of your H2 application database by following the instructions in Backing up Metabase Application Data. Safety first!
- Run the Metabase data migration command using the appropriate environment variables for the target database you want to migrate to. You can find details about specifying MySQL and Postgres databases at Configuring the application database. Here’s an example of migrating to Postgres:
It is expected that you will run the command against a brand-new (empty!) database; Metabase will handle all of the work of creating the database schema and migrating the data for you.
Notes
- Avoid upgrading and migrating at the same time, since it can cause problems with one of database schemas not matching.
- It is required that you can connect to the target MySQL or Postgres database in whatever environment you are running this migration command in. So, if you are attempting to move the data to a cloud database, make sure you take that into consideration.
- For MySQL or MariaDB, the minimum recommended version is MySQL 5.7.7 and MariaDB 10.2.2, while the following is required:
utf8mb4_unicode_ci
collation,utf8mb4
character set, andinnodb_large_prefix=ON
. - For PostgreSQL, the minimum version is PostgreSQL 9.4, since the code that handles these migrations uses a command that is only available in version 9.4 or newer.
- H2 automatically adds a
.h2.db
or.mv.db
extension to the database path you specify, so make sure the path to the DB file you pass to the command does not include it. For example, if you have a file named/path/to/metabase.db.h2.db
, call the command withload-from-h2 /path/to/metabase.db
.