Docker:docker安装MySQL并同步数据到本机
先了解MySQL启动方式
MySQL启动是要设置密码的,因此去官方查看启动命令。
MySQL dockerhub地址:https://registry.hub.docker.com/_/mysql
# 管帆帆测试运行命令
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 参数解析
-e代表配置环境;
MYSQL_ROOT_PASSWORD此变量是强制性的,并指定将为MySQL超级用户帐户设置的密码
拉取MySQL镜像
我这里指定拉取5.7的MySQL版本
# MySQL镜像,TAG[5.7]
[root@localhost /]# docker pull mysql:5.7
MySQL数据持久化到本地
MySQL数据持久化问题,数据不能只存在容器中,不安全,需要同步到本地。
第一次启动,设置MYSQL_ROOT_PASSWORD
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
参数解析
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
查看目录挂载情况
Mounts信息
"Mounts": [
{
"Type": "bind",
"Source": "/home/mysql/conf",
"Destination": "/etc/mysql/conf.d",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/home/mysql/data",
"Destination": "/var/lib/mysql",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
本机目录查看
[root@localhost /]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
54d46f730f41d9aacb1c79e34cf8fbaa12b5fb7f2cb9b1d95a9632c8907a9b16
[root@localhost /]# cd /home/mysql/data
[root@localhost data]# ll
total 188484
-rw-r-----. 1 polkitd input 56 Jan 6 03:14 auto.cnf
-rw-------. 1 polkitd input 1680 Jan 6 03:14 ca-key.pem
-rw-r--r--. 1 polkitd input 1112 Jan 6 03:14 ca.pem
-rw-r--r--. 1 polkitd input 1112 Jan 6 03:14 client-cert.pem
-rw-------. 1 polkitd input 1680 Jan 6 03:14 client-key.pem
-rw-r-----. 1 polkitd input 1352 Jan 6 03:14 ib_buffer_pool
-rw-r-----. 1 polkitd input 79691776 Jan 6 03:33 ibdata1
-rw-r-----. 1 polkitd input 50331648 Jan 6 03:33 ib_logfile0
-rw-r-----. 1 polkitd input 50331648 Jan 6 03:14 ib_logfile1
-rw-r-----. 1 polkitd input 12582912 Jan 6 03:33 ibtmp1
drwxr-x---. 2 polkitd input 4096 Jan 6 03:14 mysql
drwxr-x---. 2 polkitd input 8192 Jan 6 03:14 performance_schema
-rw-------. 1 polkitd input 1676 Jan 6 03:14 private_key.pem
-rw-r--r--. 1 polkitd input 452 Jan 6 03:14 public_key.pem
-rw-r--r--. 1 polkitd input 1112 Jan 6 03:14 server-cert.pem
-rw-------. 1 polkitd input 1680 Jan 6 03:14 server-key.pem
drwxr-x---. 2 polkitd input 8192 Jan 6 03:14 sys
[root@localhost data]#
数据持久化
# 强制删除运行中的容器
docker rm rf 1d2db7256fa2
即使删除掉容器,本地数据依然存在。
MySQL环境变量:Environment Variables
变量名 | 含义 |
---|---|
MYSQL_ROOT_PASSWORD | 此变量是强制性的,并指定将为MySQL超级用户帐户设置的密码 |
MYSQL_DATABASE | 此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(请参见下面),则将授予该用户对此数据库的超级用户访问权限(对应于授予ALL)。 |
MYSQL_USER,MYSQL_PASSWORD | 这些变量是可选的,用于创建新用户和设置该用户的密码。对于MySQL_DATABASE变量指定的数据库,将授予该用户超级用户权限(参见上文)。创建用户需要这两个变量。请注意,没有必要使用此机制来创建超级用户,默认情况下,该用户将使用MySQL_ROOT_Password变量指定的密码创建该用户。 |
MYSQL_ALLOW_EMPTY_PASSWORD | 这是一个可选变量。设置为非空值,如“YES”,允许以根用户的空白密码启动容器。注意:不建议将这个变量设置为YES,除非您真正知道自己在做什么,因为这将使MySQL实例完全不受保护,允许任何人获得完全的超级用户访问权限。 |
MYSQL_RANDOM_ROOT_PASSWORD | 这是一个可选变量。设置为非空值,比如是,为根用户生成一个随机的初始密码(使用pwgen)。生成的根密码将打印到stdout(生成的根密码:.)。 |
MYSQL_ONETIME_PASSWORD | 设置root(不是MySQL_USER中指定的用户!)用户在完成后即过期,迫使用户在第一次登录时更改密码。任何非空值都将激活此设置。注意:MySQL 5.6+只支持此特性。在MySQL5.5上使用此选项将在初始化期间抛出一个适当的错误。 |
MYSQL_INITDB_SKIP_TZINFO | 默认情况下,入口点脚本会自动加载转换_tz()函数所需的时区数据。如果不需要,则任何非空值都将禁用时区加载。 |