docker-compose 简单部署MySQL Database

docker-compose 简单部署MySQL Database

本博文部署MySQL 并与上篇部署的 Flask进行关联

主博客目录:《从零开始学习搭建量化平台笔记》


文章目录

  • [docker-compose 简单部署MySQL Database](#docker-compose 简单部署MySQL Database)
    • [部署 MySQL](#部署 MySQL)
    • [MySQL 开放端口与权限](#MySQL 开放端口与权限)

主项目计划需要搭建一个MySQL 数据库为其他部件提供数据,为了避免搭完就忘,因此就有了这个博客。

任务:搭建一个MySQL容器,给Flask部件提供一个只读用户权限,用来读取数据并生成网页。

部署 MySQL

bash 复制代码
# 创建工作目录
mkdir mysql
cd mysql
# 创建映射目录
mkdir conf datadir mysir source
touch conf/my.cnf

vim conf/my.cnf 编写 mysql配置文件:

my.cnf 复制代码
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
character-set-client-handshake=FALSE
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

vim docker-compose.yml 编写 docker-compose.yml, 需注意缩进:

docker-compose.yml 复制代码
version: '3'

networks:
    n-bridge:
        external: true

services:
    varsql:
        image: mysql
        container_name: mysql
        ports:
            - "3306:3306"
        volumes:
            - mysql/mydir:/mydir
            - mysql/datadir:/var/lib/mysql
            - mysql/conf/my.cnf:/etc/my.cnf
            # 数据库还原目录 可将需要还原的sql文件放在这里
            - mysql/source:/docker-entrypoint-initdb.d
        restart: always

        logging:
            driver: json-file
            options:
                max-size: "20m" # 单个文件大小为20m
                max-file: "2" # 最多2个文件
        environment:
            MYSQL_DATABASE: YourDatabaseName
            MYSQL_ROOT_PASSWORD: YourPassword
            TZ: Asia/Shanghai
        networks:
            n-bridge:
                ipv4_address: 171.171.0.4

MySQL 开放端口与权限

查看是否创建成功:

复制代码
sudo docker ps

若 STATUS != Up 可以查看 logs 排查问题:

复制代码
sudo docker logs mysql --tail=100

进入MySQL Docker容器:

复制代码
sudo docker exec -it mysql /bin/bash

运行 MySQL:

复制代码
mysql -uroot -p

再输入docker compose 中填写的密码。

若登录成功,进行SQL命令操作。

查看已有数据库名称:

sql 复制代码
SHOW DATABASES;

创建新的数据库flask_ex

sql 复制代码
CREATE DATABASE flask_ex;

删除数据库命令:

sql 复制代码
DROP DATABASE flask_ex;

显示所有用户与端口,用户与端口绑定为唯一账户

sql 复制代码
SELECT user,host FROM mysql.user;

创建flask只读用户,只对flask端口开放(网桥端口映射在上篇博文中设置过):

sql 复制代码
CREATE USER 'flask_web'@'flask.my-bridge' IDENTIFIED BY "password";

显示用户所有权限:

sql 复制代码
SHOW grants for 'flask_web'@'flask.my-bridge';

清除用户所有权限

sql 复制代码
REVOKE all on *.* from 'flask_web'@'flask.my-bridge';

更改用户对flask_ex数据库只有只读权限:

sql 复制代码
GRANT SELECT ON flask_ex.* TO 'flask_web'@'flask.my-bridge' IDENTIFIED BY "password";

显示用户所有权限:

sql 复制代码
SHOW grants for 'flask_web'@'flask.my-bridge';

若添加成功,这样我们对flask端口的只读用户就创建完毕了。

以下为创建用户并开放权限通用命令:

sql 复制代码
# 创建只读账户
CREATE user 'username'@'%' IDENTIFIED BY "password";
GRANT SELECT ON dbname.* TO 'username'@'%' IDENTIFIED BY "password";
FLUSH PRIVILEGES;

# 赋予部分权限
GRANT select,delete,update,insert ON dbname.* TO 'username'@'%' IDENTIFIED BY "password    ";

# 创建完整账户
GRANT all privileges ON dbname.* TO 'username'@'%' IDENTIFIED BY "password";


# 修改密码
update user set password = password('password') where user = 'username';


# 查看本地root的权限,没有指定后面的localhost则默认为'%'
show grants for root@'localhost';
相关推荐
数智启示录6 小时前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
Java小白笔记6 小时前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
—Miss. Z—6 小时前
计算机三级数据库技术—填空题
数据库·mysql
数智启示录7 小时前
Apache Kafka 同 Key 仍会乱序:从分区 Offset 到业务可见的四道边界 【Kafka 合集】
大数据·数据库·经验分享·分布式·面试·kafka·apache
郝开7 小时前
Docker Compose 模块化多环境配置规范指南:示例搭建Kibana 9.4.2
docker·容器·kibana
烬羽7 小时前
给 Agent 一个检索式记忆:把对话历史存进 Milvus,该记的都记得
javascript·数据库·agent
星云API技术支持7 小时前
企业微信二次开发外部群:群聊数据与联系人信息如何建立关联
数据库·php·企业微信
我不是程序员三三7 小时前
桌面管理软件哪个最好?从一次上线翻车事故,拆解选型评估与配置落地全流程
数据库
落木萧萧8257 小时前
MyBatis 关联查询的四种写法,为什么最后都变回了手写 XML
java·数据库·后端
春风解人意7 小时前
从零开始学习嵌入式P35----数据库
数据库·嵌入式硬件·学习