1

我想在 MySQL 初始化时运行一个 SQL 脚本。这个脚本基本上有一些更新命令,并且在每次初始化时运行。基本上,想法是在每次初始化时更新 Root 和 User 密码,并使用每次数据库启动时获得的保管库凭据。MySQL 数据库部署在 Docker 容器中。

在这种情况下,有没有办法预设一个 SQL 脚本,可以在 Docker 容器内的每个数据库初始化时运行?如果是这样,请给我们一个如何实施的例子。我确实使用 docker-entrypoint.sh 和 foreground.sh 在此类容器中进行一些自定义。

4

1 回答 1

2

mysqld接受一个指定初始化脚本的参数,您可以使用它。

码头工人-compose.yml

version: "3.3"

services:
  db:
    image: mariadb:10.1
    environment:
      - MYSQL_ROOT_PASSWORD
    volumes:
      - ./init.sql:/script/init.sql
    command: "--init-file /script/init.sql"

初始化.sql

UPDATE mysql.user SET authentication_string=PASSWORD("mihai") WHERE USER="root";
UPDATE mysql.user SET plugin="mysql_native_password";

.env

MYSQL_ROOT_PASSWORD=rootpassword

运行容器并测试它:

docker-compose up -d
docker-compose exec db mysql -hlocalhost -uroot -pmihai
select plugin from mysql.user where USER='root';

您可以看到该插件也已更新,因此脚本都可以正常工作。

您也可以删除命令并使用原始密码进行测试。确保在运行之间删除卷。

于 2019-06-16T05:44:58.827 回答