MySQL

前言

这几天和小伙伴一起做期末课设,需要大家一起共同开发,因为一开始设计数据库的时候,会存在一点缺陷,在开发过程中,有时候需要修改数据库某些字段,如果没有及时同步数据库的话,会导致效率低下,如果大家共同使用一个数据库就不会出现这个问题,一旦有修改大家都知道,所以就出现了下文。

准备工作

新建几个文件夹来存储MYSQL数据库的相关数据。

  • mydir:自定义的文件夹,用于宿主机和容器数据交换(可无视)
  • db:数据库的存放数据地方,比如新建后的数据库、数据库表存放的地方
  • conf:存储mysql数据库的配置文件
  • init:用户初始化数据库,将你一些旧的数据库的sql文件放到文件夹下,mysql容器会自动帮你导入到数据库中。

我将mysql数据库容器放置在/home/docker/mysql/下,新建文件夹存储数据。

1
2
sudo cd /home/docker/mysql
sudo mkdir -p {mydir,db,conf,init}

设置配置

conf文件夹下新建一个my.cnf文件,用于设置数据库的编码格式。

1
sudo vim ./conf/my.cnf

将以下内容写入到my.cnf

1
2
3
4
5
6
7
8
9
10
11
[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

恢复旧的数据库(可选)

如果你有需要恢复的数据库,你可以将旧的数据库文件.sql存放到/mysql/init/文件夹下,这样之后再使用docker-compose启动容器时,会自动加载你的数据库文件,自动帮你导入。

如果你没有需要恢复的数据库,那你可以跳过这一步。

编写docker-compose.yml

前面的准备工作基本差不多了,现在来编写我们需要的容器,根据自己的需求来编写。我这里使用了3206的端口,不使用3306端口,是为了安全性,错开常见的端口,加强服务器安全性。

/home/docker/mysql/目录下,新建一个docker-compose.yml文件

1
sudo vim docker-compose.yml

将以下内容写入到docker-compose.yml文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3'
services:
mysql5.6:
restart: always
image: mysql:5.6
container_name: mysql-5.6
volumes:
- ./mydir:/mydir
- ./db:/var/lib/mysql
- ./conf/my.cnf:/etc/my.cnf
- ./init:/docker-entrypoint-initdb.d # 数据库还原目录 可将需要还原的sql文件放在这里
environment:
MYSQL_ROOT_PASSWORD: disc555 # root用户密码
MYSQL_USER: user1 # 新建名为user1的用户(可选)
MYSQL_PASSWORD: X4f1wwT # user1的密码(可选)
TZ: Asia/Shanghai
ports:
# 使用宿主机的3206端口映射到容器的3306端口
# 宿主机:容器
- 3206:3306

如果你有需要恢复的数据库,则在docker-compose.yml中,还应该先添加初始化数据库,不然mysql不会自动帮你新建,比如我需要恢复一个数据库名为db_test的数据库,则我的docker-compose,yml应该是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3'
services:
mysql5.6:
restart: always
image: mysql:5.7.18
container_name: mysql-5.7.18
volumes:
- ./mydir:/mydir
- ./db:/var/lib/mysql
- ./conf/my.cnf:/etc/my.cnf
- ./init:/docker-entrypoint-initdb.d # 数据库还原目录 可将需要还原的sql文件放在这里
environment:
MYSQL_ROOT_PASSWORD: disc555 # root用户密码
MYSQL_USER: user1 # 新建名为user1的用户(可选)
MYSQL_PASSWORD: X4f1wwT # user1的密码(可选)
MYSQL_DATABASE: db_test
TZ: Asia/Shanghai
ports:
# 使用宿主机的3206端口映射到容器的3306端口
- 3206:3306 # 宿主机:容器
  • version:docker-compose的版本号(可自定义,首次启动版本号不能大于x.1)
  • mysql5.6:容器服务名称(可自定义)
  • restart:容器启动方式,这里选用启动总是重启
  • image:选择需要的镜像版本,我这里选择mysql的5.6版本
  • container_name:容器名称
  • volumes:需要挂载的目录,我这里挂载了四个目录,具体每个目录的作用看文章开头
  • MYSQL_ROOT_PASSWORD:数据库的超级管理员密码
  • TZ:数据库时区
  • ports:端口映射,也就是在外网访问3206的端口,服务器自动将3206的端口映射到docker容器的3306端口。

开放服务器端口

如果你是使用服务器的话,你还需要去服务器商那边开启安全组,开放对应端口3206。

我这里使用的是Ubuntu系统,Ubuntu默认使用的是UFW防火墙,因为我刚刚给mysql容器设置的3206的端口,这里需要开放3206端口,如果你在docker-compose.yml文件修改了映射端口,那在这里也需要修改开放端口。

1
sudo ufw allow 3206 comment "mysql数据库"

你如果是CentOS系统,可以执行以下命令开放3206端口

1
sudo firewall-cmd --zone=public --add-port=3206/tcp --permanent

启动mysql容器

/home/docker/mysql/目录下,执行以下命令,启动mysql容器。

1
2
3
sudo docker-compose up -d   # 执行该命令后,出现下如下情况说明启动成功了
root@/home/docker/mysql/# docker-compose up -d
Creating mysql-5.6 ... done

如果在执行这步出错了,排除错误后,你应该先要进入该文件夹,关闭该容器,再重新启动。

关闭该容器指令:sudo docker-compose down

使用Navicat连接mysql数据库

打开Navicat,连接MySQL,填写数据库的相关信息。

01-Navicat Premium20221124-687

连接

02-discuss - 连接属性20221124-951

  • 连接名:任意一个名称即可
  • 主机名或IP地址:你的服务器IP地址或者你有域名执行服务器的话,使用域名也可以
  • 端口:刚刚设置了3206端口,这里也是使用3206
  • 用户名:数据库默认的用户就是root,直接用root即可
  • 密码:密码刚刚在docker-compose.yml也设置了discusssbsn555

填写完后点击连接测试,如果出现如下图,说明可用了,如果出现错误,可能是你的服务器端口没有打开,或者是你的信息填写错误。

03-Snipper - Snipaste20221124-783

感谢观看!

MongoDB

创建容器数据存储位置

1
sudo mkdir -p /home/docker/mongoDB/database

进入文件夹

1
cd /home/docker/mongoDB

创建docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: "3.1"
services:
mongodb:
image: mongo # MongoDB镜像
container_name: mongodb
ports:
- 5330:27017 # 端口映射
volumes:
- ./database:/data/db # 将MongoDB数据库的文件挂载到当前文件夹路径下的database
environment:
- MONGO_INITDB_ROOT_USERNAME=test #MongoDB初始化超级管理员用户名
- MONGO_INITDB_ROOT_PASSWORD=123456 #MongoDB初始化超级管理员密码
mongo-express:
image: mongo-express # MongoDB的Web端镜像
container_name: mongo-express
restart: always
ports:
- 5081:8081 # 端口映射
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=test2
- ME_CONFIG_MONGODB_ADMINPASSWORD=123456789
- ME_CONFIG_MONGODB_SERVER=mongodb
networks:
default:
# name: mongodb_network

运行容器

1
sudo docker-compose up -d