Docker下安装MySQL

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Docker下安装MySQL

Docker下安装并使用MySQL有两种方式,第一使用远程仓库镜像,第二自定义镜像。

【1】使用Hub镜像安装MySQL

从Hub镜像安装软件常规步骤


搜索镜像、拉取镜像、查看镜像、启动镜像、停止容器与移除容器。

① 搜索MySQL镜像

docker search mysql


② 从docker hub上(阿里云加速器)拉取mysql镜像到本地

如下所示,拉去MySQL5.7:

docker pull mysql:5.7


③ 创建容器实例并运行

命令如下:

docker run -p 3306:3306 --name mysql -v /mydocker/mysql/conf:/etc/mysql/conf.d -v /mydocker/mysql/logs:/var/log/mysql -v /mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci


命令解释说明:


-p 3306:3306:将主机的3306端口映射到docker容器的3306端口。

--name mysql:运行服务名字

-v /mydocker/mysql/conf:/etc/mysql/conf.d :将主机/mydocker/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d

-v /mydocker/mysql/logs:/var/log/mysql:将主机/mydocker/mysql目录下的 logs 目录挂载到容器的 /logs。

-v /mydocker/mysql/data:/var/lib/mysql :将主机/mydocker/mysql目录下的data目录挂载到容器的 /var/lib/mysql

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

-d mysql:5.7 : 后台程序运行mysql5.7

--character-set-server=utf8mb4 :设置字符集

--collation-server=utf8mb4_unicode_ci:设置校对集


然后在/mydocker/mysql/conf编辑你的数据库配置文件即可,如下所示:

[root@localhost conf]# pwd
/mydocker/mysql/conf
[root@localhost conf]# ll
total 4
-rw-r--r--. 1 root root 1379 Feb 20 07:40 my.cnf


宿主机上的my.cnf将会自动同步到容器内/etc/mysql/conf.d路径下,需要注意的是my.cnf权限不能是777,否则会因为权限过高mysql忽略掉!


可以查看容器日志:

docker logs -f -t --tail 100   529a4d9afd8e


进入容器内部查看:

docker exec -it  529a4d9afd8e /bin/bash

退出容器两种方式:

exit–容器停止退出
crtl+p+q—容器不停止退出

本地window10用Navicat连接docker运行的mysql:

宿主机上备份数据库:

docker exec 529a4d9afd8e sh -c ' exec mysqldump --all-databases -uroot -p"123456" ' > /mydocker/mysql/all-databases.sql


④ 容器其他操作

停止容器

docker stop 容器id

强制停止容器

docker kill 容器ID

删除容器

docker rm  [-f] 容器ID

删除所有容器

docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

【2】 mysql5.7容器内部情况

① 配置文件

配置文件路径在/etc/mysql下

root@2c1ae7a2f3cd:/etc/mysql# ls -l
total 16
drwxr-xr-x. 2 root root 4096 Feb 20 15:02 conf.d
lrwxrwxrwx. 1 root root   24 Feb  1 18:06 my.cnf -> /etc/alternatives/my.cnf
-rw-r--r--. 1 root root  839 Jul  9  2016 my.cnf.fallback
-rw-r--r--. 1 root root 1215 Dec 18 13:15 mysql.cnf
drwxr-xr-x. 2 root root 4096 Feb  1 18:06 mysql.conf.d

my.cnf文件内容如下(引入了conf.d 、mysql.conf.d路径下的文件):

my.cnf.fallback文件内容如下(引入了conf.d路径下的文件):



mysql.cnf文件内容如下(引入了conf.d 、mysql.conf.d路径下的文件):

如下所示/etc/mysql/mysql.conf.d下有个mysqld.cnf配置文件:

root@2c1ae7a2f3cd:/etc/mysql/mysql.conf.d# ls -l
total 4
-rw-r--r--. 1 root root 1610 Feb  1 18:06 mysqld.cnf

mysqld.cnf配置文件内容如下:

root@2c1ae7a2f3cd:/etc/mysql/mysql.conf.d# cat mysqld.cnf
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

② 运行进程文件

在上面mysqld.conf中可以看到,mysql的进程文件在/var/run/mysqld路径下,如下所示:

root@2c1ae7a2f3cd:/var/run/mysqld# pwd
/var/run/mysqld
root@2c1ae7a2f3cd:/var/run/mysqld# ls -l
total 8
-rw-r-----. 1 mysql mysql 2 Feb 20 15:02 mysqld.pid
srwxrwxrwx. 1 mysql mysql 0 Feb 20 15:02 mysqld.sock
-rw-------. 1 mysql mysql 2 Feb 20 15:02 mysqld.sock.lock

③ 数据文件

在上面mysqld.conf中可以看到,mysql的数据文件在/var/lib/mysql路径下,如下所示:

root@2c1ae7a2f3cd:/var/run/lock# cd /var/lib/mysql
root@2c1ae7a2f3cd:/var/lib/mysql# ls -l
total 188476
-rw-r-----. 1 mysql mysql       56 Feb 20 15:02 auto.cnf
-rw-------. 1 mysql mysql     1680 Feb 20 15:02 ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 Feb 20 15:02 ca.pem
-rw-r--r--. 1 mysql mysql     1112 Feb 20 15:02 client-cert.pem
-rw-------. 1 mysql mysql     1680 Feb 20 15:02 client-key.pem
-rw-r-----. 1 mysql mysql     1346 Feb 20 15:02 ib_buffer_pool
-rw-r-----. 1 mysql mysql 50331648 Feb 20 15:02 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 Feb 20 15:02 ib_logfile1
-rw-r-----. 1 mysql mysql 79691776 Feb 20 15:02 ibdata1
-rw-r-----. 1 mysql mysql 12582912 Feb 20 15:02 ibtmp1
drwxr-x---. 2 mysql mysql     4096 Feb 20 15:02 mysql
drwxr-x---. 2 mysql mysql     4096 Feb 20 15:02 performance_schema
-rw-------. 1 mysql mysql     1676 Feb 20 15:02 private_key.pem
-rw-r--r--. 1 mysql mysql      452 Feb 20 15:02 public_key.pem
-rw-r--r--. 1 mysql mysql     1112 Feb 20 15:02 server-cert.pem
-rw-------. 1 mysql mysql     1680 Feb 20 15:02 server-key.pem
drwxr-x---. 2 mysql mysql    12288 Feb 20 15:02 sys

【3】自定义MySQL镜像

如在实例化容器并启动的时候初始化数据库,可以通过自定义DockerFile实现。


在mysql5.7官方DockerFile中可以看到其执行了docker-entrypoint.sh文件:

在官方脚本docker-entrypoint.sh中可以看到其执行了初始化路径下的一系列脚本文件:



编写自定义DockerFile如下:

FROM mysql:5.7
# 复制数据库初始化脚本my_initdb.sql到/docker-entrypoint-initdb.d文件夹下
COPY my_initdb.sql /docker-entrypoint-initdb.d/my_initdb.sql


my_initdb.sql实例如下:

drop database IF EXISTS  `lvyou` ;
create database `lvyou` default character set utf8 collate utf8_general_ci;
use `lvyou`;
-- ----------------------------
-- Table structure for t_admin
-- ----------------------------
DROP TABLE IF EXISTS `t_admin`;
CREATE TABLE `t_admin` (
  `userId` int(11) NOT NULL,
  `userName` varchar(50) DEFAULT NULL,
  `userPw` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_admin
-- ----------------------------
INSERT INTO `t_admin` VALUES ('1', 'admin', '123456');

目录结构如下所示:


[root@localhost ~]# cd /mydocker/mysql
[root@localhost mysql]# ll
-rw-r--r--. 1 root root  241 Feb 20 12:41 Dockerfile
-rw-r--r--. 1 root root 7260 Feb 20 13:05 my_initdb.sql

在/mydocker/mysql路径下执行命令创建镜像:

docker build -f Dockerfile  -t mysql5.7v1 .

实例化容器并运行:

docker run -p 3306:3306 --name mysql5.7v1 -v /mydocker/mysql/conf:/etc/mysql/conf.d -v /mydocker/mysql/logs:/var/log/mysql -v /mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql5.7v1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

查看日志可以看到执行了初始化脚本:

docker logs -f -t --tail 100   367090145c91


Navicat连接测试进行验证(可以看到正常初始化数据库lvyou):

查看其字符集:


查看宿主机/mydocker/mysql目录:

重启服务器,再次查看:

Navicat连接mysql进行验证:



说明自动从宿主机/mydocker/mysql/data中拿到了数据!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
NoSQL 关系型数据库 应用服务中间件
docker基础篇:安装tomcat
docker基础篇:安装tomcat
92 64
|
4天前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
50 24
|
5天前
|
NoSQL 算法 Redis
docker高级篇(大厂进阶):安装redis集群
docker高级篇(大厂进阶):安装redis集群
53 24
|
3天前
|
Ubuntu Linux Docker
Ubuntu22.04上Docker的安装
通过以上详细的安装步骤和命令,您可以在Ubuntu 22.04系统上顺利安装
46 11
|
1月前
|
缓存 Linux Docker
【最新版正确姿势】Docker安装教程(简单几步即可完成)
之前的老版本Docker安装教程已经发生了变化,本文分享了Docker最新版安装教程,其他操作系统版本也可以参考官 方的其他安装版本文档。
1091 2
【最新版正确姿势】Docker安装教程(简单几步即可完成)
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
1月前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
175 0
|
1月前
|
Docker 容器
【赵渝强老师】使用二进制包方式安装Docker
本文介绍了在企业生产环境中无法直接访问外网时,如何使用Docker官方提供的二进制包进行Docker的离线安装。文章详细列出了从安装wget、下载Docker安装包、解压、复制命令到启动Docker服务的具体步骤,并提供了相关命令和示例图片。最后,还介绍了如何设置Docker为开机自启模式。
|
1月前
|
缓存 Ubuntu Linux
如何安装Docker
如何安装Docker
159 0
|
2月前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
585 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
下一篇
DataWorks