docker安装mysql_5.7_实战

文章目录

  • 前言
  • 一. docker安装mysql_5.7
    • 1. 快速启动版
      • 1.1 拉取镜像
      • 1.2 安装
      • 1.3 查看进程
      • 1.4 查看日志
    • 2. 使用mysql
      • 2.1 连接msql
      • 2.2 创建数据库
      • 2.3 删除数据库
  • 二. docker-compose安装mysql_5.7
    • 1.安装docker-compose
    • 2.快速启动版
      • 2.1 定义mysql_simple.yaml
      • 2.2 启动mysql_simple.yaml 服务
      • 2.3 关闭mysql_simple.yaml 服务
    • 3.快速启动版--指定初始化数据库
      • 3.1 定义mysql_init_db.yaml
      • 3.2 创建初始化脚本
      • 3.3 启动mysql_init_db.yaml 服务
      • 3.4 授权创建的账号
    • 4.快速启动版--指定初始化数据库及账号授权
    • 参考文档

前言

本文记录docker和docker-compose两种方式安装使用mysql。从简单快速使用入手,再根据实际场景不断完善更符合开发/生产环境的配置实践。

  • 环境准备
    • 操作系统:centos7.4 (下载:https://renwole.com/archives/1526)
    • docker版本:20.10.11

一. docker安装mysql_5.7

1. 快速启动版

1.1 拉取镜像

docker pull mysql:5.7

1.2 安装

docker run -itd --name mysql_01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
  • -i: 交互式操作。
  • -t: 终端。
  • -d: 在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
  • –name: 容器名称(非必需)
  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • e MYSQL_ROOT_PASSWORD=123456:指定环境变量,这里设置 MySQL 服务 root 用户的密码。

1.3 查看进程

[root@docker ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS          PORTS                                                                                      NAMES
b5fa2b58a0e8   mysql:5.7      "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                       mysql_01

1.4 查看日志

[root@docker ~]# docker logs mysql_01

2. 使用mysql

2.1 连接msql

  1. 进入mysql_01容器
[root@localhost ~]# docker exec -it mysql_01 bash
  1. 连接数据库

mysql -u root -p

mysql -u root -p

root@d357051fa903:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.37 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

2.2 创建数据库

CREATE DATABASE `demo_01` default CHARACTER set utf8 COLLATE utf8_general_ci;
  • CREATE DATABASE demo_01 — 代表的是创建数据库 demo_01。
  • DEFAULT CHARACTER SET utf8 — 代表的是将该库的默认编码格式设置为utf8格式。
  • COLLATE utf8_general_ci — 代表的是数据库校对规则,utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感

utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。
utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果
utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容

查看数据库创建信息

show crate database demo_01;

docker安装mysql_5.7_实战_第1张图片

2.3 删除数据库

drop database demo_01;

二. docker-compose安装mysql_5.7

1.安装docker-compose

安装docker-compose

2.快速启动版

2.1 定义mysql_simple.yaml

version: "2"
services:
  mysql:
    container_name: mysql_simple
    image: mysql:5.7
    #env_file:
      #- ../env/mysql.env
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_USER: 'test'
      MYSQL_PASS: 'test'  
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"
  • image:为你拉取镜像的地址和版本,当然也可以换成自己的镜像仓库,这里使用官方的。
  • volumes:里面的参数为映射本地和docker容器里面的文件夹和目录。
  • ports:为映射端口。
  • MYSQL_ROOT_PASSWORD:为数据库的密码,也就是root用户的密。
  • MYSQL_USER和MYSQL_PASS:代表用户名和密码。

2.2 启动mysql_simple.yaml 服务

docker-compose -f mysql_simple.yaml up

2.3 关闭mysql_simple.yaml 服务

docker-compose -f mysql_simple.yaml down

3.快速启动版–指定初始化数据库

一个应用服务一般连接, docker的mysql容器对应的业务数据库, 并且使用专用账号密码。如果mysql容器创建时候,同时完成数据库初始化和账号创建。这样在一个新环境,快速部署一套服务时候,可以进一般减少手动操作的环节。

3.1 定义mysql_init_db.yaml

vi mysql_init_db.yaml

version: "2"
services:
  mysql:
    container_name: mysql_init_db
    image: mysql:5.7
    #env_file:
      #- ../env/mysql.env
    environment:
      MYSQL_ROOT_PASSWORD: "123456"  
      MYSQL_USER: 'test'
      MYSQL_PASS: 'test'
    volumes:
      - ./mysql:/var/lib/mysql
      - ./init:/docker-entrypoint-initdb.d/   # sql初始化目录
    ports:
      - "3306:3306"

3.2 创建初始化脚本

  1. 创建初始化脚本目录
mkdir -p init
  1. 创建初始化脚本
vi /init/db_demo_01.sql
  1. 脚本内容
create database db_demo_01 default charset 'utf8';

use db_demo_01;
create table user
(
id int auto_increment primary key,
username varchar(64) unique not null,
email varchar(120) unique not null
);
insert into user values(1, "zhangsan","[email protected]");
insert into user values(2, "lisi","[email protected]");

3.3 启动mysql_init_db.yaml 服务

docker-compose -f mysql_init_db.yaml up

3.4 授权创建的账号

  1. 进入容器
docker exec -it mysql_init_db bash
  1. 使用root账号授权
mysql -u root -p
> grant all on db_demo_01.* to 'test'@'%' identified by 'test';
> flush privileges;
> quit

注意./init中sql脚本只会首次运行创建./mysql,执行一次。

4.快速启动版–指定初始化数据库及账号授权

通过上面的快速启动版, 已经实现了创建容器自带业务库和账号信息,但是授权操作还是过于麻烦,账号授权其实可以和创建数据库同时进行。

vi /init/db_demo_01.sql

优化创建脚本补充授权信息

create database db_demo_01 default charset 'utf8';

grant all on db_demo_01.* to 'test'@'%' identified by 'test';
flush privileges;

use db_demo_01;
create table user
(
id int auto_increment primary key,
username varchar(64) unique not null,
email varchar(120) unique not null
);
insert into user values(1, "zhangsan","[email protected]");
insert into user values(2, "lisi","[email protected]");

这样可以为不同的微服务,初始化不同数据库环境。

  • init/
    • db_service_01.sql 独立账号/密码
    • db_servcie_02.sql 独立账号/密码

上面场景更多适合快速创建成熟的产品的数据环境或者是演示库,如果在开发阶段,数据库设计经常需要变动, 推荐使用liquibase通过版本化来管理数据库脚本。SpringBoot_liquibase使用

参考文档

  1. Docker 安装 MySQL
  2. Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结

你可能感兴趣的:(docker,mysql,docker,mysql,容器)