docker mysql 参数_docker mysql

详见上述官方链接,个人觉得比较有用的是几个启动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/envbash

set-o nounset

set-o errexit

set-o pipefail

dbRootPwd=123dbSensestudyDbName=sensestudydev

dbSensestudyUsername=sensestudy

dbSensestudyUserPwd="LKxx880)Hsens#estudyKSy8po4A"dbSensestudyDbSqlFilePath=dump.sqlechostart 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,.sqland.sql.gzthat 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

完整脚本:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #!/bin/bash2

3 curCMD=$1

4

5 # set-x6 set-o nounset7 set-o errexit8 set-o pipefail9

10 dockerMySQLInstanceName=mysql_sensestudy11 dbPort=3307

12 dbRootPwd=123

13 dbSensestudyDbName=sensestudydev14 dbSensestudyUsername=sensestudy15 dbSensestudyUserPwd="xxx"

16 dbSensestudyDbInitSqlFilePath=init.sql17

18

19 #docker service is required20 #echo check if docker service has started ...

21 if [ ` systemctl is-active docker` != "active" ]; then ` systemctl start docker` ;fi22 #echodocker service started23

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=utf839

40 echo create mysql from docker done.

41 } # -v $PWD/mysql_script:/docker-entrypoint-initdb.d42

43

44 #初始化Docker里MySQL数据库数据,也可以把sql脚本所在目录的绝对路径挂载到/docker-entrypoint-initdb.d45 function initMySQLData()

46 {47 echo init db data ...

48 set-x49

50 docker cp $dbSensestudyDbInitSqlFilePath $dockerMySQLInstanceName:/$dbSensestudyDbInitSqlFilePath51 docker exec $dockerMySQLInstanceName \

52 /bin/sh -c " mysql -uroot -p$dbRootPwd $dbSensestudyDbName < /$dbSensestudyDbInitSqlFilePath "

53 set +x54

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 createMySQL68 sleep 15

69 initMySQLData70 else

71 docker container start $dockerMySQLInstanceName72 fi73

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 $dockerMySQLInstanceName85 fi86 echo stop $dockerMySQLInstanceName done.

87 }88

89

90 #删除容器91 function remove()

92 {93 #first stop94 stop95

96 # thenremove97 echo delete $dockerMySQLInstanceName ...

98 if [ "`docker ps -a| grep ${dockerMySQLInstanceName}`" != ""]99 then

100 docker container rm $dockerMySQLInstanceName101 fi102 echo delete $dockerMySQLInstanceName done.

103 }104

105 function restart()

106 {107 stop108 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 fi120 }121

122

123

124 if [ "$curCMD" = "start"]125 then

126 start

127

128 elif [ "$curCMD" = "stop"]129 then

130 stop131

132 elif [ "$curCMD" = "restart"]133 then

134 restart135

136 elif [ "$curCMD" = "status"]137 then

138 status139

140 elif [ "$curCMD" = "remove"]141 then

142 remove143

144

145 else

146 echo "error command: please use option: start|stop|restart|status|remove"

147 fi

View Code

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值