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 启动elasticsearch镜像,挂载目录后报错的解决

    docker 启动elasticsearch镜像,挂载目录后报错的解决

    这篇文章主要介绍了docker 启动 elasticsearch镜像,挂载目录后报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker如何修改容器ip范围

    docker如何修改容器ip范围

    这篇文章主要介绍了docker如何修改容器ip范围问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Docker容器化应用与结构

    Docker容器化应用与结构

    本文详细讲解了Docker的容器化应用与结构,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Docker安装官方Redis镜像并启用密码认证

    Docker安装官方Redis镜像并启用密码认证

    这篇文章主要介绍了Docker安装官方Redis镜像并启用密码认证,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Docker到底是什么?Docker为什么它这么火!

    Docker到底是什么?Docker为什么它这么火!

    Docker这种新的容器技术可谓热得发烫,因为有了它,人们就有可能让数量多得多的应用程序在同样的旧服务器上运行;有了它,人们也很容易封装和交付程序。本文旨在帮助你进一步了解Docker
    2015-12-12
  • 2023年windows DockerDeskTop最新款4.18.0 全程保姆级安装图文教程

    2023年windows DockerDeskTop最新款4.18.0 全程保姆级安装图文教程

    这篇文章主要介绍了2023年windows DockerDeskTop最新款4.18.0 全程保姆级安装图文教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Docker案例分析:搭建Redis服务

    Docker案例分析:搭建Redis服务

    这篇文章主要介绍了Docker案例分析:搭建Redis服务方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Docker内如何访问本机(宿主机)的具体方法

    Docker内如何访问本机(宿主机)的具体方法

    这篇文章主要介绍了Docker内如何访问本机(宿主机)的具体方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 基于Docker如何实现MySQL主从复制详解

    基于Docker如何实现MySQL主从复制详解

    这篇文章主要给大家介绍了关于基于Docker如何实现MySQL主从复制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • Docker查看是否开机自启及容器自启动设置

    Docker查看是否开机自启及容器自启动设置

    Docker是当前最流行的容器技术,通过运用容器打包应用程序并部署到生产环境中,可大大提高部署的速度和可靠性,下面这篇文章主要给大家介绍了关于Docker查看是否开机自启及容器自启动设置的相关资料,需要的朋友可以参考下
    2024-01-01

最新评论