Docker部署mysql5.7.28与数据持久化

  • 作者:lwj
  • 分类:Docker
  • 发表日期:2019-12-21 15:59:26
  • 阅读(1722)
  • 评论(0)

目的:docker容器部署mysql5.7.28,mysql数据文件与log写入到宿主机目录(数据持久化)

下载mysql镜像

进入mysql镜像库选择版本为5.7.28的镜像,并下载

docker pull mysql:5.7.28

启动mysql容器

1. 启动mysql容器

docker run --name mysql_test -d -e MYSQL_ROOT_PASSWORD=123456  -p 3307:3306 mysql:5.7.28

 run:启动容器的命令

 --name:并容器的命名

 -d:让容器后台运行(其他对应参数:-i交互式操作,-t开启一个伪终端)

 -e MYSQL_ROOT_PASSWORD:初始化root用户的密码为123456

 -p将容器的3306端口映射到主机的3307端口

 mysql:5.7.28:mysql镜像的仓库名与标签,也可直接通过镜像id启动

2. 进入mysql容器查看mysql配置文件路径

docker exec -it mysql_test sh      # 进入mysql容器
mysql -uroot -p123456              # 进入root账号登录mysql

3. 查看mysql配置中数据文件与日志文件路径

show variables like 'general_log_file';           # 日志文件路径
show variables like 'log_error';                  # 错误日志文件路径
show variables like 'slow_query_log_file';        # 慢查询日志文件路径
show variables like 'datadir';                    # 查看数据库数据文件路径

查看结果发现日志、慢查询日志和数据文件都位于容器/var/lib/mysql,错误日志权限未配置

既然如此,我们就挂载个空目录成容器的/var/lib/mysql并修改配置文件将错误日志文件也一起放到此路径

准备挂载目录与文件

1. 宿主机下新建挂载目录和日志文件

sudo mkdir -p /home/docker_data/mysql

注: 路径必须为绝对路径,宿主机目录如果不存在,则会自动生成

2. 修改挂载文件/home/docker_data/mysql的所有者权限为999

sudo chown 999 /home/docker_data/mysql

3. 将容器mysql_test的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf复制到宿主机目录/home/test

# 退出容器mysql_test
exit                                                                           
# 复制mysql配置文件mysqld.cnf到宿主机目录/home/test
docker cp mysql_test:/etc/mysql/mysql.conf.d/mysqld.cnf /home/test   

4. 修改配置文件错误日志路径为/var/lib/mysql

vim /home/test/mysqld.cnf                      # 编辑配置文件mysqld.cnf
#log-error      = /var/log/mysql/error.log     # 修改前
log-error      = /var/lib/mysql/error.log      # 修改后

5. 删除容器mysql_test

docker stop mysql_test         # 停止
docker rm mysql_test           # 删除

docker启动mysql容器

1. 启动mysql容器并挂载文件到宿主机

docker run --name mysql_5.7.28 -d -e MYSQL_ROOT_PASSWORD=123456 -v /home/docker_data/mysql:/var/lib/mysql -p 3307:3306 mysql:5.7.28

-v:  将宿主机目录挂载到容器(-v /home/docker_mysql/datadir:/var/lib/mysql 将宿主机的/home/docker_mysql/datadir挂载到容器的/var/lib/mysql目录,-v 参数可重复多次, 每次挂载一个目录到容器)

2. 将宿主机的配置文件/home/test/mysqld.cnf复制到容器mysql_5.7.28的/etc/mysql/mysql.conf.d下

docker cp /home/test/mysqld.cnf  mysql_5.7.28:/etc/mysql/mysql.conf.d

3. 重启容器并查看docker容器运行情况

docker ps -a

4. 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

若挂载文件的所有者权限未正确设置会启动失败并报权限不足(如下图):

5. 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 3307
6. 查看数据库文件夹datadir中多了个数据库文件-test_2019,至此mysql部署完成

觉得不错,支持一下!

提交评论

您尚未登录,登录之后方可评论~ 登录 or 注册

评论列表

暂无评论
返回顶部

建议反馈

1. 可在博文底部留言评论

2. 发邮件到i_suichuan@163.com