Docker - Mysql部署

简介

MySQL是一个小型的开源的关系型数据库管理系统,与其他大型数据库管理系统例如Oracle、DB2、SQL Server等相比,MySQL规模小,功能有限,但是它体积小、速度快、成本低,且它提供的功能对稍微复杂的应用已经够用,这些特性使得MySQL成为世界上最受欢迎的开放源代码数据库。

一、拉取镜像

docker pull mysql:latest

二、安装程序

1. 创建临时容器将配置文件copy到磁盘
# 创建保存目录
mkdir -p /data/mysql/conf
docker run -d --name temp_mysql -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" mysql
docker cp temp_mysql:/etc/mysql/. /data/mysql/conf
docker cp temp_mysql:/etc/my.cnf /data/mysql/conf
docker rm -f temp_mysql
# 修改权限为644,否则会出现:mysql: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored.
chmod 644 /data/mysql/conf/my.cnf
2. 为了简化设置,此先设置空密码,下边再进行修改
docker run -d \
--name mysql \
--restart=unless-stopped \
-p 3306:3306 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/mysql/conf:/etc/mysql \                    # 映射配置
-v /data/mysql/logs:/var/log/mysql \                # 映射日志
-v /data/mysql/data:/var/lib/mysql \                # 映射数据
-v /data/mysql/mysql-files:/var/lib/mysql-files \   # 映射文件目录
-e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" \               # 先设置空密码
-e "TZ=Asia/Shanghai" \
mysql

三、设置密码及外网访问

docker exec -it mysql /bin/bash   # 进入mysql容器,也可以使用 Portainer
mysql -u root                     # 在容器内登录mysql数据库,创建时未指定密码,所以不需要填写密码

# 切换到mysql数据库
use mysql;
select host,user from user;                         # 查询主机及用户
# 当不存在'root'@'%'用户时
update user set host = '%' where user = 'root';     # %表示允许root被所有IP访问
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'PE307I1P7PMnp1JQyiTGBSMqEhPq8zV7' PASSWORD EXPIRE NEVER;    # 设置密码并永不过期
flush privileges;     # 使修改立即生效

四、连接测试

使用连接工具测试,本示例使用的是:Navicat

五、扩展配置

1. 调整 sql_mode = only_full_group_by,修改 my.cnf配置文件,重启 mysql容器后生效

[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
分享到:
本文链接:https://blog.renzicu.com/2021/microservices/mysql/index.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
THE END
二维码
打赏
文章目录
关闭
目 录