docker安装mysql_5.7_实战

前言

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

一. 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;

在这里插入图片描述

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","test12345@qq.com");
insert into user values(2, "lisi","12345test@qq.com");

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","test12345@qq.com");
insert into user values(2, "lisi","12345test@qq.com");

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

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

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

参考文档

  1. Docker 安装 MySQL
  2. Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值