【docker实战】02 用docker安装mysql
本示例采用bitnami的镜像进行安装MySQL
一、镜像搜索
先搜索一下mysql有哪些镜像
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 14734 [OK]
mariadb MariaDB Server is a high performing open sou… 5621 [OK]
percona Percona Server is a fork of the MySQL relati… 623 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 919 [OK]
bitnami/mysql Bitnami MySQL Docker Image 105 [OK]
bitnami是一个比较好的镜像制作机构,其文档也比较完善,所以我们用bitnami/mysql作为示例来安装mysql,点击查看官网的说明文档链接
二、拉取镜像
拉取
[root@localhost ~]# docker pull bitnami/mysql
查看镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bitnami/mysql latest cc987bd64212 4 weeks ago 680MB
三、运行msyql容器
可以通过两种方式来运行我们的容器docker run命令行,或者docker-compose
通过docker run
官网的一个示例是这么运行
docker run \-e ALLOW_EMPTY_PASSWORD=yes \-v /path/to/mysql-persistence:/bitnami/mysql/data \bitnami/mysql:latest
我们需要将宿主机的一个目录
通过docker-compose
需要提前安装好docker-compose,如果不清楚怎么安装,点击这里查看安装说明
version: '2'networks:app-tier:driver: bridgeservices:mysql:image: 'bitnami/mysql:latest'environment:- ALLOW_EMPTY_PASSWORD=yesnetworks:- app-tiermyapp:image: 'YOUR_APPLICATION_IMAGE'networks:- app-tier
四、重要的环境变量
下面的示例中,展示了在docker run 启动容器时,通过-e参数设置了一系列的环境变量
docker run -d \-p 3306:3306 \--name mysql \-e ALLOW_EMPTY_PASSWORD=yes \-e MYSQL_ROOT_PASSWORD=yourrootpassword \-e MYSQL_CHARACTER_SET=utf8mb4 \-e MYSQL_COLLATE=utf8mb4_general_ci \-e MYSQL_ENABLE_SLOW_QUERY=1 \-e MYSQL_LONG_QUERY_TIME=5.0 \-e TZ=Asia/Shanghai \-v /path/to/persitence-data:/bitnami/mysql/data \-v /path/to/conf/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf:ro \bitnami/mysql:latest
-d 后台运行
-p 3306:3306: 把docker镜像内部的3306端口映射到宿主机的3306端口.
--name mysql docker实例的名字
-e ALLOW_EMPTY_PASSWORD=yes 让mysql可以使用空密码进行链接. 即可以使用没有密码的账号.
-e MYSQL_ROOT_PASSWORD=yourrootpassword 设置好新mysql 实例的root 账号密码.
-e MYSQL_CHARACTER_SET=utf8mb4 把数据库的默认字符编码修改为utf8b4 , 如果不修改,默认的设置是utf8
-e MYSQL_COLLATE=utf8mb4_general_ci 同上.
-e MYSQL_ENABLE_SLOW_QUERY=1 开启慢查询日志.
-e MYSQL_LONG_QUERY_TIME=5.0 慢查询日志的query 时间阈值. 默认值是10.0秒, 这里设置为5秒
-e TZ=Asia/Shanghai 重要: 设置 Mysql Docker实例的系统时区. 如果不设置,其默认的时区将会为UTC
-v /path/to/persitence-data:/bitnami/mysql/data 持久化配置. 把mysql的数据存储到宿主机的相关的目录.
-v /path/to/conf/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf:ro 把镜像内部的自定义的my_custom.cnf文件映射到宿主机上.且docker内部是只读权限.
bitnami/mysql:5.7.43-debian-11-r73 最后的镜像名称.
五、修改配置文件
bitnami的mysql配置文件是在容器的
/opt/bitnami/mysql/conf/my_custom.cnf 这个位置
如何修改这个配置文件呢
第一步:宿主机上新建一个my_custom.cnf 文件
以下的启动参数基本是一个可以实际使用的命令.但是还需要配置一些其它的额外参数. 这里贴出我的配置:
[mysqld]
max_allowed_packet = 256M
innodb_log_file_size = 256M
transaction-isolation = READ-COMMITTED
default_time_zone = '+08:00'
一个是修改最大的包大小,这个在一些特别大的数据插入与查询时会用到. RC 隔离级别是 Confluence所要求的. 最后的 default_time_zone = ‘+08:00’ 是为中国区的程序员准备的. 这样可以写入正确的默认值.
第二步:将宿主机上的文件挂载到容器内部
docker run --name mysql \-p 3306:3306 \-e ALLOW_EMPTY_PASSWORD=yes \-v /path/to/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf:ro \-v /path/to/mysql-persistence:/bitnami/mysql/data \bitnami/mysql:latest
配置参数 - my_custom.cnf
六、日志
通过docker启动的,可以通过下面命令查看日志
docker logs mysql
通过docker-compose启动的,可以通过下面命令查看日志
docker-compose logs mysql
七、实操
我们给自己定下如下目标:
- 设置好数据存储的挂载到宿主机
- 设置好用户名和密码
- 端口号映射到宿主机的3306
- 自定义一个配置文件挂载到容器my_custom.cnf
- 系统重启时,自动启动mysql容器
- 容器被误删除时,数据还在
通过docker run 启动一个mysql容器,实现上述功能
准备工作
#拉取镜像
[root@localhost ~]# docker pull bitnami/mysql
#创建配置文件
[root@localhost ~]# mkdir -p /opt/bitnami/mysql/conf
[root@localhost ~]# cd /opt/bitnami/mysql/conf
[root@localhost conf]# touch my_custom.cnf
[root@localhost conf]# vim my_custom.cnf
[root@localhost conf]# cat my_custom.cnf
#配置文件如下
[mysqld]
max_allowed_packet = 256M
innodb_log_file_size = 256M
transaction-isolation = READ-COMMITTED
default_time_zone = '+08:00'
#创建一个挂载目录
[root@localhost conf]# mkdir -p /bitnami/mysql/data
#设置目录和文件的权限
[root@localhost data]# chmod 777 /bitnami/mysql/data/
[root@localhost data]# chmod 777 /opt/bitnami/mysql/conf/my_custom.cnf
运行容器
其中–restart=always表示,重启系统后,只要docker进程自动启动,那就可以把mysql启动起来
docker run -d \-p 3306:3306 \--name mysql \##--restart=always \-e ALLOW_EMPTY_PASSWORD=yes \-e MYSQL_ROOT_PASSWORD=123456\-e MYSQL_CHARACTER_SET=utf8mb4 \-e MYSQL_COLLATE=utf8mb4_general_ci \-e TZ=Asia/Shanghai \-v /bitnami/mysql/data:/bitnami/mysql/data \-v /opt/bitnami/mysql/conf/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf:ro \bitnami/mysql:latest
查看一下日志,主要看看有没有报错啥的,有报错的话,根据报错信息,修改上面的启动命令,比如环境变量有没有设置错的
#先看有没有启动成功
[root@localhost data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f8eadad1226 bitnami/mysql:latest "/opt/bitnami/script…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp mysql
#再查看日志
[root@localhost conf]# docker logs mysql
mysql 20:54:45.86 INFO ==>
mysql 20:54:45.86 INFO ==> Welcome to the Bitnami mysql container
mysql 20:54:45.86 INFO ==> Subscribe to project updates by watching https://github.com/bitnami/containers
mysql 20:54:45.86 INFO ==> Submit issues and feature requests at https://github.com/bitnami/containers/issues
mysql 20:54:45.86 INFO ==>
mysql 20:54:45.86 INFO ==> ** Starting MySQL setup **
mysql 20:54:45.90 INFO ==> Validating settings in MYSQL_*/MARIADB_* env vars
mysql 20:54:45.90 WARN ==> You set the environment variable ALLOW_EMPTY_PASSWORD=yes. For safety reasons, do not use this flag in a production environment.
mysql 20:54:45.90 ERROR ==> root user is already created in the database and you can't use it as username for user creation.
...略...
查看一下我们的宿主机的挂载目录,是不是有了数据库的文件了
可以看到文件都有了
[root@localhost data]# pwd
/bitnami/mysql/data
[root@localhost data]# ls -al
总用量 95700
drwxrwxrwx. 7 root root 4096 12月 27 08:13 .
drwxr-xr-x. 3 root root 18 12月 27 07:53 ..
-rw-r-----. 1 1001 root 56 12月 27 08:12 auto.cnf
-rw-r-----. 1 1001 root 1814 12月 27 08:13 binlog.000001
-rw-r-----. 1 1001 root 180 12月 27 08:13 binlog.000002
-rw-r-----. 1 1001 root 157 12月 27 08:13 binlog.000003
-rw-r-----. 1 1001 root 48 12月 27 08:13 binlog.index
-rw-------. 1 1001 root 1680 12月 27 08:12 ca-key.pem
-rw-r--r--. 1 1001 root 1108 12月 27 08:12 ca.pem
-rw-r--r--. 1 1001 root 1108 12月 27 08:12 client-cert.pem
-rw-------. 1 1001 root 1680 12月 27 08:12 client-key.pem
-rw-r-----. 1 1001 root 196608 12月 27 08:13 '#ib_16384_0.dblwr'
-rw-r-----. 1 1001 root 8585216 12月 27 08:13 '#ib_16384_1.dblwr'
-rw-r-----. 1 1001 root 8001 12月 27 08:13 ib_buffer_pool
-rw-r-----. 1 1001 root 12582912 12月 27 08:13 ibdata1
-rw-r-----. 1 1001 root 12582912 12月 27 08:13 ibtmp1
drwxr-x---. 2 1001 root 4096 12月 27 08:13 '#innodb_redo'
drwxr-x---. 2 1001 root 187 12月 27 08:13 '#innodb_temp'
drwxr-x---. 2 1001 root 143 12月 27 08:13 mysql
-rw-r-----. 1 1001 root 30408704 12月 27 08:13 mysql.ibd
-rw-r-----. 1 1001 root 5 12月 27 08:13 mysql_upgrade_info
drwxr-x---. 2 1001 root 8192 12月 27 08:12 performance_schema
-rw-------. 1 1001 root 1680 12月 27 08:12 private_key.pem
-rw-r--r--. 1 1001 root 452 12月 27 08:12 public_key.pem
-rw-r--r--. 1 1001 root 1108 12月 27 08:12 server-cert.pem
-rw-------. 1 1001 root 1680 12月 27 08:12 server-key.pem
drwxr-x---. 2 1001 root 28 12月 27 08:13 sys
-rw-r-----. 1 1001 root 16777216 12月 27 08:13 undo_001
-rw-r-----. 1 1001 root 16777216 12月 27 08:13 undo_002
数据库操作
远程连接数据库,创建一个数据库,一个表

发现远程连接宿主机的3306端口连接不上,这是什么原因呢
查了一下,说的是,在 JDBC 连接串中加入 allowPublicKeyRetrieval=true 参数;
dbeaver连接设置如下,设置好后,连接成功了

通过dbeaver来创建一个数据库,一个表
CREATE DATABASE `test`;
USE test;
CREATE TABLE `project` (`id` bigint(20) NOT NULL,`name` varchar(255) NOT NULL,`status` bit(1) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO test.project (id,name,status) VALUES(1,'项目1',1);
进入容器通过命令行查看数据
[root@localhost data]# docker exec -it mysql /bin/bash
I have no name!@9f8eadad1226:/$ mysql -uroot -p
Enter password:
...略...
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> select * from project;
+----+---------+----------------+
| id | name | status |
+----+---------+----------------+
| 1 | 项目1 | 0x01 |
+----+---------+----------------+
1 row in set (0.00 sec)
mysql容器误删演练
重点:删除容器,宿主机的挂载文件不会删除
[root@localhost data]# docker stop mysql
mysql
[root@localhost data]# docker rm mysql
mysql
再重新启动容器
docker run -d \-p 3306:3306 \--name mysql \--restart=always \-e ALLOW_EMPTY_PASSWORD=yes \-e MYSQL_ROOT_PASSWORD=123456\-e MYSQL_CHARACTER_SET=utf8mb4 \-e MYSQL_COLLATE=utf8mb4_general_ci \-e TZ=Asia/Shanghai \-v /bitnami/mysql/data:/bitnami/mysql/data \-v /opt/bitnami/mysql/conf/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf:ro \bitnami/mysql:latest
这次多了–restart=always,我们等会重启系统时,mysql会自动重启(前提开启docker进程自动启动 systemctl enable docker)
新建一个容器,指定数据文件挂载点,检查数据是否还在。经过测试,数据依然还在的。
服务器重启演练
前提开启docker进程自动启动
systemctl enable docker
重启操作系统,可以看到mysql随着系统启动,自动启起来了
到这里,我们的MySQL就安装完成了
思考
如果通过docker-compose,那这个yaml应该怎么写呢
version: '2'
services:mysql:image: 'bitnami/mysql:latest'environment:- ALLOW_EMPTY_PASSWORD=yes- MYSQL_USER=myuser- MYSQL_PASSWORD=my_password- MYSQL_AUTHENTICATION_PLUGIN=mysql_native_passwordports:- '15672:15672'volumes:- '/path/to/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf'- '/path/to/mysql-persistence:/bitnami/mysql/data'
相关文章:
【docker实战】02 用docker安装mysql
本示例采用bitnami的镜像进行安装MySQL 一、镜像搜索 先搜索一下mysql有哪些镜像 [rootlocalhost ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql …...
循环渲染ForEach
目录 1、接口说明 2、键值生成规则 3、组件创建规则 3.1、首次渲染 3.2、非首次渲染 4、使用场景 4.1、数据源不变 4.2、数据源组项发生变化 4.3、数据源数组项子属性变化 5、反例 5.1、渲染结果非预期 5.2、渲染性能降低 Android开发中我们有ListView组件、GridVi…...
纷享销客华为云:如何让企业多一个选择?
纷享销客携手华为云推出多项联合解决方案,为企业的数字化提供了一个新选择。12月12日,纷享销客&华为云联合解决方案发布会在北京举办。本次发布会以“「CRM云」让企业多一个选择”为主题,来自行业头部企业的CEO、CIO、业务负责人等&#…...
前端实现断点续传文件
公司要求实现的功能,大概思路是将上传的文件通过jsZip压缩后,进行切片,留一下总切片,当前片,并把这些数据给后端,至于前端的校验,是由Md5完成的,验证文件唯一性,这样下次…...
复试 || 就业day01(2023.12.27)算法篇
文章目录 前言两数之和存在重复元素 II好数对的数目总持续时间可被 60 整除的歌曲 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫文章题目大多来自于 leetcode,当然也可能来自洛谷或其他刷题平台 Ὂ…...
JavaWeb——JQuery
文章目录 JQuery 是什么?jQuery 的原理示意图JQuery 基本开发步骤jQuery 对象和 DOM 对象将dom对象转为JQuery对象jQuery 对象转成 DOM 对象jQuery 选择器基本选择器基础过滤选择器JQuery 是什么? 基本介绍 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理…...
Python教程:查询Py模块的版本号,有哪些方法?
1.查看模块内部的版本信息:如果你已经导入了该模块,可以查看模块内部的__version__属性来获取版本信息。例如,对于pandas模块,可以运行import pandas和print(pandas.version)来获取版本信息。 import pandas print(pandas.__vers…...
第一节 初始化项目
系列文章目录 第一节 初始化项目 文章目录 操作步骤 总结 操作步骤 打开cmd 输入 vue ui 在打开的网页中点击“创建”,复制文件夹路径并粘贴点击“在此创建新项目” 输入项目名称 点击下一步选择手动配置 选择babel、router、vuex、css pre-processors、 linter建…...
idea提示unable to import maven project
问题描述: idea导入maven依赖时提示unable to import maven project 打开log日志如下: 问题原因以及解决方案: maven版本与idea版本不兼容,切换maven版本即可...
【Spring】SpringBoot日志
文章目录 什么是日志日志的用途日志的使用如何打印日志日志级别日志框架门面模式(外观模式)日志级别的使用配置日志级别日志持久化配置日志的存储目录配置日志文件名配置日志文件分割 更简单的日志输出 什么是日志 在计算机领域,日志是一个记…...
HTML+CSS制作动漫绿巨人
🎀效果展示 🎀代码展示 <!DOCTYPE html> <html lang="en" > <head>...
AGV智能搬运机器人-替代人工工位让物流行业降本增效
在当今快速发展的世界中,物流业面临着巨大的挑战,包括提高效率、降低成本和优化工作流程。为了应对这些挑战,一种新型的自动化设备——智能搬运机器人正在崭露头角。本文将通过一个具体的案例来展示富唯智能转运机器人在实际应用中的价值。 案…...
【办公技巧】怎么批量提取文件名到excel
Excel是大家经常用来制作表格的文件,比如输入文件名,如果有大量文件需要输入,用张贴复制或者手动输入的方式还是很费时间的,今天和大家分享如何批量提取文件名。 打开需要提取文件名的文件夹,选中所有文件,…...
uniapp实现前端银行卡隐藏中间的数字,及隐藏姓名后两位
Vue 实现前端银行卡隐藏中间的数字 主要应用了 filters过滤器 来实现效果 实现效果,如图: <template><div><div style"background-color: #f4f4f4;margin:50px 0 0 460px;width:900px;height:300px;"><p>原来&#…...
HPCC:高精度拥塞控制
HPCC:高精度拥塞控制 文章目录 HPCC:高精度拥塞控制摘要1 引言1.1 背景1.2 现有CC的局限性1.3 HPCC的提出 2 研究动机2.1 大型RDMA部署2.2 RDMA目标2.3 当前RDMA CC中的权衡DCQCNTIMELY 2.4 下一代高速CC 3 技术方案3.1 INT3.2 HPCC设计3.3 HPPC的参数 4…...
centos 配置 git 连接 github
centos 配置 git 连接 github 首先安装 git 创建 ssh key ssh-keygen -t rsa复制公钥 cat ~/.ssh/id_rsa.pub # 打印出公钥内容然后复制配置 github 登录网页 github 账号;进入 setting;点击 SSH and GPG keys,点击 New SSH keytitile 随便填…...
SpringBoot发布项目到docker
Dockerfile FROM openjdk:11 # 作者 MAINTAINER chenxiaodong<2774398338qq.com># 安装 vim # RUN yum -y install vim# 环境变量 # 进入容器后的默认工作目录 ENV WORKPATH /usr/local/webapp ENV EXECFILE Docker2Application-0.0.1-SNAPSHOT.jarRUN mkdir -p $WORKPA…...
sheng的学习笔记-卷积神经网络
源自吴恩达的深度学习课程,仅用于笔记,便于自行复习 导论 1)什么是卷积神经网络 卷积神经网络,也就是convolutional neural networks (简称CNN),使用卷积算法的神经网络,常用于计…...
数据库:园林题库软件(《中国古代园林史》答题卷一 )
《中国古代园林史》答题卷一 填空题 1、中国古代园林曾被誉为“世界园林之母”。国际风景园林师联合会(IFLA)的创始人、著名风景园林师和教育家杰里柯爵士( Sir Geoffrey Alan Jellicoe)把中国古代园林和西亚园林以及古希腊园林列为世界三大园林体系之首。 2、中国古代园林是…...
upset 绘制
好久没有更新,今天来一个upset图的绘制 1.1 安装包 #绘制upset的包现在看来有三个 ## UpSet ### 最基本的upsetR包,使用方便,但是扩展不方便 devtools::install_github("hms-dbmi/UpSetR") ## complex-upset ### UpSet的升级款 支持ggplot2 devtools::install_git…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
