本博文部署MySQL 并与上篇部署的 Flask进行关联
主博客目录:《从零开始学习搭建量化平台笔记》
主项目计划需要搭建一个MySQL 数据库为其他部件提供数据,为了避免搭完就忘,因此就有了这个博客。
任务:搭建一个MySQL容器,给Flask部件提供一个只读用户权限,用来读取数据并生成网页。
# 创建工作目录
mkdir mysql
cd mysql
# 创建映射目录
mkdir conf datadir mysir source
touch conf/my.cnf
vim conf/my.cnf
编写 mysql配置文件:
[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, 需注意缩进:
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
查看是否创建成功:
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命令操作。
查看已有数据库名称:
SHOW DATABASES;
创建新的数据库flask_ex
CREATE DATABASE flask_ex;
删除数据库命令:
DROP DATABASE flask_ex;
显示所有用户与端口,用户与端口绑定为唯一账户
SELECT user,host FROM mysql.user;
创建flask只读用户,只对flask端口开放(网桥端口映射在上篇博文中设置过):
CREATE USER 'flask_web'@'flask.my-bridge' IDENTIFIED BY "password";
显示用户所有权限:
SHOW grants for 'flask_web'@'flask.my-bridge';
清除用户所有权限
REVOKE all on *.* from 'flask_web'@'flask.my-bridge';
更改用户对flask_ex
数据库只有只读权限:
GRANT SELECT ON flask_ex.* TO 'flask_web'@'flask.my-bridge' IDENTIFIED BY "password";
显示用户所有权限:
SHOW grants for 'flask_web'@'flask.my-bridge';
若添加成功,这样我们对flask端口的只读用户就创建完毕了。
以下为创建用户并开放权限通用命令:
# 创建只读账户
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';