【Docker 学习七】docker实战Mysql挂载

实战Mysql

思考:MySQL的数据持久化的问题

MySQL安装

  1. 拉取最新的mysql镜像
    1
    docker pull mysql
  2. 镜像查看
    1
    2
    3
    4
    #查看镜像
    docker images
    # REPOSITORY TAG IMAGE ID CREATED SIZE
    # mysql latest c138801544a9 2 months ago 577MB

创建MySQL容器

运行容器,需要做数据挂载
安装启动mysql,需要配置密码,这是要注意点

  1. 创建本地MySQL映射目录

    1
    2
    3
    # 使用 -p 参数 表示 创建多级目录
    # 主要data(数据文件), logs(日志文件),conf(配置文件)
    mkdir -p /home/mysql01/data /home/mysql01/logs /home/mysql01/conf

    可能不需要手动创建所需的文件夹

  2. 创建容器并挂载目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # -d 后台运行
    # -p 端口映射
    # -v 卷挂载
    # -e 环境配置
    # -name 容器名称
    docker run --name mysql001 \
    -p 3310:3306 \
    -v /home/mysql01/data:/var/lib/mysql \
    -v /home/mysql01/conf:/etc/mysql/conf.d \
    -v /home/mysql01/logs:/var/log/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_general_ci

参数说明:

参数 描述 是否可选
-p 3310:3306 将容器的3306端口映射到宿主机的3310端口 必选
-v /home/mysql10/data:/var/lib/mysql 将数据文件夹挂载到主机 必选
-v /home/mysql01/conf:/etc/mysql/conf.d 将配置文件夹挂在到主机 必选
-v /home/mysql01/logs:/var/log/mysql 将日志文件夹挂在到主机 必选
-e MYSQL_ROOT_PASSWORD=123456 初始化123456用户的密码 必选
–name mysql001 设置容器名称 可选
-d mysql 后台运行镜像名称或者ID 可选
–character-set-server=utf8mb4 设置字符集 可选
–collation-server=utf8mb4_general_ci 排序方式 可选
  1. 进入MySQL容器内部

    1
    docker exec -it mysql001 /bin/bash
  2. 登录 MySQL

    1
    2
    mysql -uroot -p123456
    # mysql>
  3. 查看字符集是否生效

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    show variables like 'character_set_%';
    # +--------------------------+--------------------------------+
    # | Variable_name | Value |
    # +--------------------------+--------------------------------+
    # | character_set_client | latin1 |
    # | character_set_connection | latin1 |
    # | character_set_database | utf8mb4 |
    # | character_set_filesystem | binary |
    # | character_set_results | latin1 |
    # | character_set_server | utf8mb4 |
    # | character_set_system | utf8mb3 |
    # | character_sets_dir | /usr/share/mysql-8.1/charsets/ |
    # +--------------------------+--------------------------------+
    # 8 rows in set (0.01 sec)

挂载是否生效

方法一、

  1. 停止并删除容器
1
2
3
docker stop mysql001 && docker rm mysql001
# mysql001
# mysql001
  1. 查看宿主机数据存在
    1
    2
    3
    4
    5
    6
    [root@yulium data]# cd /home/mysql01/data/
    [root@yulium data]# ls
    # auto.cnf binlog.index client-cert.pem #ib_16384_1.dblwr #innodb_redo mysql.ibd private_key.pem server-key.pem undo_002
    # binlog.000001 ca-key.pem client-key.pem ib_buffer_pool #innodb_temp mysql.sock public_key.pem sys
    # binlog.000002 ca.pem #ib_16384_0.dblwr ibdata1 mysql performance_schema server-cert.pem undo_001

发现,我们挂载到本地的数据卷依旧没有丢失了,这就是实现容器数据持久化功能