Docker部署全栈:四、安装MySQL

Docker部署全栈项目:四、MySQL 镜像

这里使用的是 MariaDB 镜像,与 MySQL 一样。

一、编写启动脚本

1. start.sh

#!/bin/bash

# 启动前先尝试停止该服务
docker stop luokaiii-mysql
docker rm luokaiii-mysql

# 运行服务
docker run --name luokaiii-mysql \ # 指定容器服务名称
        -p 3307:3306 \ # 将容器的3306端口映射到宿主机的3307端口
        -v /${PWD}/conf/local.cnf:/etc/mysql/conf.d/local.cnf \ # 使用自定义的配置文件(Windows环境下必不可少!)
        -v /${PWD}/data:/var/lib/mysql \ # 挂载数据目录
        -e MYSQL_ROOT_PASSWORD=password \ # MySQL初始密码
        -d mariadb:10.4.8 \ # 后台运行指定版本
        --character-set-server=utf8mb4 \ # 指定字符集
        --collation-server=utf8mb4_unicode_ci

2. conf/local.cnf

指定 InnoDB 的刷新方法,否则会出现数据目录无法挂载的异常。当出现该异常后,请先清空 ./data 目录。

[mysqld]
innodb_flush_method=O_DSYNC

数据无法挂载,data目录未清空

二、执行启动脚本

$ cd /home/luokaiii/images/mysql   # 脚本和DB文件的存放位置

$ mkdir data   # 创建存储目录
$ vim conf/local.cnf  # 编写配置文件,填入innodb_flush_method=O_DSYNC

$ ./start.sh   # 运行刚刚写的脚本
994e9e05bb42d1d.....  # 控制台打印这种的,即表示启动成功

三、测试连接

连接MySQL

四、遇到的问题

1. 问题:在 Windows 环境下,无法挂载 数据目录 至容器中。

图:启动失败,无法挂载数据目录

原因:

未指定 innodb_flush_method=O_DSYNC

Linux 环境下不需要

解决方法:

  1. 编写 /conf/local.cnf 并挂载到 mariadb 容器
  2. 删除之前 ./data 下的所有数据
  3. 并重新执行启动脚本

参考资料:

  1. Docker Hub
  2. Github Issue

项目地址

文章作者: koral
文章链接: http://luokaiii.github.io/2019/09/21/读书笔记/《Docker全栈项目部署》/4.MariaDB/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自