安装

1、拉取镜像(这里使用5.7.22版本)

docker pull mysql:5.7.22

2、启动

# 创建了一个名为 myMysql 的 MySQL 数据库服务器容器实例
docker run --name myMysql \
-p 3306:3306 \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22

命令说明:

  • -v /etc/localtime:/etc/localtime:ro:为了保证容器时区和系统时区相同,需要挂载系统时间到容器内
  • -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
  • -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码

其他命令

  • 访问容器
docker exec -it myMysql bash

进入容器内部,我们就可以登录到 mysql 了

[root@iZbp1b5k5bjps0dw8owk7tZ ~]# docker exec -it myMysql bash
root@ef155a347409:/# ls             
bin   docker-entrypoint-initdb.d  home     media    proc  sbin  tmp
boot  entrypoint.sh          lib     mnt    root  srv   usr
dev   etc              lib64  opt    run   sys   var
root@ef155a347409:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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> show badatases;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'badatases' at line 1
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql>
  • 查看日志
docker logs -f myMysql
  • 进入终端
docker exec -it myMysql mysql -uroot -p123456

  • 使用自定义 Mysql 配置文件

默认情况下,Mysql 的启动配置文件是 /etc/mysql/my.cnf,而 /etc/mysql/conf.d 目录下的存在任何 .cnf 格式的文件时,都会使用该文件中配置项替换默认配置。 因此,如果要使用自定义配置,可以在宿主机创建一个配置文件,然后在创建容器时通过 -v 参数,以数据卷的方式将自定义配置挂载到 mysql 容器的 /etc/mysql/conf.d 目录下。

例:

docker run --name myMysql \
-p 3306:3306 \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22

以上示例会启动一个名为 myMysql 的 Mysql 服务器容器,该文件启动时会同时使用 /usr/local/mysql/conf/my.cnf 中的配置

注:如果使用到 mysql 主从配置,那么在 mysql 5.7版本中不要使用挂载配置文件的方式,可以采用宿主机拷贝替换容器中的 /etc/mysql/my.cnf 文件,因为博主发现挂载配置文件开启 log-bin 没有生效,在这块遇到了坑,如果谁有更好的方法可以给博主留言

数据存储

在使用 mysql 镜像创建 MySQL 容器时,数据库数据存储可能会有以下两种方式:

  • 数据卷容器:使用Docker默认的数据管理方式来管理数据库的数据存储,在这种方式下,数据库文件会被写入数据库的内部。这种方式对于用户非常简单,缺点是很在宿主机上找到所存储的数据。

  • 外部数据卷:在宿主机创建一个数据目录,再将数据目录挂载到容器内部。这种方式可以很方便的在宿主机上找到并进行数据管理,但需要确保数据目录的存在。

当使用外部数据卷时,例:

docker run --name myMysql \
-p 3306:3306 \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22

表示将宿主机的 /usr/local/mysql/data 目录挂载到容器内的 /var/lib/mysql 目录

  • 日志存储

同理,我们也可以将日志挂载到宿主机上,例:

docker run --name myMysql \
-p 3306:3306 \
-v /usr/local/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22

表示将宿主机的 /usr/local/mysql/log 目录挂载到容器内的 /var/log/mysql 目录

那么总结起来同时挂载配置、数据卷、日志的命令为:

docker run --name myMysql \
-p 3306:3306 \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22

results matching ""

    No results matching ""