mysql - 用于在 docker MySQL 中创建默认用户的 Bash 脚本
问题描述
我正在开发一个用于在 Docker 中运行 MySQL 数据库的“一个文件脚本”,并且有很多有用的想法。该脚本应该使用 MySQL 创建一个容器,然后创建一个具有最大权限的新用户。
当我尝试从bash 脚本连接到 MySQL 命令行时,就会出现问题。部分脚本:
#!/bin/bash
mysqlContainerName=project-mysql
mysqlRootUsername=root
mysqlRootPassword=root_pass
mysqlUsername=db_user
mysqlPassword=db_pass
mysqlDb=project_db
echo -e "Creating container \e[31m$mysqlContainerName\e[0m"
docker run --rm -d \
--name=$mysqlContainerName \
--network api-network \
-p 3306:3306 \
-v /opt/docker-data/mysql-volumes:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=$mysqlRootPassword \
-e MYSQL_DATABASE=$mysqlDb \
-t mysql:8.0.19
docker exec $mysqlContainerName \
mysql -h 127.0.0.1 -P 3306 --protocol=tcp \
-uroot -p$mysqlRootPassword -e "CREATE USER '$mysqlUsername'@'localhost' IDENTIFIED BY
'$mysqlPassword';"
所以,容器成功创建,但我一直收到一条错误消息:ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111) 有 什么建议吗?
解决方案
所以,经过几个小时的搜索,我找到了解决方案。添加了bash -c参数并在引号中连接到 MySQL 和查询。
docker exec $mysqlContainerName bash -c "mysql -h172.21.0.1 -P 3306 --protocol=tcp -u$mysqlRootUsername -p$mysqlRootPassword -e \"CREATE USER '$mysqlUsername'@'localhost' IDENTIFIED BY '$mysqlPassword';\"; exit;"
推荐阅读
- javascript - 使用 firebase 实时数据库和 firebase 功能创建过期功能?
- kubernetes - 如何获得 Nvidia 驱动程序版本 >=440(对于 CUDA 10.2)的 EKS GPU AMI?
- python - BeautifulSoup 分解一个元素的多个类
- sql - SQL 错误:936,SQLState:42000,查询中添加了版本列
- android - Android Paging 库、Recyclerview、Retrofit、MVVM
- javascript - 我如何使用纯 JS 使下拉菜单顺利显示?
- java - 在android studio中,如何在从url链接获取html内容时纠正错误“E/Zygote:no v2”?
- excel - 将一个单元格中具有多个值的行分隔为excel中的单个行
- python - 使用 Python 读取 MySQL 查询,其中输出为空
- python - 尝试创建词汇表时出现错误请求