docker exec
直接执行docker exec -it mysql-container mysql -u root -pPASSWORD -e "SHOW DATABASES;"
docker exec -it mysql-container mysql -u root -p
# 进入MySQL命令行后执行SQL命令
docker exec -i mysql-container mysql -u root -pPASSWORD database_name < /path/to/file.sql
# 先将SQL文件复制到容器内
docker cp /path/to/file.sql mysql-container:/tmp/file.sql
# 然后在容器内执行
docker exec -it mysql-container mysql -u root -pPASSWORD database_name -e "source /tmp/file.sql"
# 启动容器时挂载SQL文件目录
docker run --name mysql-container -v /host/path/to/sql:/sql -e MYSQL_ROOT_PASSWORD=password -d mysql:tag
# 执行SQL文件
docker exec -it mysql-container mysql -u root -pPASSWORD database_name -e "source /sql/file.sql"
在docker-compose.yml
中配置:
services:
mysql:
image: mysql:latest
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
MYSQL_ROOT_PASSWORD: password
MySQL官方镜像会自动执行/docker-entrypoint-initdb.d/
目录下的.sh
、.sql
和.sql.gz
文件。
MYSQL_PWD
环境变量或配置文件中存储密码/docker-entrypoint-initdb.d/
下的文件for sql_file in /path/to/*.sql; do
docker exec -i mysql-container mysql -u root -pPASSWORD database_name < "$sql_file"
done
# 创建.env文件
echo "MYSQL_ROOT_PASSWORD=password" > .env
# 使用环境变量文件
docker exec -i mysql-container mysql -u root -p$MYSQL_ROOT_PASSWORD database_name < file.sql
以上方法可以根据具体场景选择使用,挂载目录方式适合开发环境,而标准输入导入方式适合自动化部署场景。