20220709_Docker快速部署数据库
修订记录:
20220709: 创建文档
20230103: 新增python连接mysql
20230717: mongo新增踩坑记录
前言
在学习Docker的基本操作之后,最近恰好遇到一个需要搭建数据库的需求,今天就来一次数据库docker版本的安装配置笔记.其中,Mysql部分记录了通过Dockerhub官方帮助文档完成数据库的安装部署,主要记录思路,mongo部分不在赘述,主要记录操作
mysql
明确需求
在Linux服务器上快速部署Docker版本mysql,并暴露端口外部连接数据库
mysql安装
Dockerhub确认官方镜像信息
dockerhub搜索mysql,选择官方镜像
查看部署服务命令
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
dockerhub的帮助文档的格式一般为 快速参照-> 软件介绍 -> 使用方法.在使用方法中可以轻松找到
第2步中的部署服务命令里面指定了默认root用户的创建方式:
其中
my-secret-pw
is the password to be set for the MySQL查看挂载目录
mysql 2个重要的挂载目录分别为Mysql Configuration File 和mysql数据存放地址,可以帮助文档-使用方法中找到
/etc/mysql/conf # Mysql Configuration File /var/lib/mysql # mysql数据存放地址
官方文档在提供挂载目录路径时还会提供 参考命令, 所有使用 ‘-v ‘可以快速搜索到这些内容
默认端口确认
在官方文档没有找到默认端口文件,百度查询为3306
Docker 快速部署
docker run -id --name mysql -e MYSQL_ROOT_PASSWORD=$my_pw -p 3306:3306 -v mysql_configdb:/etc/mysql/conf -v mysql_db:/var/lib/mysql mysql # -e 代表设置环境变量,在此命令里面我们用来设置默认账号密码 账号名:root 密码: $my_pw
后台访问数据库
进入docker环境
docker exec -it mysql bash
链接数据库
mysql -P 3306 -u root -p $密码
授予刷新权限
grant all privileges on *.* to 'root'@'%' ; flush privileges;
外部访问数据库
使用DBeaver等工具, 直接连接即可
连接时如发生’Public Key Retrieval is not allowed’问题,可以尝试在数据库一栏加入
?allowPublicKeyRetrieval=true
进行忽略
参照:(86条消息) docker部署mysql 实现远程连接_眼沉沉的博客-CSDN博客_docker 连接mysql
mongo
mongo安装
docker run -d -p 27017:27017 -v mongo_configdb:/data/configdb -v mongo_db:/data/db --name mongo docker.io/mongo # 启动mongo Dockerhub帮助文档里,我们知道了该镜像映射的端口号是27017,配置文件的位置在/data/configdb,数据库文件的位置在/data/db。
docker exec -it mongo bash # 进入容器环境
# 部署例子2
docker run -d -p 27018:27017 -v mongo_configdb:/data/configdb -v /home/data/mongo_space/db:/data/db --name test_mongo2 -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=TestWeb123@Neo mongo:4.4.6 # 这里制定了db外挂目录以及root账号Miami
mongo shell 访问
mongo官方镜像,应用路径即系统根路径,找到bin目录下的mongo即可进入mongo shell页面进行操作
./bin/mongo admin # 使用管理员身份进入mongo shell
使用studio 3T访问
studio 3T free为studio 3T免费版,免费开源的 mongo GUI 管理工具, studio 3T则是mongodb官方技术合作工具
云服务器设置暴露端口(非云服务器跳过)
进入服务器管理后台 -> 防火墙 -> 添加规则 ,可看到下图页面
协议设置为TCP, 填写数据库端口,即完成端口暴露
studio 3T free 连接数据库
官网下载安装 : Free MongoDB GUI | Studio 3T
建立connection, 填写服务器ip地址及端口
安装踩坑记录
Permission denied
安装后容器启动失败, 查看docker日志提示””
find: '/data/db': Permission denied
chown: changing ownership of '/data/db': Permission denied
原因: linux selinux安全访问策略限制
解决:
getenforce # 获取selinux开启状态
setenforce 0 # 临时关闭selinux
docker start $container_id # 启动容器
PostGresql
Pgsql与Mysql相比最大的优势, 是支持几何图形, XML, Json等多种高级数据类型
TODO
python链接mysql
python通过pymysql连接mysql
使用conda(或pip)安装pymysql后,
conda install pymysql
使用connnect和cursor对象连接mysql服务器
# -*- coding: utf-8 -*-
import pymysql
# 创建connect和cursor对象
conn=pymysql.connect(host = '127.0.0.1' # 连接名称,默认127.0.0.1
,user = 'root' # 用户名
,passwd='password' # 密码
,port= 3306 # 端口,默认为3306
,db='test' # 数据库名称
,charset='utf8' # 字符编码
)
cur = conn.cursor()
# sql查询语句
sql = 'show tables'
cur.execute(sql)
# 获取响应
data= cur.fetchall()
print(data)
# sql执行语句
sql = f"insert into tx_mysql_1(group_name,create_time) values('{group_name}','{createtime}')"
try:
# 执行sql语句
cur.execute(sql)
# 提交到数据库执行
conn.commit()
except:
# 如果发生错误则回滚
conn.rollback()
conn.rollback()
# 关闭connect和cursor
cur.close()
conn.close()