使用Docker构建的MySQL容器

转载过程中,图片丢失,代码显示错乱。

为了更好的学习内容,请访问原创版本:

https://www.missshi.cn/api/view/blog/5a86a5a2c55cb01126000001

Ps:初次访问由于js文件较大,请耐心等候(5s左右)

 

 

本文主要讲解如何利用Docker来运行MySQL容器

下载镜像

title 
拉取MySQL官方镜像只需要执行如下命令即可:

 
  1. docker pull mysql

默认情况下,会拉取mysql的latest版本。 
Ps:目前对应为5.7.21版本。

运行镜像

基本使用

 
  1. docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

其中,some-mysql表示自己定义的容器名称。my-secret-pw是我们设置的ROOT用户的密码,tag是我们对应的镜像版本,默认为latest。 
当我们启动容器后,可以通过如下方式进行终端命令行:

 
  1. docker exec -it some-mysql bash

同时,我们可以使用如下命令来查看MySQL容器的日志:

 
  1. docker logs some-mysql

指定MySQL配置文件

在MySQL中,启动配置文件默认为:/etc/mysql/my.cnf。 
此外,在/etc/mysql/conf.d文件夹下任意以.cnf结尾的文件都会被认为是MySQL的配置文件。 
因此,如果我们想要指定一个MySQL的配置文件,我们只需要在主机中创建一个以.cnf结尾的文件,并在宿主机中该文件所在的文件夹映射到Docker容器中/etc/mysql/conf.d文件夹即可。 
假设在宿主机中存在如下配置文件:/my/custom/config-file.cnf。那么,我们在启动容器时只需要执行如下命令即可:

 
  1. docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

Ps:其中,-v表示了卷映射。

此外,当配置信息相对较少时,我们不希望编写一个完整的配置文件,而是仅仅希望在命令行中添加一些配置参数即可:

 
  1. docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

MySQL中的一些环境变量

  • MYSQL_ROOT_PASSWORD
  • MYSQL_DATABASE
  • MYSQL_USER
  • MYSQL_PASSWORD
  • MYSQL_ALLOW_EMPTY_PASSWORD
  • MYSQL_RANDOM_ROOT_PASSWORD
  • MYSQL_ONETIME_PASSWORD

初始化容器

当我们第一次启动容器时,可以令其启动执行一些.sh.sql.sql.gz的文件,前提是这些文件存放在容器的/docker-entrypoint-initdb.d目录下。对于SQL文件的执行,则会在我们环境变量中指定的MYSQL_DATABASE中执行。

数据持久化

在使用MySQL的容器时,数据持久化有很多种方式,下面我们将描述一种推荐的方式: 
在宿主机上创建一个数据存储目录,并将其映射到容器中的目录中。 
这将数据库文件放在主机系统中的已知位置,并便于主机系统上的工具和应用程序访问文件。 
缺点是用户需要确保目录存在,例如,主机系统上的目录权限和其他安全机制配置正确。 
使用方法如下:

  1. 在宿主机中创建一个目录,例如/my/own/datadir
  2. 如下命令启动容器:
 
  1. docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

已存在数据库服务的启动

当数据库中已经有数据存在时,在启动时,我们要省略传入MYSQL_ROOT_PASSWORD,此时,已有的数据库不再会被修改。

数据库备份

通常情况下,我们需要对数据库进行备份。 
数据库备份的方式如下:

 
  1. docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql

推荐用法

执行如下命令拉取MySQL镜像:

 
  1. docker pull mysql

创建MySQL专用的文件夹:

 
  1. cd /mnt
  2. mkdir mysql
  3. cd ./mysql
  4. mkdir conf
  5. mkdir data
  6. cd ./conf
  7. touch config-file.cnf

修改config-file.cnf如下:

 
  1. [mysqld]
  2. datadir=/var/lib/mysql
  3. socket=/var/lib/mysql/mysql.sock
  4. symbolic-links=0
  5. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  6. character-set-server = utf8mb4
  7. [mysqld_safe]
  8. log-error=/var/log/mysqld.log
  9. pid-file=/var/run/mysqld/mysqld.pid

执行如下命令启动MySQL:

 
  1. docker run --name mysql -p 3306:3306 -v /mnt/mysql/data:/var/lib/mysql -v /mnt/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

执行如下命令进行数据库备份:

 
  1. DATE=$(date +%Y%m%d)
  2. docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /mnt/mysql/backup/mysql$DATE.sql

 

更多更详细的内容,请访问原创网站:

https://www.missshi.cn/api/view/blog/5a86a5a2c55cb01126000001

Ps:初次访问由于js文件较大,请耐心等候(5s左右)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WangZhe0912

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值