我有以下docker compose文件(docker-compose-dev.yml
):
version: '3'
services:
my_sql_db:
image: percona:latest
container_name: my_sql_db
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: abhs
ports:
- "3306:3306"
migration:
image: boxfuse/flyway:latest
container_name: flyway_migration
volumes:
- ./flyway_scripts/src/main/resources/db/migration:/flyway/sql
command: -url=jdbc:mysql://my_sql_db:3306/abhs?useUnicode=true&characterEncoding=utf8&useSSL=false -user=root -password=password migrate
depends_on:
- my_sql_db
以及下面的docker compose.yml
:
version: '3'
services:
migration:
image: boxfuse/flyway:latest
container_name: flyway_migration
volumes:
- ./flyway_scripts/src/main/resources/db/migration:/flyway/sql
然后执行以下命令:
docker-compose -f docker-compose.yml -f docker-compose-dev.yml up
它会导致错误:
在日志中,我看到以下内容:
my_sql_db | Initializing database
flyway_migration | Flyway Community Edition 5.1.4 by Boxfuse
flyway_migration |
my_sql_db | 2018-08-24T08:47:41.616694Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
my_sql_db | 2018-08-24T08:47:41.616747Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
flyway_migration | ERROR:
flyway_migration | Unable to obtain connection from database (jdbc:mysql://my_sql_db:3306/abhs?useUnicode=true&characterEncoding=utf8&useSSL=false) for user 'root': Could not connect to address=(host=my_sql_db)(port=3306)(type=master) : Connection refused (Connection refused)
flyway_migration | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
flyway_migration | SQL State : 08
flyway_migration | Error Code : -1
flyway_migration | Message : Could not connect to address=(host=my_sql_db)(port=3306)(type=master) : Connection refused (Connection refused)
my_sql_db | 2018-08-24T08:47:43.024690Z 0 [Warning] InnoDB: New log files created, LSN=45790
flyway_migration |
my_sql_db | 2018-08-24T08:47:43.443625Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
my_sql_db | 2018-08-24T08:47:43.588008Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 5dc59a4f-a77a-11e8-b6cb-0242ac130002.
my_sql_db | 2018-08-24T08:47:43.760654Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
my_sql_db | 2018-08-24T08:47:44.518107Z 0 [Warning] CA certificate ca.pem is self signed.
my_sql_db | 2018-08-24T08:47:44.925466Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
my_sql_db | 2018-08-24T08:47:54.762213Z 1 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
my_sql_db | 2018-08-24T08:47:54.762517Z 1 [Warning] 'user' entry 'mysql.session@localhost' ignored in --skip-name-resolve mode.
my_sql_db | 2018-08-24T08:47:54.762889Z 1 [Warning] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
my_sql_db | 2018-08-24T08:47:54.763244Z 1 [Warning] 'db' entry 'performance_schema mysql.session@localhost' ignored in --skip-name-resolve mode.
my_sql_db | 2018-08-24T08:47:54.763472Z 1 [Warning] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
my_sql_db | 2018-08-24T08:47:54.763788Z 1 [Warning] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
my_sql_db | 2018-08-24T08:47:54.763928Z 1 [Warning] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
my_sql_db | 2018-08-24T08:47:54.764128Z 1 [Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
my_sql_db | Database initialized
my_sql_db | MySQL init process in progress...
my_sql_db | 2018-08-24T08:47:58.970290Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
my_sql_db | 2018-08-24T08:47:58.970345Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
my_sql_db | 2018-08-24T08:47:58.974061Z 0 [Note] mysqld (mysqld 5.7.22-22) starting as process 58 ...
my_sql_db | 2018-08-24T08:47:58.999651Z 0 [Note] InnoDB: PUNCH HOLE support available
my_sql_db | 2018-08-24T08:47:58.999685Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
my_sql_db | 2018-08-24T08:47:58.999689Z 0 [Note] InnoDB: Uses event mutexes
my_sql_db | 2018-08-24T08:47:58.999692Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
my_sql_db | 2018-08-24T08:47:58.999695Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
my_sql_db | 2018-08-24T08:47:58.999698Z 0 [Note] InnoDB: Using Linux native AIO
my_sql_db | 2018-08-24T08:47:59.000153Z 0 [Note] InnoDB: Number of pools: 1
my_sql_db | 2018-08-24T08:47:59.000426Z 0 [Note] InnoDB: Using CPU crc32 instructions
my_sql_db | 2018-08-24T08:47:59.002306Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
my_sql_db | 2018-08-24T08:47:59.006893Z 0 [Note] InnoDB: Completed initialization of buffer pool
my_sql_db | 2018-08-24T08:47:59.013219Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
my_sql_db | 2018-08-24T08:47:59.024242Z 0 [Note] InnoDB: Crash recovery did not find the parallel doublewrite buffer at /var/lib/mysql/xb_doublewrite
my_sql_db | 2018-08-24T08:47:59.026263Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
my_sql_db | 2018-08-24T08:47:59.066469Z 0 [Note] InnoDB: Created parallel doublewrite buffer at /var/lib/mysql/xb_doublewrite, size 3932160 bytes
my_sql_db | 2018-08-24T08:47:59.071752Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
my_sql_db | 2018-08-24T08:47:59.072052Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
my_sql_db | 2018-08-24T08:47:59.422155Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
my_sql_db | 2018-08-24T08:47:59.423325Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
my_sql_db | 2018-08-24T08:47:59.423376Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
my_sql_db | 2018-08-24T08:47:59.423900Z 0 [Note] InnoDB: Waiting for purge to start
my_sql_db | 2018-08-24T08:47:59.474066Z 0 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.7.22-22 started; log sequence number 2595255
my_sql_db | 2018-08-24T08:47:59.474647Z 0 [Note] Plugin 'FEDERATED' is disabled.
my_sql_db | 2018-08-24T08:47:59.499970Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.
my_sql_db | 2018-08-24T08:47:59.500004Z 0 [Note] Skipping generation of SSL certificates as certificate files are present in data directory.
my_sql_db | 2018-08-24T08:47:59.500382Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
my_sql_db | 2018-08-24T08:47:59.501263Z 0 [Warning] CA certificate ca.pem is self signed.
my_sql_db | 2018-08-24T08:47:59.522151Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
my_sql_db | 2018-08-24T08:47:59.531657Z 0 [Note] InnoDB: Buffer pool(s) load completed at 180824 8:47:59
看起来flyway在数据库初始化之前启动,因此无法连接到数据库,我看到下面的错误。
我怎样才能解决这个问题?
我谷歌了类似的问题,我找到了以下建议:https://github.com/vishnubob/wait-for-it但我是docker的新手,我不明白如何将其放入我的docker撰写文件
我试图把文件wait-fot-it.sh
附近的撰写文件和执行:
command: ["./wait-for-it.sh", "mysql:3306", "--", "-url=jdbc:mysql://my_sql_db:3306/abhs?useUnicode=true&characterEncoding=utf8&useSSL=false -user=root -password=password migrate"]
但是我返回错误:无效的参数:./wait-for-it.sh
我尝试从"重复"主题的方法:
version: '3'
services:
my_sql_db:
image: percona:latest
container_name: my_sql_db
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: abhs
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
migration:
image: boxfuse/flyway:latest
container_name: flyway_migration
volumes:
- ./flyway_scripts/src/main/resources/db/migration:/flyway/sql
command: -url=jdbc:mysql://my_sql_db:3306/abhs?useUnicode=true&characterEncoding=utf8&useSSL=false -user=root -password=password migrate
depends_on:
my_sql_db:
condition: service_healthy
但我看到以下错误:
$ docker-compose -f docker-compose.yml -f docker-compose-dev.yml up
The Compose file '.\docker-compose-dev.yml' is invalid because:
services.migration.depends_on contains an invalid type, it should be an array
对于这种方法,我看到以下错误:
version: '3'
services:
my_sql_db:
image: percona:latest
container_name: my_sql_db
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: abhs
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
migration:
image: boxfuse/flyway:latest
container_name: flyway_migration
volumes:
- ./flyway_scripts/src/main/resources/db/migration:/flyway/sql
command: dockerize wait jdbc:mysql://my_sql_db:3306 -url=jdbc:mysql://my_sql_db:3306/abhs?useUnicode=true&characterEncoding=utf8&useSSL=false -user=root -password=password migrate
depends_on:
- my_sql_db
我看到以下错误:
flyway_migration | ERROR: Invalid argument: dockerize
wait-for-it.sh内容:
#!/usr/bin/env bash
# Use this script to test if a given TCP host/port are available
cmdname=$(basename $0)
echoerr() { if [[ $QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
usage()
{
cat << USAGE >&2
Usage:
$cmdname host:port [-s] [-t timeout] [-- command args]
-h HOST | --host=HOST Host or IP under test
-p PORT | --port=PORT TCP port under test
Alternatively, you specify the host and port as host:port
-s | --strict Only execute subcommand if the test succeeds
-q | --quiet Don't output any status messages
-t TIMEOUT | --timeout=TIMEOUT
Timeout in seconds, zero for no timeout
-- COMMAND ARGS Execute command with args after the test finishes
USAGE
exit 1
}
wait_for()
{
if [[ $TIMEOUT -gt 0 ]]; then
echoerr "$cmdname: waiting $TIMEOUT seconds for $HOST:$PORT"
else
echoerr "$cmdname: waiting for $HOST:$PORT without a timeout"
fi
start_ts=$(date +%s)
while :
do
if [[ $ISBUSY -eq 1 ]]; then
nc -z $HOST $PORT
result=$?
else
(echo > /dev/tcp/$HOST/$PORT) >/dev/null 2>&1
result=$?
fi
if [[ $result -eq 0 ]]; then
end_ts=$(date +%s)
echoerr "$cmdname: $HOST:$PORT is available after $((end_ts - start_ts)) seconds"
break
fi
sleep 1
done
return $result
}
wait_for_wrapper()
{
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
if [[ $QUIET -eq 1 ]]; then
timeout $BUSYTIMEFLAG $TIMEOUT $0 --quiet --child --host=$HOST --port=$PORT --timeout=$TIMEOUT &
else
timeout $BUSYTIMEFLAG $TIMEOUT $0 --child --host=$HOST --port=$PORT --timeout=$TIMEOUT &
fi
PID=$!
trap "kill -INT -$PID" INT
wait $PID
RESULT=$?
if [[ $RESULT -ne 0 ]]; then
echoerr "$cmdname: timeout occurred after waiting $TIMEOUT seconds for $HOST:$PORT"
fi
return $RESULT
}
# process arguments
while [[ $# -gt 0 ]]
do
case "$1" in
*:* )
hostport=(${1//:/ })
HOST=${hostport[0]}
PORT=${hostport[1]}
shift 1
;;
--child)
CHILD=1
shift 1
;;
-q | --quiet)
QUIET=1
shift 1
;;
-s | --strict)
STRICT=1
shift 1
;;
-h)
HOST="$2"
if [[ $HOST == "" ]]; then break; fi
shift 2
;;
--host=*)
HOST="${1#*=}"
shift 1
;;
-p)
PORT="$2"
if [[ $PORT == "" ]]; then break; fi
shift 2
;;
--port=*)
PORT="${1#*=}"
shift 1
;;
-t)
TIMEOUT="$2"
if [[ $TIMEOUT == "" ]]; then break; fi
shift 2
;;
--timeout=*)
TIMEOUT="${1#*=}"
shift 1
;;
--)
shift
CLI=("$@")
break
;;
--help)
usage
;;
*)
echoerr "Unknown argument: $1"
usage
;;
esac
done
if [[ "$HOST" == "" || "$PORT" == "" ]]; then
echoerr "Error: you need to provide a host and port to test."
usage
fi
TIMEOUT=${TIMEOUT:-15}
STRICT=${STRICT:-0}
CHILD=${CHILD:-0}
QUIET=${QUIET:-0}
# check to see if timeout is from busybox?
# check to see if timeout is from busybox?
TIMEOUT_PATH=$(realpath $(which timeout))
if [[ $TIMEOUT_PATH =~ "busybox" ]]; then
ISBUSY=1
BUSYTIMEFLAG="-t"
else
ISBUSY=0
BUSYTIMEFLAG=""
fi
if [[ $CHILD -gt 0 ]]; then
wait_for
RESULT=$?
exit $RESULT
else
if [[ $TIMEOUT -gt 0 ]]; then
wait_for_wrapper
RESULT=$?
else
wait_for
RESULT=$?
fi
fi
if [[ $CLI != "" ]]; then
if [[ $RESULT -ne 0 && $STRICT -eq 1 ]]; then
echoerr "$cmdname: strict mode, refusing to execute subprocess"
exit $RESULT
fi
exec "${CLI[@]}"
else
exit $RESULT
fi
我也尝试了这个:
version: '3'
services:
my_sql_db:
image: percona:latest
container_name: my_sql_db
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: abhs
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
migration:
image: boxfuse/flyway:latest
container_name: flyway_migration
volumes:
- ./flyway_scripts/src/main/resources/db/migration:/flyway/sql
entrypoint: ["wait-for-it.sh", "mysql:3306", "--", "docker-entrypoint.sh"]
command: -url=jdbc:mysql://my_sql_db:3306/abhs?useUnicode=true&characterEncoding=utf8&useSSL=false -user=root -password=password migrate
depends_on:
- my_sql_db
这会导致错误:
正在创建flyway\u迁移。。。错误
ERROR: for flyway_migration Cannot start service migration: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"wait-for-it.sh\": executable file not found in $PATH": unknown
ERROR: for migration Cannot start service migration: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"wait-for-it.sh\": executable file not found in $PATH": unknown
Encountered errors while bringing up the project.
或者,您可以创建一个migrate.dev.sh
并使用docker run。。boxfuse/flyway:最新版本
等。。
这是一个示例文件
$FLYWAY_PASSWORD=$PGPASSWORD
$FLYWAY_URL=jdbc:postgresql://$DB_HOST:$PORT/mydb
$FLYWAY_USER=postgres
docker run \
--rm \
-e FLYWAY_PASSWORD=$FLYWAY_PASSWORD \
-e FLYWAY_URL=$FLYWAY_URL \
-e FLYWAY_USER=$FLYWAY_USER \
-e FLYWAY_SCHEMAS=$FLYWAY_SCHEMAS \
-v $(pwd)/sql:/flyway/sql \
boxfuse/flyway:latest $1
然后你可以这样称呼它
migrate.dev.sh info
或migrate.dev.sh migrate
假设您的迁移在中。/sql/
使用flyway 5.2.0,可以添加参数connectRetries,该参数指定flyway在1秒间隔内尝试重新连接的最大次数。
command: -connectRetries=20 -url=jdbc:mysql://my_sql_db:3306/abhs?useUnicode=true&characterEncoding=utf8&useSSL=false -user=root -password=password migrate
Flyway文档
对于错误:
Invalid argument: ./wait-for-it.sh
和
Invalid argument: dockerize
这是因为Flyway容器的入口点是Flyway
可执行文件,并且您指定的命令内容作为参数附加到入口点。因此,实际上,容器正在运行以下内容:
flyway dockerize ...
或者
flyway wait-for-it.sh ...
这两个参数都不是Flyway命令行的有效参数。
需要更新入口点,正如您在P.S.5
中所做的那样。但是,您随后遇到了错误:
"wait-for-it.sh": executable file not found in $PATH"
这是因为wait-for-it.sh
(和dockerize
)在Flyway容器中不可用。
您可以创建扩展Flyway容器的Dockerfile,然后添加
或复制
脚本,例如:
FROM boxfuse/flyway:latest
RUN mkdir /flyway/bin
ADD wait-for-it.sh /flyway/bin/wait-for-it.sh
RUN chmod 755 /flyway/bin/wait-for-it.sh
或挂载包含脚本/可执行文件的卷:
version: '3'
services:
...
migration:
image: boxfuse/flyway:latest
container_name: flyway_migration
volumes:
- ../sql:/flyway/sql
- ../bin:/flyway/bin
entrypoint: ["/flyway/bin/dockerize", "-wait", "tcp://my_sql_db:3306", "-timeout", "15s", "--", "flyway"]
...
其中本地目录。/bin
包含dockerize
(或等待它.sh)。
这应该足以让dockerize/wait-for-it.sh工作。但是,这两个工具都只检查端口是否可用,而不检查数据库本身是否已经准备好为请求提供服务。
也就是说,使用docker-composev2.1depends_on条件
语法可能是一个合理的方法。正如你在评论中提到的,这种语法在v3中被删除了,很多人对此不满意。
然而,正如一位Docker开发人员在评论中所说:
如果您不打算使用swarm服务,就没有理由使用v3格式。
另一种方法是扩展Flyway容器以添加自定义MySQL healthcheck脚本,类似于docker compose文档中显示的Postgres脚本:
#!/bin/bash
# wait-for-mysql.sh
set -e
host="$1"
shift
cmd="$@"
until MYSQL_PWD=$MYSQL_ROOT_PASSWORD /usr/bin/mysql --host="$host" --user="root" --execute "SHOW DATABASES;"; do
>&2 echo "MySQL is unavailable - sleeping"
sleep 1
done
>&2 echo "MySQL is up - executing command"
exec $cmd
然后创建Dockerfile以扩展Flyway,安装MySQL客户端并添加以下脚本:
FROM boxfuse/flyway:latest
RUN apt-get update && \
apt-get install -y mysql-client && \
mkdir /flyway/bin
ADD wait-for-mysql.sh /flyway/bin/wait-for-mysql.sh
RUN chmod 755 /flyway/bin/wait-for-mysql.sh
然后,您可以在撰写文件中使用自定义飞道图像:
version: '3'
services:
my_sql_percona:
...
migration:
build: ./flyway_mysql_client
container_name: flyway_migration
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- ../sql:/flyway/sql
entrypoint: ["bash", "/flyway/bin/wait-for-mysql.sh", "my_sql_percona", "--", "flyway"]
command: -url=jdbc:mysql://my_sql_db:3306/abhs?useUnicode=true&characterEncoding=utf8&useSSL=false -user=root -password=password migrate
depends_on:
- my_sql_percona
这种方法的缺点是,您需要为每个容器的依赖项扩展每个容器,并使用自定义健康检查脚本。
v2.1依赖于:condition
语法似乎已被删除,以支持v3中的重启策略。但是,它们嵌套在deploy部分下,该部分:
仅在部署到具有docker stack deploy的群集时生效,docker compose up和docker compose run会忽略此项。
因此,进一步的选择是放弃docker compose并在docker swarm上运行,如下所示:
向Flyway容器添加故障时的重新启动策略:
version: '3'
services:
my_sql_percona:
...
migration:
image: boxfuse/flyway:latest
...
depends_on:
- my_sql_percona
deploy:
restart_policy:
condition: on-failure
创建群集(本例中为单节点):
docker swarm init --advertise-addr <your-ip-address>
部署服务:
docker stack deploy --compose-file docker-compose.yml flyway_mysql
然后,swarm每次退出Flyway容器时都会重新启动它,直到它最终成功退出。
虽然这似乎是可行的,但我不确定这是最好的方法。例如,如果Flyway容器由于迁移脚本中的错误而退出,swarm将继续重新启动容器,即使它永远不会成功。
我用这五种不同的方法创建了一个存储库。
就个人而言,我认为我应该使用v2.1方法,因为healthcheck保存在数据库容器中,而不是在依赖它的每个容器中复制。不过,我不需要使用swarm服务,所以选择适合您的服务。:-)
场景:我在Spring中开发了一个使用mysql 8数据库的微服务。这个数据库必须被初始化(创建一个数据库、一些表和数据)。在我的主机上,我用data.sql和schema.sql脚本初始化了数据库。问题是,我必须设置: 第一次执行。这将以我想要的方式初始化我的数据库。对于以后的运行,我必须对该命令进行注释。非常难看的解决方案,但我找不到更好的解决方案,我现在没有得到这个问题的答案。我认为测试它是
问题内容: 我想在Web应用程序启动时加载属性文件并设置连接池。显然,我只想在一个地方进行一次,因此可以根据需要进行更改。对于常规的servlet,我只需将初始化代码放在servlet的init()方法中,但是您无法使用Jersey servlet对其进行访问。那么我在哪里做呢?上面链接中的侦听器如何工作? 问题答案: 您需要做的就是编写一个实现ServletContextListener接口的J
问题内容: 我正在尝试使用MySQL数据库创建一个容器并将架构添加到这些数据库。 我当前的Dockerfile是: 为了创建容器,我遵循Docker提供的文档并执行以下命令: 但是,当我执行此命令时,未创建容器,并且在容器状态下,可以看到未成功执行CMD,实际上仅执行了命令。 无论如何,有没有一种方法可以使用架构初始化数据库,或者我需要手动执行这些操作? 问题答案: 对于如此长的答案,我感到很抱歉
我有不使用Flyway的现有数据库postgres,我需要复制它。如何将现有数据库状态移动到新的空数据库?我没有任何迁移sql。所以我期待像Liquibase中的GenerateChangelog这样的命令,但在Flyway中似乎没有这样的命令。
初始化 Paradox 数据库的驱动程序 当安装 Paradox 数据库的驱动程序时,设置程序会在引擎的 Windows 注册表和 ISAM Formats子键写入一些缺省值。不应直接修改这些设置(除非必要);而应使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Paradox 数据库驱动程序的初始化和 ISAM Formats 设置。 Paradox 数据库驱动程序在两种模式中的