10 docker 安装 mysql详解

目录

一、安装mysql

1. 镜像获取

2. 简单版

2.1. 使用mysql镜像

2.2. 建库建表插入数据

2.3. 外部win 连接并插入中文数据测试

2.4. 简单版本问题

3. 创建容器-实战版

3.1. 新建容器实列并挂载卷

3.2. 新建my.cnf , 解决中文乱码

3.3. 重启容器验证

3.4. 总结


一、安装mysql

官网命令出处:https://hub.docker.com/_/mysql

1. 镜像获取

docker search mysql #搜索镜像
docker pull mysql:5.7 #拉取镜像
docker images #查看结果

2. 简单版

2.1. 使用mysql镜像
[root@rockylinux ~]# 
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 
docker ps #查看容器ID
docker exec -it  a84b91d0b7f3 /bin/bash
------------------------------------------------------------------
root@a84b91d0b7f3:/# mysql -uroot -p
Enter password:(123456)
mysql>

MySQL 默认监听 3306 端口

-e MYSQL_ROOT_PASSWORD=123456

  • -e 设置环境变量
  • MYSQL_ROOT_PASSWORD=123456 设置了 MySQL 的 root 用户的密码为 123456
  • 环境变量 MYSQL_ROOT_PASSWORD 是 MySQL 官方 Docker 镜像用来初始化数据库时设置 root 根用户密码的变量

mysql -uroot -p

  • -uroot: 指定连接数据库服务器的 MySQL 用户 -u 是 --user 的缩写 root 是用户名,表示将以 root 用户身份连接 MySQL 服务器
  • -p 提示用户输入密码 --password 没有直接跟密码,表示在执行命令后,会提示用户输入密码。这是为了安全起见,不把密码直接暴露在命令行上
2.2. 建库建表插入数据
mysql> create database db01;
Query OK, 1 row affected (0.00 sec)
#创建名为 db01 的数据库

mysql> use db01;
Database changed
#切换到 db01 数据库,使其成为当前操作的数据库

mysql> create table aa(id int,name varchar(20));
Query OK, 0 rows affected (0.02 sec)
#在当前数据库(db01)中创建一个名为 aa 的表,该表包含两个字段:id(整数类型)和 name(长度为20的可变字符类型)

mysql> insert into aa values(1,'z3');
Query OK, 1 row affected (0.01 sec)

mysql> select * from aa;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
+------+------+
1 row in set (0.00 sec)
#向 aa 表中插入一条记录,id 为 1,name 为 'z3'
2.3. 外部win 连接并插入中文数据测试

出现错误:docker默认编码字符集隐患

mysql> SHOW VARIABLES LIKE 'character%';

+--------------------------+----------------------------+

| Variable_name | Value |

+--------------------------+----------------------------+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | latin1 |

| character_set_filesystem | binary |

| character_set_results | latin1 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.00 sec)

默认情况下使用 latin1 字符集,而字符串包含了中文字符,需要 utf8 或 utf8mb4 字符集来正确存储和显示。

所以这为简单版本(中文字符用不了)

2.4. 简单版本问题
  • 中文乱码 。启动docker容器后,可以正常的连接、创建数据库,创建表,插入数据。但是插入中文则会报错。
  • 没有容器卷映射。没有配置容器卷映射,当容器意外被删时,数据无法找回。

3. 创建容器-实战版

3.1. 新建容器实列并挂载卷

启动 Mysql 容器,并配置容器卷映射:

docker run -d -p 3306:3306 \
           --privileged=true \
           -v /app/mysql/log:/var/log/mysql \
           -v /app/mysql/data:/var/lib/mysql \
           -v /app/mysql/conf:/etc/mysql/conf.d \
           -e MYSQL_ROOT_PASSWORD=root \
           --name mysql \
           mysql:5.7

启动时将容器做了容器卷映射,将mysql的配置(映射到/app/mysql/conf)、数据(映射到/app/mysql/data)、日志(映射到/app/mysql/log)都映射到了宿主机实际目录,所以即使删除了容器,也不会产生太大影响。只需要再执行一下启动Mysql容器命令,容器卷还按相同位置进行映射,所有的数据便都可以正常恢复。

3.2. 新建my.cnf , 解决中文乱码

/app/mysql/conf下新建 my.cnf,通过容器卷同步给mysql实例,解决中文乱码问题:

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
3.3. 重启容器验证

重启mysql容器,使得容器重新加载配置文件:

docker restart mysql

[root@rockylinux conf]# docker exec -it 415f68bdf990 /bin/bash
root@415f68bdf990:/# mysql -uroot -p
Enter password:
mysql>  SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql>

utf-8解决了中文乱码(中文插入报错)问题。

此时中文测试 ok

3.4. 总结

结论:docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/768202.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年精选推荐的16个向量数据库:提升你的AI应用性能

在人工智能时代,向量数据库已成为数据管理和AI模型不可或缺的一部分。向量数据库是一种专门设计用来存储和查询向量嵌入数据的数据库。这些向量嵌入是AI模型用于识别模式、关联和潜在结构的关键数据表示。随着AI和机器学习应用的普及,这些模型生成的嵌入…

聊一聊领域驱动和贫血

写在前面 前段时间跟领导讨论技术债概念时不可避免地提到了代码的质量,而影响代码质量的因素向来都不是单一的,诸如项目因素、管理因素、技术选型、人员素质等等,因为是技术债务,自然就从技术角度来分析,单纯从技术角…

UOS系统中JavaFx笔锋功能

关于笔锋功能,网上找了很久,包括Java平台客户端,Android端,相关代码资料比较少,找了很多经过测试效果都差强人意,自己也搓不出来,在UOS平台上JavaFX也获取不到压力值,只能用速度的变…

c++习题07-求小数的某一位

目录 一,问题 二,思路 三,代码 一,问题 二,思路 被除数a的类型设置为long long类型,a变量需要变大,需要更大的数据类型来存储除数b和指定的小数位置n为int类型,这两个变量的的…

计算机图形学入门23:蒙特卡洛路径追踪

1.前言 前面几篇文章介绍了Whitted-style光线追踪,还介绍了基于物理渲染的基础知识,包括辐射度量学、BRDF以及渲染方程,但并没有给出解渲染方程的方法,或者说如何通过该渲染方程计算出屏幕上每一个坐标的像素值。 Whitted-style光…

未来的钥匙在于过去:学历史的真正意义,震惊!历史竟然是偶然的?从历史中寻找未来的方向!

我们自幼接受的教育是,学历史是为了相信历史是必然的。中国人民必然战胜日寇的侵略,解放思想和改革开放必定会发生,和平和发展必定是世界的主题,中国经济必定是高速增长…… 然而,在真正的历史学家眼中,历史…

1分钟了解,预写日志WAL的核心思路...

上一篇《刷盘,还是不刷盘,是一个问题》中我们遇到了哪些问题? 1. 已提交事务未提交事务的ACID特性怎么保证? 画外音:上一篇中遇到的问题,主要是原子性与持久性。 2. 数据库崩溃,怎么实施故障恢复…

新声创新20年:无线技术给助听器插上“娱乐”的翅膀

听力损失并非现代人的专利,古代人也会有听力损失。助听器距今发展已经有二百多年了,从当初单纯的声音放大器到如今的全数字时代助听器,助听器发生了翻天覆地的变化,现代助听器除了助听功能,还具有看电视,听…

AD导入.step 3D封装

在网站查找想要的3D封装 https://www.3dcontentcentral.cn/ 下载 AD导入 在封装库下导入

融云上线 HarmonyOS NEXT 版 SDK,全面适配「纯血鸿蒙」生态

6 月 21 日,“2024 华为开发者大会”正式发布使用自研内核的原生鸿蒙系统 HarmonyOS NEXT,即 “纯血鸿蒙”。 同时,华为宣布开放“鸿蒙生态伙伴 SDK 市场”,甄选各类优质、安全的 SDK 加入聚合平台,助力各行业开发者轻…

数据结构初阶 堆的问题详解(三)

题目一 4.一棵完全二叉树的节点数位为531个,那么这棵树的高度为( ) A 11 B 10 C 8 D 12 我们有最大的节点如下 假设最大高度为10 那么它的最多节点应该是有1023 假设最大高度为9 那么它的最多节点应该是 511 所以说这一题选B 题目二 …

08 docker Registry搭建docker私仓

目录 本地镜像发布流程 1. docker pull registry 下载镜像 2. docker run 运行私有库registry 3. docker commit 构建镜像 4. docker tag 修改新镜像,使之符合私服规范tag 5. 修改配置文件使之支持http 6. curl验证私服库上有什么镜像 7. push推送 pull拉取 …

Jenkins教程-13-参数化任务构建

上一小节我们学习了发送html邮件测试报告的方法,本小节我们讲解一下Jenkins参数化任务构建的方法。 很多时候我们需要根据不同的条件去执行构建,如自动化测试中执行test、stg、prod环境的构建,Jenkins是支持参数化构建的。 以下是Jenkins官…

kaggle量化赛金牌方案(第七名解决方案)(下)

— 无特征工程的神经网络模型(得分 5.34X) 比赛进入最后阶段,现在是时候深入了解一些关于神经网络模型的见解了。由于 Kaggle 讨论区的需求,我在这里分享两个神经网络模型。第一个是 LSTM 模型,第二个是卷积网络&…

pmp顺利通关总结

目录 一、背景二、总结三、过程 一、背景 人活着总是想去做一些事情,通过这些事情来证明自己还活着。 而我证明自己还会活着并且活得很好的方式和途径,是通过这些东西去让自己有一个明确的边界节点;借此知识来验证自己的学习能力。 我坚定认…

汇凯金业:投资交易如何才能不亏损

投资交易中永不亏损是一个理想化的目标,现实中无法完全避免亏损。然而,通过科学的方法、合理的策略和严格的风险管理,投资者可以大幅减少亏损,并提高长期盈利的概率。以下是一些关键策略和方法,帮助投资者在交易中尽量…

Android线性布局的概念与属性

线性布局(LinearLayout)是Android中最简单的布局方式,线性布局方式会使得所有在其内部的控件或子布局按一条水平或垂直的线排列。如图所示,图a是纵向线性布局示意图,图b是横向线性布局示意图。 a)纵向线性布局示意图 …

2024年电子信息工程与电气国际学术会议 (EIEEE 2024)

2024年电子信息工程与电气国际学术会议 (EIEEE 2024) 2024 International Academic Conference on Electronic Information Engineering and Electrical Engineering 【重要信息】 大会地点:北京 大会官网:http://www.iceieee.co…

昂科烧录器支持MindMotion灵动微电子的32位微控制器MM32L052NT

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中MindMotion灵动微电子的32位微控制器MM32L052NT已经被昂科的通用烧录平台AP8000所支持。 MM32L052NT使用高性能的ARM Cortex-M0为内核的32位微控制器,最高工作频率…

语音唤醒入门(基于ESP-skainet)

主要参考资料: ESP-SR 用户指南: https://docs.espressif.com/projects/esp-sr/zh_CN/latest/esp32s3/index.html 目录 ESP提供的模型直接初始化和使用模型AFE声学前端算法 使用模型 自定义模型 ESP提供的模型 乐鑫提供了经过训练的 WakeNet 和 MultiNet 模型&…