GitLab CI:MySQL构建和恢复数据库转储

3
在gitlab.yml文件中,我有以下内容:
mysql_build:
  stage: build
  variables:
    MYSQL_DATABASE: rates
    MYSQL_ROOT_PASSWORD: root
  services:
  - mysql:latest
  image: mysql
  before_script:
  - mysql --version
  script:
  - echo "SELECT 'OK';" | mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" --host=mysql "${MYSQL_DATABASE}"
  - mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" rates < db/rates_db.sql

安装MySQL成功,但我想在下一步中通过还原SQL转储文件来访问它。
在开始这部分时,我遇到了异常:
 - mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" rates < db/rates_db.sql

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

这里是真实的应用程序

https://gitlab.com/armdev/exchange-rates

如何在mysql中恢复数据库?


mysql服务在docker容器中运行,可通过主机名mysql访问。您可以尝试使用类似如下的命令:mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" --host=mysql rates < db/rates_db.sql - Jawad
顺便提一下,在第一个mysql命令中你是正确的,所以我猜你只是忘记添加它了。 - Jawad
是的,谢谢,它可以工作:) mysql构建没问题。我应该如何将对mysql的访问从jdbc:mysql://localhost:3306/rates更改为jdbc:mysql://mysql:3306/rates? - Armen Arzumanyan
1个回答

3

初始化一个新实例

当容器第一次启动时,将创建一个具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行在 /docker-entrypoint-initdb.d 中找到的扩展名为 .sh、.sql 和 .sql.gz 的文件。文件将按字母顺序执行。您可以通过挂载 SQL 转储到该目录并提供自定义镜像来轻松填充 mysql 服务。SQL 文件将默认导入到由 MYSQL_DATABASE 变量指定的数据库中。

尝试这个

Dockerfile

FROM mysql

ENV MYSQL_DATABASE rates
ENV MYSQL_ROOT_PASSWORD root

COPY db/rates_db.sql /docker-entrypoint-initdb.d/

替换 gitlab-ci.yml 文件

mysql_build:
  stage: build
  script:
    - docker build . -t <Image name>

谢谢你的帮助,我有一个问题,如何访问数据库?现在我使用的是 jdbc:mysql://localhost:3306/rates,我应该使用 Docker 的端口吗,例如 jdbc:mysql://192.168.99.104:3306/rates? - Armen Arzumanyan
如果您在同一台服务器上运行容器和Java应用程序,则必须执行jdbc:mysql://172.17.0.1:3306/rates。但如果不是这样,您必须添加服务器的IP地址并检查容器是否解析了该IP地址。 - German
请帮我解决这个问题,我已经搜索过了,但没有找到解决方案。https://stackoverflow.com/questions/66163415/is-possible-import-db-schema-to-service-mysql-gitlab-ci - SonickSeven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接