Want to deploy your JVM, Node.js and Go apps effortlessly to AWS? Try our service Boxfuse

Command-line tool

The Flyway command-line tool is a standalone Flyway distribution. It runs on Windows, macOS and Linux and it is primarily meant for users who wish to migrate their database from the command-line without having to integrate Flyway into their applications nor having to install a build tool.

Download

Windows flyway-commandline-5.1.1-windows-x64.zip
macOS flyway-commandline-5.1.1-macosx-x64.tar.gz
Linux flyway-commandline-5.1.1-linux-x64.tar.gz
Docker
> docker pull boxfuse/flyway
Go to Docker Hub for detailed usage instructions.
All platforms flyway-commandline-5.1.1.zip (requires at Java 8 JRE)
flyway-commandline-5.1.1.tar.gz (requires at Java 8 without JRE)
Sourcesflyway-commandline-5.1.1-sources.jar

Installation

Download the Flyway Command-line distribution for your platform and extract it.

The newly extracted directory contains the following structure:

directory structure

Now simply add it to the PATH and the flyway command will be available from anywhere on your system.

Usage

> flyway [options] command

Commands

Name Description
migrate Migrates the database
clean Drops all objects in the configured schemas
info Prints the details and status information about all the migrations
validate Validates the applied migrations against the ones available on the classpath
baseline Baselines an existing database, excluding all migrations up to and including baselineVersion
repair Repairs the schema history table

JDBC drivers

In order to connect with your database, Flyway needs the appropriate JDBC driver to be available in its drivers directory.

Flyway ships with JDBC drivers for the following databases by default:

  • SQL Server
  • MySQL
  • MariaDB
  • PostgreSQL
  • Sybase ASE
  • H2
  • HSQLDB
  • Derby
  • SQLite

If your database is not listed here, you need to download its JDBC driver and place it in the drivers directory yourself.

Configuration

The Flyway Command-line tool can be configured in a wide variety of ways. You can use config files, environment variables and command-line parameters. These different means of configuration can be combined at will.

Config files

Config files are supported by the Flyway command-line tool. If you are not familiar with them, check out the Flyway config file structure and settings reference first.

Flyway will search for and automatically load the following config files if present:

  • <install-dir>/conf/flyway.conf
  • <user-home>/flyway.conf
  • <current-dir>/flyway.conf

It is also possible to point Flyway at one or more additional config files. This is achieved by supplying the command line parameter -configFiles= as follows:

> flyway -configFiles=path/to/myAlternativeConfig.conf migrate

To pass in multiple files, separate their names with commas:

> flyway -configFiles=path/to/myAlternativeConfig.conf,other.conf migrate

Relative paths are relative to the current working directory.

Alternatively you can also use the FLYWAY_CONFIG_FILES environment variable for this. When set it will take preference over the command-line parameter.

> export FLYWAY_CONFIG_FILES=path/to/myAlternativeConfig.conf,other.conf
> flyway migrate

By default Flyway loads configuration files using UTF-8. To use an alternative encoding, use the command line parameter -configFileEncoding= as follows:

> flyway -configFileEncoding=ISO-8859-1 migrate

Alternatively you can also use the FLYWAY_CONFIG_FILE_ENCODING environment variable for this. When set it will take preference over the command-line parameter.

> export FLYWAY_CONFIG_FILE_ENCODING=ISO-8859-1

Environment Variables

To make it ease to work with cloud and containerized environments, Flyway also supports configuration via environment variables. Check out the Flyway environment variable reference for details.

Command-line Arguments

Finally, Flyway can also be configured by passing arguments directly from the command-line:

> flyway -user=myuser -schemas=schema1,schema2 -placeholders.keyABC=valueXYZ migrate

Overriding order

The Flyway command-line tool has been carefully designed to load and override configuration in a sensible order.

Settings are loaded in the following order (higher items in the list take precedence over lower ones):

  1. Command-line arguments
  2. Environment variables
  3. Custom config files
  4. <current-dir>/flyway.conf
  5. <user-home>/flyway.conf
  6. <install-dir>/conf/flyway.conf
  7. Flyway command-line defaults

The means that if for example flyway.url is both present in a config file and passed as -url= from the command-line, the command-line argument will take precedence and be used.

Credentials

If you do not supply a database user or password via any of the means above, you will be prompted to enter them:

Database user: myuser
Database password:

If you want Flyway to connect to your database without a user or password, you can suppress prompting by adding the -n flag.

Java Arguments

If need to to pass custom arguments to Flyway’s JVM, you can do so by setting the JAVA_ARGS environment variable. They will then automatically be taken into account when launching Flyway. This is particularly useful when needing to set JVM system properties.

Output

All debug, info and warning output is sent to stdout. All errors are sent to stderr.

Debug output

Add -X to the argument list to also print debug output.

Quiet mode

Add -q to the argument list to suppress all output, except for errors and warnings.

Command-line: migrate