首页 / DOCKER / docker mysql
docker mysql
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了docker mysql,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5873字,纯文字阅读大概需要9分钟。
内容图文
![docker mysql](/upload/InfoBanner/zyjiaocheng/901/d8e8a51b21a04fb4b667655669e95687.jpg)
MySQL环境变量:https://hub.docker.com/r/mysql/mysql-server/
详见上述官方链接,个人觉得比较有用的是几个启动Docker时可以带上的数据库初始化参数:
#设置监听地址,默认只有本机可连接,可设为%使得所有客户端均可连 MYSQL_ROOT_HOST #root密码设置 MYSQL_ROOT_PASSWORD #指定密码 MYSQL_ALLOW_EMPTY_PASSWORD #空密码 MYSQL_RANDOM_ROOT_PASSWORD #随机密码,一次性,一段时间后过期 MYSQL_ONETIME_PASSWORD #docker启动后创建初始数据库 MYSQL_DATABASE #docker启动后创建初始用户,只对初始数据库拥有所有权限 MYSQL_USER MYSQL_PASSWORD
使用示例:
#!/usr/bin/env bash set -o nounset set -o errexit set -o pipefail dbRootPwd=123 dbSensestudyDbName=sensestudydev dbSensestudyUsername=sensestudy dbSensestudyUserPwd="LKxx880)Hsens#estudyKSy8po4A" dbSensestudyDbSqlFilePath=dump.sql echo start mysql from docker ... docker run --name mysql_sensestudy -p 3307:3306 -d \ -e MYSQL_ROOT_PASSWORD=$dbRootPwd \ -e MYSQL_ROOT_HOST=% \ -e MYSQL_DATABASE=$dbSensestudyDbName \ -e MYSQL_USER=$dbSensestudyUsername \ -e MYSQL_PASSWORD=$dbSensestudyUserPwd \ mysql/mysql-server:5.7 echo start mysql from docker done.
初始化数据库数据:
若在Docker启动时指定了初始化的数据库,此时若想同时初始化该数据库里的数据,可以用Docker命令把sql脚本复制到Docker并执行之(当然也可以在启动时挂载进去从而省去手动复制,不过挂载要求源文件所在目录的绝对路径,麻烦点),如下:
//值得注意的是这种手动执行脚本的方法要求在启动完Docker一定时间后才执行之因为MySQL没初始化完成,否则会报连不上的错误。...在这上面费了好长时间 docker cp $dbSensestudyDbSqlFilePath $dockerMySQLInstanceName:/$dbSensestudyDbSqlFilePath docker exec $dockerMySQLInstanceName /bin/sh -c " mysql -uroot -p$dbRootPwd $dbSensestudyDbName < /$dbSensestudyDbSqlFilePath "
更简单的做法是把sql脚本所在目录挂载到Docker的 /docker-entrypoint-initdb.d 目录下,容器创建时会自动执行该目录下的脚本。
it will execute files with extensions
.sh
,.sql
and.sql.gz
that are found in/docker-entrypoint-initdb.d
. Files will be executed in alphabetical order.
dump mysql through docker:
$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
完整脚本:
![docker mysql - 文章图片](/upload/getfiles/0001/2021/5/8/20210508113043151.jpg)
![docker mysql - 文章图片](/upload/getfiles/0001/2021/5/8/20210508113043310.jpg)
1 #!/bin/bash 2 3 curCMD=$1 4 5 # set -x 6 set -o nounset 7 set -o errexit 8 set -o pipefail 9 10 dockerMySQLInstanceName=mysql_sensestudy 11 dbPort=3307 12 dbRootPwd=123 13 dbSensestudyDbName=sensestudydev 14 dbSensestudyUsername=sensestudy 15 dbSensestudyUserPwd="xxx" 16 dbSensestudyDbInitSqlFilePath=init.sql 17 18 19 #docker service is required 20 #echo check if docker service has started ... 21 if [ ` systemctl is-active docker` != "active" ]; then ` systemctl start docker` ; fi 22 #echo docker service started 23 24 25 26 #创建容器 27 function createMySQL() 28 { 29 echo create mysql from docker ... 30 31 docker run --name $dockerMySQLInstanceName -p $dbPort:3306 -d \ 32 -e MYSQL_ROOT_PASSWORD=$dbRootPwd \ 33 -e MYSQL_ROOT_HOST=% \ 34 -e MYSQL_DATABASE=$dbSensestudyDbName \ 35 -e MYSQL_USER=$dbSensestudyUsername \ 36 -e MYSQL_PASSWORD=$dbSensestudyUserPwd \ 37 -v $PWD/mysql_data:/var/lib/mysql \ 38 mysql/mysql-server:5.7 --character-set-server=utf8 39 40 echo create mysql from docker done. 41 } # -v $PWD/mysql_script:/docker-entrypoint-initdb.d 42 43 44 #初始化Docker里MySQL数据库数据,也可以把sql脚本所在目录的绝对路径挂载到/docker-entrypoint-initdb.d 45 function initMySQLData() 46 { 47 echo init db data ... 48 set -x 49 50 docker cp $dbSensestudyDbInitSqlFilePath $dockerMySQLInstanceName:/$dbSensestudyDbInitSqlFilePath 51 docker exec $dockerMySQLInstanceName \ 52 /bin/sh -c " mysql -uroot -p$dbRootPwd $dbSensestudyDbName < /$dbSensestudyDbInitSqlFilePath " 53 set +x 54 55 echo init db data done. 56 } 57 58 59 60 #启动MySQL容器,若不存在则创建容器并从sql脚本初始化数据 61 function start() 62 { 63 echo start $dockerMySQLInstanceName on port $dbPort ... 64 65 if [ "`docker ps -a|grep "$dockerMySQLInstanceName" `" = "" ] 66 then 67 createMySQL 68 sleep 15 69 initMySQLData 70 else 71 docker container start $dockerMySQLInstanceName 72 fi 73 74 echo start $dockerMySQLInstanceName done. 75 } 76 77 78 # 关闭容器 79 function stop() 80 { 81 echo stop $dockerMySQLInstanceName ... 82 if [ "`docker container ls| grep ${dockerMySQLInstanceName}`" != "" ] 83 then 84 docker container stop $dockerMySQLInstanceName 85 fi 86 echo stop $dockerMySQLInstanceName done. 87 } 88 89 90 # 删除容器 91 function remove() 92 { 93 # first stop 94 stop 95 96 # then remove 97 echo delete $dockerMySQLInstanceName ... 98 if [ "`docker ps -a| grep ${dockerMySQLInstanceName}`" != "" ] 99 then 100 docker container rm $dockerMySQLInstanceName 101 fi 102 echo delete $dockerMySQLInstanceName done. 103 } 104 105 function restart() 106 { 107 stop 108 sleep 2 109 start 110 } 111 112 function status() 113 { 114 if [ "`docker container ls| grep ${dockerMySQLInstanceName}`" = "" ] 115 then 116 echo mysql container is not running. 117 else 118 echo `docker container ls| grep ${dockerMySQLInstanceName}` 119 fi 120 } 121 122 123 124 if [ "$curCMD" = "start" ] 125 then 126 start 127 128 elif [ "$curCMD" = "stop" ] 129 then 130 stop 131 132 elif [ "$curCMD" = "restart" ] 133 then 134 restart 135 136 elif [ "$curCMD" = "status" ] 137 then 138 status 139 140 elif [ "$curCMD" = "remove" ] 141 then 142 remove 143 144 145 else 146 echo "error command: please use option: start|stop|restart|status|remove" 147 fiView Code
更全面的内容:https://hub.docker.com/_/mysql/
参考资料:
https://hub.docker.com/r/mysql/mysql-server/:环境变量
https://hub.docker.com/_/mysql/:构建、连接、环境变量、初始化、数据存储等
转载于:https://www.cnblogs.com/z-sm/p/9400353.html
内容总结
以上是互联网集市为您收集整理的docker mysql全部内容,希望文章能够帮你解决docker mysql所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。