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
二、执行启动脚本
$ cd /home/luokaiii/images/mysql # 脚本和DB文件的存放位置
$ mkdir data # 创建存储目录
$ vim conf/local.cnf # 编写配置文件,填入innodb_flush_method=O_DSYNC
$ ./start.sh # 运行刚刚写的脚本
994e9e05bb42d1d..... # 控制台打印这种的,即表示启动成功
三、测试连接
四、遇到的问题
1. 问题:在 Windows 环境下,无法挂载 数据目录 至容器中。
原因:
未指定 innodb_flush_method=O_DSYNC
。
Linux 环境下不需要
解决方法:
- 编写
/conf/local.cnf
并挂载到mariadb 容器
中 - 删除之前 ./data 下的所有数据
- 并重新执行启动脚本
参考资料: