如何在每次MySQL初始化时运行SQL脚本?

时间:2019-06-15 20:35:04

标签: mysql sql docker mariadb docker-entrypoint

我想在MySQL初始化时运行SQL脚本。该脚本基本上具有一些UPDATE命令,并已在每次初始化时运行。基本上,想法是在每次初始化时使用在每次数据库启动时获得的Vault凭证来更新Root和User密码。 MySQL数据库正在部署在Docker容器中。

在这种情况下,有没有一种方法可以预设一个可以在Docker容器中的每个数据库初始化时运行的SQL脚本?如果是这样,请举例说明如何实现该功能。我确实在这样的容器上使用了docker-entrypoint.sh和foreground.sh进行一些自定义。

1 个答案:

答案 0 :(得分:0)

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

docker-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"

init.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';

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

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