我想在MySQL初始化时运行SQL脚本。该脚本基本上具有一些UPDATE命令,并已在每次初始化时运行。基本上,想法是在每次初始化时使用在每次数据库启动时获得的Vault凭证来更新Root和User密码。 MySQL数据库正在部署在Docker容器中。
在这种情况下,有没有一种方法可以预设一个可以在Docker容器中的每个数据库初始化时运行的SQL脚本?如果是这样,请举例说明如何实现该功能。我确实在这样的容器上使用了docker-entrypoint.sh和foreground.sh进行一些自定义。
答案 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';
您可以看到该插件也已更新,因此脚本都可以工作。
您也可以删除命令并使用原始密码进行测试。确保在两次运行之间删除卷。