Docker快速部署数据库


20220709_Docker快速部署数据库

修订记录:
20220709: 创建文档
20230103: 新增python连接mysql
20230717: mongo新增踩坑记录

前言

在学习Docker的基本操作之后,最近恰好遇到一个需要搭建数据库的需求,今天就来一次数据库docker版本的安装配置笔记.其中,Mysql部分记录了通过Dockerhub官方帮助文档完成数据库的安装部署,主要记录思路,mongo部分不在赘述,主要记录操作

mysql

明确需求

在Linux服务器上快速部署Docker版本mysql,并暴露端口外部连接数据库

mysql安装

  1. Dockerhub确认官方镜像信息

    1. dockerhub搜索mysql,选择官方镜像

    2. 查看部署服务命令

      $ 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

    3. 查看挂载目录

      mysql 2个重要的挂载目录分别为Mysql Configuration File 和mysql数据存放地址,可以帮助文档-使用方法中找到

      /etc/mysql/conf    # Mysql Configuration File
      /var/lib/mysql    # mysql数据存放地址

      官方文档在提供挂载目录路径时还会提供 参考命令, 所有使用 ‘-v ‘可以快速搜索到这些内容

    4. 默认端口确认

      在官方文档没有找到默认端口文件,百度查询为3306

  2. 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

后台访问数据库

  1. 进入docker环境

    docker exec -it mysql bash
  2. 链接数据库

    mysql -P 3306 -u root -p $密码
  3. 授予刷新权限

    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官方技术合作工具

  1. 云服务器设置暴露端口(非云服务器跳过)

    进入服务器管理后台 -> 防火墙 -> 添加规则 ,可看到下图页面

    协议设置为TCP, 填写数据库端口,即完成端口暴露

防火墙规则添加
  1. studio 3T free 连接数据库

    1. 官网下载安装 : Free MongoDB GUI | Studio 3T

    2. 建立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()

参照:Python进阶知识全篇-MySQL(PyMySQL) - 知乎 (zhihu.com)

Python连接MySQL数据库方法介绍(超详细!手把手项目案例操作!) - 知乎 (zhihu.com)


Author: Feny Lau
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Feny Lau !
  TOC