Docker部署Mysql数据库步骤详解

 更新时间:2023年07月11日 08:48:23   作者:山河亦问安  
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用户的密码如下图:

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

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不会在容器删除时删除其挂载的数据卷。数据卷可在容器之间共享或重用数据并且卷中的更改可以直接实时生效,数据卷的生命周期一直持续到没有容器使用它为止。如下图:

1.2 远程登录Mysql

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

这是什么原因呢?

出现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用户登录加密方式
 

如下图:

然后我们改变加密命令

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

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

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

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

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数据如下图:

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

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] 的话就写一个。

如下图:

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

查看表格数据

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

到此这篇关于Docker部署Mysql数据库步骤详解的文章就介绍到这了,更多相关Docker部署Mysql内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker Compose构建Jenkins的实现

    Docker Compose构建Jenkins的实现

    本文主要介绍了Docker Compose构建Jenkins的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Docker如何批量删除images

    Docker如何批量删除images

    这篇文章主要介绍了Docker如何批量删除images问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • docker安装RabbitMQ详细步骤

    docker安装RabbitMQ详细步骤

    大家好,本篇文章主要讲的是docker安装RabbitMQ详细步骤,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • 浅谈Docker数据持久化

    浅谈Docker数据持久化

    这篇文章主要介绍了浅谈Docker数据持久化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • docker覆盖镜像默认命令之docker entrypoint详解

    docker覆盖镜像默认命令之docker entrypoint详解

    entrypoint命令就是覆盖ENTRYPOINT命令的,本文给大家介绍了docker覆盖镜像默认命令之docker entrypoint的相关知识,需要的朋友可以参考下
    2023-10-10
  • Docker 容器操作退出后进入解决办法

    Docker 容器操作退出后进入解决办法

    这篇文章主要介绍了Docker 容器操作退出后进入解决办法的相关资料,需要的朋友可以参考下
    2016-10-10
  • 详解Docker私有仓库Registry的搭建验证

    详解Docker私有仓库Registry的搭建验证

    这篇文章主要介绍了详解Docker私有仓库Registry的搭建验证,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Docker 部署Scrapy的详解

    Docker 部署Scrapy的详解

    这篇文章主要介绍了Docker 部署Scrapy的详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 基于Docker实现Redis主从+哨兵搭建的示例实践

    基于Docker实现Redis主从+哨兵搭建的示例实践

    本文主要介绍了基于Docker实现Redis主从+哨兵搭建的示例实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Docker镜像加速的详细教程

    Docker镜像加速的详细教程

    Docker 镜像非常轻量级,它们是基于分层的文件系统构建的,因此许多 Docker 镜像可以共享相同的基础镜像,这也使得它们在存储和传输时非常高效,这篇文章主要介绍了Docker镜像加速的详细教程,需要的朋友可以参考下
    2024-02-02

最新评论