3. Liquibase 安装与配置:下载安装、环境变量、liquibase.properties 文件详解、数据库驱动配置
Liquibase 的安装与配置是数据库迁移工作的起点。本章将系统讲解从下载安装、环境变量设置到核心配置文件 liquibase.properties 的详细参数,以及数据库驱动的正确配置方法,确保你能够快速搭建一个可用的 Liquibase 运行环境。
3.1 下载与安装
Liquibase 提供多种安装方式,推荐使用官方压缩包或包管理器进行安装。以下是主流安装途径的对比:
| 安装方式 | 适用场景 | 命令/步骤 |
|---|---|---|
| 官方压缩包 | 所有平台,手动控制版本 | 下载 liquibase-<version>.tar.gz 或 .zip,解压至目标目录 |
| Homebrew (macOS) | macOS 开发者 | brew install liquibase |
| Chocolatey (Windows) | Windows 开发者 | choco install liquibase |
| Docker | 容器化环境、CI/CD | docker pull liquibase/liquibase |
推荐做法: 生产环境建议使用官方压缩包安装,便于版本锁定和路径管理;开发环境可使用包管理器快速部署。
以官方压缩包安装为例,步骤如下:
- 访问 Liquibase 官方下载页面,选择对应操作系统的最新稳定版。
- 解压到指定目录,例如
/opt/liquibase(Linux/macOS)或C:\liquibase(Windows)。 - 验证安装:在终端执行
liquibase --version,应显示版本号信息。
# Linux/macOS 示例
$ tar -xzf liquibase-4.27.0.tar.gz -C /opt/liquibase
$ /opt/liquibase/liquibase --version
####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ ___ ___ ##
## | | | |/ _` | | | | | '_ \ / _ \/ __| ##
## | |___| | (_| | |_| | | |_) | __/\__ \ ##
## \_____/_|\__, |\__,_|_|_.__/ \___||___/ ##
## | | ##
## |_| ##
####################################################
Liquibase Version: 4.27.0
3.2 环境变量配置
为方便在任意路径下调用 Liquibase 命令,需要将 Liquibase 的 bin 目录添加到系统 PATH 环境变量中。同时,建议设置 LIQUIBASE_HOME 变量,便于其他工具引用。
| 环境变量 | 说明 | 示例值 |
|---|---|---|
LIQUIBASE_HOME |
Liquibase 安装根目录 | /opt/liquibase |
PATH |
追加 Liquibase bin 目录 | $PATH:$LIQUIBASE_HOME |
LIQUIBASE_CLASSPATH |
数据库驱动 JAR 文件路径(可选) | /opt/liquibase/lib/mysql-connector-j-8.2.0.jar |
# Linux/macOS 在 ~/.bashrc 或 ~/.zshrc 中添加
export LIQUIBASE_HOME=/opt/liquibase
export PATH=$PATH:$LIQUIBASE_HOME
export LIQUIBASE_CLASSPATH=$LIQUIBASE_HOME/lib
# Windows 在系统环境变量中设置
LIQUIBASE_HOME=C:\liquibase
PATH=%PATH%;%LIQUIBASE_HOME%
LIQUIBASE_CLASSPATH=%LIQUIBASE_HOME%\lib
注意: 如果使用 Docker 方式运行,无需配置本地环境变量,但需通过
-e 参数或 Docker Compose 传递环境变量到容器内。
3.3 liquibase.properties 文件详解
liquibase.properties 是 Liquibase 的核心配置文件,用于集中管理数据库连接、变更日志路径、驱动类等参数。该文件通常放置在项目根目录或用户主目录下,Liquibase 会自动加载。
以下是一个典型的 liquibase.properties 文件内容:
# 数据库连接配置
changeLogFile: db/changelog/db.changelog-master.xml
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&allowPublicKeyRetrieval=true
username: db_user
password: db_password
driver: com.mysql.cj.jdbc.Driver
# 输出与日志配置
outputFile: liquibase_output.log
logLevel: INFO
# 默认 schema 与 catalog
defaultSchemaName: my_schema
defaultCatalogName: my_catalog
# 其他常用参数
liquibase.hub.mode: off
liquibase.pro.mode: off
关键参数说明:
| 参数名 | 必填 | 说明 | 示例 |
|---|---|---|---|
changeLogFile |
是 | 主变更日志文件路径(相对于项目根目录) | db/changelog/db.changelog-master.xml |
url |
是 | 数据库 JDBC 连接 URL | jdbc:mysql://localhost:3306/mydb |
username |
是 | 数据库用户名 | db_user |
password |
是 | 数据库密码(可留空,通过命令行或环境变量传入) | db_password |
driver |
是 | 数据库驱动类的全限定名 | com.mysql.cj.jdbc.Driver |
defaultSchemaName |
否 | 默认使用的数据库 schema | my_schema |
logLevel |
否 | 日志级别:OFF, SEVERE, WARNING, INFO, DEBUG, FINE | INFO |
outputFile |
否 | 将日志输出到指定文件 | liquibase_output.log |
最佳实践: 密码不建议明文写在
liquibase.properties 中。可通过命令行参数 --password 传入,或使用环境变量 LIQUIBASE_PASSWORD 替代,避免敏感信息泄露。
3.4 数据库驱动配置
Liquibase 通过 JDBC 驱动与数据库通信,因此必须将对应数据库的驱动 JAR 文件放置在 Liquibase 的 classpath 中。驱动配置分为两步:下载驱动 JAR 文件,并确保 Liquibase 能够加载它。
常见数据库驱动及 Maven 坐标:
| 数据库 | 驱动类 | Maven 坐标 (groupId:artifactId:version) |
|---|---|---|
| MySQL 8+ | com.mysql.cj.jdbc.Driver |
com.mysql:mysql-connector-j:8.2.0 |
| PostgreSQL | org.postgresql.Driver |
org.postgresql:postgresql:42.7.1 |
| Oracle | oracle.jdbc.OracleDriver |
com.oracle.database.jdbc:ojdbc11:23.3.0.23.09 |
| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
com.microsoft.sqlserver:mssql-jdbc:12.4.2.jre11 |
| H2 (开发/测试) | org.h2.Driver |
com.h2database:h2:2.2.224 |
驱动加载方式:
- 直接放入 lib 目录: 将驱动 JAR 文件复制到
$LIQUIBASE_HOME/lib/目录下,Liquibase 启动时自动加载。 - 通过 CLASSPATH 环境变量: 设置
LIQUIBASE_CLASSPATH指向驱动 JAR 所在目录或具体文件。 - 命令行指定: 使用
--classpath参数临时指定驱动路径。
# 方式一:复制到 lib 目录
cp mysql-connector-j-8.2.0.jar $LIQUIBASE_HOME/lib/
# 方式二:设置环境变量
export LIQUIBASE_CLASSPATH=/path/to/drivers/mysql-connector-j-8.2.0.jar
# 方式三:命令行指定
liquibase --classpath=/path/to/drivers/mysql-connector-j-8.2.0.jar \
--driver=com.mysql.cj.jdbc.Driver \
--url="jdbc:mysql://localhost:3306/mydb" \
--username=db_user \
--password=db_password \
status
常见错误: 如果遇到
Driver class not found 异常,请检查驱动 JAR 是否在 classpath 中,以及 driver 参数是否填写了正确的驱动类全限定名。不同数据库版本可能对应不同的驱动类名(例如 MySQL 5.x 使用 com.mysql.jdbc.Driver,MySQL 8+ 使用 com.mysql.cj.jdbc.Driver)。
3.5 配置验证与测试
完成上述配置后,建议执行一次 liquibase status 命令来验证配置是否正确。该命令会尝试连接数据库并显示当前变更日志的状态,而不会实际执行任何变更。
# 验证配置
liquibase status --verbose
# 预期输出示例
Liquibase Community 4.27.0 by Liquibase
Running Changeset: db/changelog/db.changelog-master.xml::1::author
1 changesets have been deployed to mydb
0 changesets have not been applied to mydb
如果输出显示连接成功并列出变更集状态,说明安装与配置已全部完成,可以进入下一阶段的变更日志编写与迁移执行。
快速排障: 若连接失败,优先检查:① 数据库服务是否运行;② 连接 URL 中的主机、端口、数据库名是否正确;③ 用户名密码是否有误;④ 防火墙是否放行对应端口;⑤ 驱动 JAR 版本是否与数据库版本兼容。