Docker部署Mysql数据库详解

本文介绍了如何使用Docker部署MySQL,包括创建和配置MySQL容器,解决远程登录时的加密问题,以及处理MySQL的编码问题以避免中文乱码。此外,还讲解了数据持久化的方法,确保容器重启后数据不丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

1. Docker部署Mysql

1.1 Mysql容器

1.1.1 创建Mysql容器

1.1.2 进入Mysql容器并登录Mysql

1.1.3 持久化数据

 1.2 远程登录Mysql

1.2.1 修改root加密方式

1.2.2 在容器启动时配置加密方式为mysql_native_password

 1.3 Mysql编码

1.3.1 Mysql编码问题

 1.3.2 Mysql编码问题解决办法

送书活动


 

Docker是一种流行的容器化平台,可以简化应用程序的部署和管理。在本博客中,我们将探讨如何使用Docker部署两个广泛使用的数据库:MySQL。我们将提供详细的步骤和相应的命令,以帮助您轻松地在Docker容器中设置和运行这个数据库。

1. Docker部署Mysql

1.1 Mysql容器

1.1.1 创建Mysql容器

首先我们拉取mysql镜像,要在Docker中部署MySQL数据库,我们首先需要创建一个MySQL容器。可以使用以下命令创建一个MySQL 8..0.24版本的容器:

docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=123456  -p 3307:3306 mysql:8.0.24

此命令会创建一个名为mysql-container的容器,将MySQL的root用户密码设置为123456,并将宿主机的3307端口映射到容器的3306端口。

1.1.2 进入Mysql容器并登录Mysql

docker exec -it mysql-container mysql -u root -p

此命令将打开MySQL的命令行客户端,并要求您输入MySQL root用户的密码如下图:

8b0123c611e2403fa8b7d95e4f2e069c.png

 然后我们就可以在这里进行数据库操作。

1.1.3 持久化数据

为了在容器重新启动后保留MySQL数据,可以将数据目录映射到宿主机的目录。在创建容器时,可以添加以下参数:

-v /docker/mysql/config/my.cnf:/etc/my.cnf #宿主机目录:mysql容器目录
-v /docker/mysql/data:/var/lib/mysql 

这里可以进行数据卷挂载,卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性,卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。数据卷可在容器之间共享或重用数据并且卷中的更改可以直接实时生效,数据卷的生命周期一直持续到没有容器使用它为止。如下图:

8741c9d6e6df4df3933bc6ad887802f8.png
 

 1.2 远程登录Mysql

在Mysql 8.x版本当我们在云服务器上创建dockier容器后,尝试远程登录Docker容器内数据库的时候会遇见如下图问题:

ccfb4a794e464b328f321c320c20a73f.png

 这是什么原因呢?

出现1251的主要原因是由于mysql版本的问题,mysql8.0版本,与mysql8.0以下版本的加密方式不同,导致错误产生。

MySql 8.0.11 换了新的身份验证插件(caching_sha2_password),而原来的身份验证插件为(mysql_native_password)。​ 而客户端工具Navicat Premium12 中找不到新的身份验证插件(caching_sha2_password),因此报上面的错,所以我们将mysql用户使用的 登录密码加密规则还原成 mysql_native_password,即可登陆成功。

1.2.1 修改root加密方式

运行下面的命令:

mysql -u root -p  #登陆mysql
use mysql;	# 切换mysql数据库
select host, user, authentication_string, plugin from user; #查看root用户登录加密方式

如下图:

3ba3276f85c34d9da04fc36ec647eaa9.png

 然后我们改变加密命令

alter user 'root'@'%' identified with mysql_native_password by '123456';

 然后再次查看root用户登录的加密方式

select host, user, authentication_string, plugin from user; #查看root用户登录加密方式

c6832b12b2b94a078c85087c36175d2d.png
 

 然后我们重新使用客户端登录系统显示登录成功。

1.2.2 在容器启动时配置加密方式为mysql_native_password

代码-e identified=mysql_native_password,配置了加密方式。

docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=123456  -p 3307:3306 -e identified=mysql_native_password mysql:8.0.24

 

 1.3 Mysql编码

1.3.1 Mysql编码问题

当我们使用客户端连接成功我们的docker容器后,然后进行创建数据库,创建表格然后添加数据如下:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`project` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;

USE `project`;

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(20) DEFAULT NULL,
  `password` VARCHAR(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Data for the table `user` */

INSERT  INTO `user`(`id`,`username`,`password`) VALUES (1,'张三','123'),(2,'lisi','456');

然后在我们的docker容器内查询mysql数据如下图:

385ad5e903ce4630918a9d01d9e0677a.png

 然后我们发现了乱码问题,乱码一般都是因为编码引起的,所以我们来查一下数据库的编码

ce81717ba4294fe98129ebebe8f38d07.png

 1.3.2 Mysql编码问题解决办法

1.修改my.cnf文件

cd /etc/mysql/ #进入my.cnf文件中的目录
vim my.cnf #编辑my.cnf文件

2.出现bash: vim: command not found提示,需要安装一下vim,使用如下命令

apt-get update
apt-get install vim -y

重新执行vim命令。

3. 在 my.cnf文件中[mysql] 下面添加  default-character-set=utf8mb4,然后 :wq 退出。没有 [mysql] 的话就写一个。

如下图:

6169a376a80048c6a7a164fe43c93b5b.png

 

然后看一下mysql的字符集,已经变成 utf8mb4 了,这样就可以解决中文乱码问题了。

592211d4fbc94caa96f97a02ac776c5d.png

 查看表格数据

6a4e089aa55c4193b6f43b80cd5adf88.png

 至此我们的问题得到了成功解决。

 

送书活动

Python自动化办公应用大全(ChatGPT版):从零开始教编程小白一键搞定烦琐工作(上下册)

本书简介:

本书全面系统地介绍了Python语言在常见办公场景中的自动化解决方案。全书分为5篇21章,内容包括Python语言基础知识,Python读写数据常见方法,用Python自动操作Excel,用Python自动操作Word 与 PPT,用Python自动操作文件和文件夹、邮件、PDF 文件、图片、视频,用Python进行数据可视化分析及进行网页交互,借助ChatGPT轻松进阶Python办公自动化。 

本书适合各层次的信息工作者,既可作为初学Python的入门指南,又可作为中、高级自动化办公用户的参考手册。书中大量的实例还适合读者直接在工作中借鉴。

 

本书特色:

 

★方式新颖 详细介绍了如何用 ChatGPT 来补充学习知识点,以及如何快速生成所需的代码,零基础人员学习编程的成本进一步降低。

内容丰富 以Excel数据处理与分析为重点,延展到 Word、PPT、邮件、图片、视频、音频、本地文件管理、网页交互等现代办公所需要处理的各种形式的数据。

★案例实用 用大量易借鉴的案例帮助用户学会在各个场景中使用自动化技术。

★作者权威 Excel Home团队策划,多位微软全球最有价值专家(MVP)通力打造,确保每个案例都实用,对编程小白友好。

让没有编程经验的普通办公人员也能驾驭 Python,实现多个场景的办公自动化,提升效率!

 

作者简介:

Excel Home是微软在线社区联盟成员,全球华语Excel资源网站,拥有大量原创技术文章、视频教程、加载宏及模板。Excel Home是一个学习氛围浓厚的技术交流社区,中国大陆及中国港台各行各业身怀绝技的Office高手都汇聚于此,目前已有三百多万办公人士选择成为它的注册会员。 Excel Home已精心编写并出版Office领域的图书60余种,截至2020年春节,图书销量累计达200多万册。

2429ce806c434e408140f6a242c5eec1.png

当当链接:《Python自动化办公应用大全(ChatGPT版):从零开始教编程小白一键搞定烦琐工作(上下册)》(Excel Home)【简介_书评_在线阅读】 - 当当图书

 关注博主、点赞、收藏、

评论区评论 “ 人生苦短,我爱python”

  即可参与送书活动!

                           开奖时间:2023-07-17 21:00:00                             

 

 

 

### 本地部署 MySQL 5.7 安装指南 #### 1. 下载 MySQL 5.7 安装包 在 Ubuntu 系统中,默认安装的 MySQL 版本为 8.0。为了使用 MySQL 5.7,需要手动下载对应的安装包。可以通过访问 MySQL 官网或使用以下命令从归档站点获取 MySQL 5.7 的二进制文件: ```bash wget https://downloads.mysql.com/archives/get/p/23/file=mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz ``` 如果链接失效,请前往 [MySQL 官方网站](https://dev.mysql.com/downloads/mysql/) 获取最新版本的 5.7.x 二进制文件[^4]。 #### 2. 解压并移动 MySQL 文件 将下载的压缩包解压,并将其移动到目标目录 `/mysqlapp/mysql` 中: ```bash tar -zxvf mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz sudo mv mysql-5.7.42-linux-glibc2.12-x86_64 /opt/mysql-5.7.42 ``` 接着将解压后的文件移动到最终的安装目录: ```bash sudo mkdir -p /mysqlapp/mysql/{data,log,run} sudo chown -R mysql:mysql /mysqlapp/mysql sudo mv /opt/mysql-5.7.42/* /mysqlapp/mysql/ ``` #### 3. 创建系统用户和权限配置 创建一个专门用于运行 MySQL 的系统用户,并设置相应的权限: ```bash sudo groupadd mysql sudo useradd -g mysql -s /sbin/nologin -M mysql ``` 确保所有与 MySQL 相关的目录都具有正确的所有权和权限设置[^4]。 #### 4. 配置环境变量 为了方便后续操作,可以将 MySQL 的可执行文件路径添加到系统的 `PATH` 环境变量中: ```bash echo 'export PATH=/mysqlapp/mysql/bin:$PATH' | sudo tee -a /etc/profile source /etc/profile ``` 这样可以在任意位置直接调用 `mysqld` 或其他 MySQL 工具。 #### 5. 初始化数据库 进入 MySQL 的 `bin` 目录并初始化数据库实例: ```bash cd /mysqlapp/mysql/bin sudo -u mysql ./mysqld --initialize \ --user=mysql \ --basedir=/mysqlapp/mysql \ --datadir=/mysqlapp/mysql/data \ --log-error=/mysqlapp/mysql/log/mysql-error.log ``` 该步骤会生成默认的 root 用户密码,并存储在错误日志文件中(例如:`/mysqlapp/mysql/log/mysql-error.log`)。请务必记录该密码以便后续登录数据库[^4]。 #### 6. 启动 MySQL 服务 初始化完成后,可以启动 MySQL 服务: ```bash sudo -u mysql ./mysqld_safe --user=mysql & ``` 也可以通过编写系统服务脚本来实现开机自启动。 #### 7. 登录并修改 root 密码 使用初始化过程中生成的临时密码登录 MySQL: ```bash mysql -u root -p ``` 登录后立即修改 root 密码以增强安全性: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password'; ``` 此外,还可以根据需要创建新的数据库和用户,并进行相关权限配置。 --- #### 参考代码示例 以下是 MySQL 初始化的完整命令示例: ```bash cd /mysqlapp/mysql/bin sudo -u mysql ./mysqld --initialize \ --user=mysql \ --basedir=/mysqlapp/mysql \ --datadir=/mysqlapp/mysql/data \ --log-error=/mysqlapp/mysql/log/mysql-error.log ``` ---
评论 152
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山河亦问安

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

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

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

打赏作者

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

抵扣说明:

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

余额充值