思路: docker容器部署mysql5.7.28,mysql配置文件挂载宿主机(方便修改),mysql数据库文件与log写入到宿主机目录(数据持久化)
下载mysql镜像
进入mysql镜像库选择5.7.28的镜像,并下载
docker pull mysql:5.7.28
准备挂载目录与文件
1. 宿主机下新建数据库文件目录
sudo mkdir -p /home/docker_mysql/datadir
2. 宿主机下新建数据库的log文件夹
sudo mkdir -p /home/docker_mysql/logs
3. 新建mysql的配置文件mysqld.cnf
sudo vim /home/docker_mysql/mysql.conf.d/mysqld.cnf
配置文件信息为:
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306 # 端口
basedir = /usr
datadir = /var/lib/mysql # 数据库文件路径
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
# bind-address = 127.0.0.1 # 访问权限按自己需求设置
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover-options = BACKUP
query_cache_limit = 1M
query_cache_size = 16M
log_error = /var/log/mysql/error.log # log文件路径(只保留异常日志)
expire_logs_days = 10
max_binlog_size = 100M
4. 修改logs文件的所有者权限为700
sudo chown 700 /home/docker_mysql/logs
docker启动mysql容器
1. 启动mysql容器并挂载对应文件
docker run --name mysql_5.7.28 -d -e MYSQL_ROOT_PASSWORD=123456 -v /home/docker_mysql/datadir:/var/lib/mysql -v /home/docker_mysql/logs:/var/log/mysql -v /home/docker_mysql/mysql.conf.d:/etc/mysql/mysql.conf.d -p 3307:3306 mysql:5.7.28
run:启动容器的命令
--name:并容器的命名
-d:让容器后台运行(其他对应参数:-i交互式操作,-t开启一个伪终端)
-e MYSQL_ROOT_PASSWORD:初始化root用户的密码为123456
-v: 将宿主机目录挂载到容器(-v /home/docker_mysql/datadir:/var/lib/mysql 将宿主机的/home/docker_mysql/datadir挂载到容器的/var/lib/mysql目录,-v 参数可重复多次, 每次挂载一个目录到容器)
-p:将容器的3306端口映射到主机的3307端口
mysql:5.7.28:mysql镜像的仓库名与标签,也可直接通过镜像id启动
2. 查看docker容器
docker ps -a
3. docker日志查看启动情况
docker logs -t -f --tail=10 mysql_5.7.28
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例子:
查看指定时间后的日志,只显示最后100行:
$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
查看最近30分钟的日志:
$ docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
查看某时间段日志:
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
注:若logs文件的所有者权限未正确设置会启动失败并报权限不足(如下图):
4. navicat连接成功并新建个数据库-test_2019
或者直接服务器命令行连接
mysql -h 127.0.0.1 -uroot -p123456 -P3307
或者:mysql -h mysql容器IP -uroot -p123456 -P3306
注:-h 指定ip -u指定用户名 -p指定密码 -P指定端口号
查看容器IP方法
方法一 docker inspect 容器的id或者容器名 | grep IPAddress
方法二 sudo docker inspect -f='{{.NetworkSettings.IPAddress}}' $(sudo docker ps -a -q)
方法三 ps -aux | grep 3306
5. 查看数据库文件夹datadir中多了个数据库文件-test_2019,至此mysql部署完成