1、docker安装mysql
docker run -d --restart=always --network=host --name mysql-server -v /home/data/mysql/conf:/etc/mysql/conf.d -v /home/data/mysql/data:/var/lib/mysql -v /home/data/mysql/log:/logs -e MYSQL_ROOT_PASSWORD=root mysql:5.7
解读:需要暴露端口,挂载卷
环境变量
MYSQL_ROOT_PASSWORD
此变量是必需的,并指定将为 MySQLroot
超级用户帐户设置的密码。在上面的例子中,它被设置为my-secret-pw
。
MYSQL_DATABASE
此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对此数据库的超级用户访问权限(对应于)。GRANT ALL
MYSQL_USER
,MYSQL_PASSWORD
这些变量是可选的,用于创建新用户和设置该用户的密码。该用户将被授予MYSQL_DATABASE
变量指定的数据库的超级用户权限(见上文)。要创建用户,这两个变量都是必需的。
请注意,无需使用此机制来创建超级用户超级用户,默认情况下会使用MYSQL_ROOT_PASSWORD
变量指定的密码创建该用户。
MYSQL_ALLOW_EMPTY_PASSWORD
这是一个可选变量。设置为非空值,例如yes
,以允许使用 root 用户的空白密码启动容器。注意:除非您真的知道自己在做什么,否则不建议将此变量设置yes
为,因为这将使您的 MySQL 实例完全不受保护,从而允许任何人获得完全的超级用户访问权限。
MYSQL_RANDOM_ROOT_PASSWORD
这是一个可选变量。设置为非空值,例如yes
,为 root 用户生成一个随机初始密码(使用pwgen
)。生成的 root 密码将打印到 stdout ( GENERATED ROOT PASSWORD: .....
)。
MYSQL_ONETIME_PASSWORD
初始化完成后将root(不是!中指定的用户MYSQL_USER
)用户设置为过期,强制在首次登录时更改密码。任何非空值都将激活此设置。注意:此功能仅在 MySQL 5.6+ 上受支持。在 MySQL 5.5 上使用此选项将在初始化期间引发适当的错误。
MYSQL_INITDB_SKIP_TZINFO
默认情况下,入口点脚本会自动加载CONVERT_TZ()
函数所需的时区数据。如果不需要,任何非空值都会禁用时区加载。
挂载数据目录
Docker 文档是了解不同存储选项和变体的良好起点,并且有多个博客和论坛帖子在该领域讨论和提供建议。我们将在这里简单地展示上面后一个选项的基本过程:
-
在主机系统上的合适卷上创建数据目录,例如
/my/own/datadir
. -
像这样启动你的
mysql
容器:$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
该-v /my/own/datadir:/var/lib/mysql
命令的一部分/my/own/datadir
将底层主机系统中的目录安装/var/lib/mysql
在容器内,默认情况下 MySQL 将在其中写入其数据文件。
备份数据库实例的数据
大多数普通工具都可以工作,尽管在某些情况下它们的使用可能有点复杂,以确保它们可以访问mysqld
服务器。确保这一点的一种简单方法是docker exec
从同一个容器中使用和运行该工具,类似于以下内容:
$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
#!/bin/bash set -e HOME_DIR=/home/backup DATE=`date +%Y%m%d%H` ZIP_NAME=$DATE".tar.gz" startTime=`date +%Y%m%d-%H:%M:%S` startTime_s=`date +%s` cd $HOME_DIR mkdir -p $DATE docker exec -i mysql mysqldump -u root -pbG7*bN --all-databases --default-character-set=utf8 --hex-blob > ${DATE}/all_databases.sql echo "dump all databases" echo "compress" tar -czvPf $ZIP_NAME $DATE --remove-files echo "clean backup before 30days" find ${HOME_DIR} -mtime +30 -name "*.gz" -exec rm -rf {} \; endTime=`date +%Y%m%d-%H:%M:%S` endTime_s=`date +%s` sumTime=$[ $endTime_s - $startTime_s ] echo "backup completed $startTime ---> $endTime" "Total:$sumTime seconds"
还原数据库的数据
用于恢复数据。您可以使用docker exec
带有-i
标志的命令,类似于以下内容:
$ docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql