首页 > 数据库 >docker-运行mysql服务

docker-运行mysql服务

时间:2024-03-25 21:46:03浏览次数:29  
标签:容器 配置文件 宿主机 https mysql docker 运行

环境说明

linux系统版本:lsb_release -a

 

 

docker 版本: docker -v

 

 

不同的操作系统以及软件版本,可能会遇到不一样的问题,一定要注意版本问题。

 

查看docker中 mysql的版本,可以去官网,需要kx上网才能打开。

https://hub.docker.com/

 

最好是确认自己的服务器已经设置阿里云的镜像加速,或者使用腾讯的,网易的都是可以的。

自己选,设置之后下载镜像的速度回快很多。

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://registry-vpc.cn-hangzhou.aliyuncs.com"]

}

EOF

 

查看自己本地的Mysql 版本 Select VERSION();

版本为 5.7.20

 

 

.1.拉取docker的mysql镜像。

因此自己去拉取docker 的Mysql镜像的时候,同样拉取这个版本。

命令如下,

docker pull mysql:5.7

 

 

docker images 命令可以查看当前服务器上已经安装的镜像,从图中可以看出mysql镜像已经正确安装。

 

.2.启动测试。

docker run --name=mysql -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d 5107333e08a8

参数解释:

docker run 运行docker 容器服务

--name=mysql  给容器服务取一个名字,便于区分服务,不取会默认给一个名字

-p 3306:3306 表示将宿主机的端口3306映射到mysql容器服务的3306端口上,-p 表示port的简写

-e MYSQL_ROOT_PASSWORD=123456 表示设置mysql服务的密码为123456

-d 5107333e08a8 表示以指定的镜像ID启动容器服务,因为同一种类型的镜像可能有多个,比如有多个版本的mysql镜像

注意:如果不添加 -d 5107333e08a8 指令,默认启动时会以最新版本启动容器服务;没有最新版本的容器,就会自动去下载最新版本的容器,很烦人。

 

 

启动好之后,会返回一个容器 ID,长度为64位。这个容器 ID 是 Docker 为镜像分配的唯一标识符,可以用于对容器进行操作和管理。

 

.3.打开服务器端口,远程连接测试。

登录阿里云服务器管理控制台,找到 控制台->服务器->安全组,打开进入的端口,如下所示。

 

 

真实使用的时候,建议不要使用默认端口,现在是做测试使用没啥问题。

测试连接,发现连接错误,初步判断需要开启远程连接。

 

 尝试一:使用阿里云的通义千问查询关键词 docker启动 mysql 开启远程连接

 

删除之前启动的mysql容器服务,重新执行下面的命令,

尝试使用里面的方式来进行操作

docker run --name=mysql -it  \

-p 3306:3306  \

-e MYSQL_ROOT_PASSWORD=123456  \

-e MYSQL_ROOT_HOST=%  \

-d 5107333e08a8

命令说明:

-e MYSQL_ROOT_HOST=%:允许任意主机(%)连接到MySQL服务器(这将启用远程连接)

 

 再次远程连接测试,连接成功。

 

 

.4.在宿主机上创建对应的mysql目录,然后创建必要的目录和配置文件。如下所示

 

添加配置信息如下,

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

 

[mysqld]

#

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

#

# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.

# log_bin

#

# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

skip-host-cache

skip-name-resolve

datadir=/var/lib/mysql

socket=/var/run/mysqld/mysqld.sock

secure-file-priv=/var/lib/mysql-files

user=mysql

port=3308

 

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

 

#log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[client]

socket=/var/run/mysqld/mysqld.sock

password=自己设置的密码

 

至于这些配置信息如何来的,大致思路说一下,可以先临时启动一个mysql容器,然后使用如下命令,

.a.进入mysql容器的命令如下:

docker exec -it tmysql /bin/bash

.b.查找mysql容器内 配置文件所在的位置,命令如下

mysql --help | grep my.cnf

 

 

结果发现有两个配置文件,那么哪一个配置文件会生效呢?

对于这个问题,自己就不在去进行测试,直接使用网友给的答案。第二个会生效。

如果想做测试的话,方法很简单,去修改配置文件里面的值,然后重新启动mysql容器服务,

看修改的值是否生效。比如最大连接数,修改后重启服务,然后登录mysql查询一下即可看到效果。

 

.c.将容器内mysql的配置文件复制一份到宿主机上保存,然后停止原来的容器,删除容器。

其他配置信息可根据需要进行添加即可。

docker cp mysql:/etc/my.cnf  /opt/u01/exam/mysql/my.conf

 

 

.5.重新执行命令.

.a.停掉原来的容器服务;

.b.删除原来的容器服务;

.c.执行新的启动容器的命令。

 

docker run --name=mysql -it  \

-p 3306:3308  \

-e MYSQL_ROOT_HOST=%  \

-v /opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf  \

-v /opt/u01/exam/mysql/logs:/logs  \

-v /opt/u01/exam/mysql/data:/var/lib/mysql \

-d 5107333e08a8

参数说明:

-v /opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf  表示将宿主机上的配置文件挂载到mysql容器中

-v /opt/u01/exam/mysql/logs:/logs 表示宿主机上的日志目录挂载到mysql容器中

-v /opt/u01/exam/mysql/data:/var/lib/mysql 表示将宿主机上的目录挂载到mysql容器中

 

 

说明:端口自己已经在mysql的配置文件中修改为3308,密码自己直接在配置文件中进行设置,

因此-e MYSQL_ROOT_PASSWORD=123456 这条命令可以不使用。

 

.6.查看挂载的目录是否生效。

发现宿主机上的data目录下已经有对应的各种数据文件,说明目录挂载已经生效。

 

 

测试方式

.a.先进入mysql容器内,查询最大连接数。

docker exec -it mysql /bin/bash

mysql -u root -p

use mysql;

show VARIABLES like  'max_conn%';

 

 

.b.修改宿主机中的配置文件,添加最大连接数

 

.c.重启容器服务,重新查看是否生效;如下图所示,已经生效。证明挂载的配置文件已经生效。

 

 

命令: docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql

可以获取容器内mysql桥接的地址。

 

遇到问题一:只有有一步操作出现问题,密码一直是123456,需要自己去重新设置密码。

mysql -u root -p

use mysql;

 

如果Mysql的版本是5.7及以上的话update语句如下:

update user set authentication_string=passworD("test") where user='root';

flush privileges;

 

查看Mysql对应的端口号语句如下,

show global variables like 'port';

 

遇到问题二:在设置mysql最大连接数的时候,max_connections=180 的位置一定要放正确。

错误示范

 

 

导致的问题如下,登录时报错

 

 

正确的设置端口还有最大连接数的位置如下。

 

 

遇到问题三:设置mysql配置文件的时候,启动容器服务,报密码错误。

使用docker logs 容器ID或名称如下

 

导致这个问题的原因是mysql配置文件中,配置密码的位置在配置文件中的[client]的位置一定要注意!

 

参考博文.

https://juejin.cn/post/6975374769923293191

https://cloud.tencent.com/developer/article/2154817

https://www.cnblogs.com/notchangeworld/p/12208538.html

https://www.cnblogs.com/huoshuyinghua/p/14094530.html

https://www.cnblogs.com/peashooter/p/9456255.html

https://www.cnblogs.com/sheseido/p/12708864.html

https://cloud.tencent.com/developer/article/1872788

标签:容器,配置文件,宿主机,https,mysql,docker,运行
From: https://www.cnblogs.com/yilangcode/p/18095423

相关文章

  • Docker与防火墙
    文章目录DockerDocker是什么安装DockerDocker基础使用进入容器Docker-compose防火墙DockerDocker是什么dokcer是一个应用容器引擎,可以打包程序和运行环境,把环境和程序一起发布的容器,当你需要发布程序时,你可以使用dokcer将运行环境一起发布,docker完全使用沙箱机制......
  • Docker PostgresSQL and PGadmin4
    这里用的DockerDesktop PostgresSQL,拉取官方Image,并配置环境变量,端口灵活配置,只要宿主机,不冲突即可1#Postgresql数据库账号,默认有2POSTGRES_USER=xxx34#Postgresql数据库密码5POSTGRES_PASSWORD=123456678#0.0.0.0/0,这个表示允许所有ip访问,如果......
  • linux下的mysql常见用法
    linux下的mysql常见用法1.连接Mysql1.1连接到本机上的Mysql键入命令mysql-uroot-p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中......
  • 注册表 REG文件 将所有程序强制窗口化运行 指定查询 强制窗口化运行
    将所有程序强制窗口化运行:CopyCodeWindowsRegistryEditorVersion5.00[HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Layers]"*"="~WINCOMPATLAYER=HIGHDPIAWARE"你可以复制上述内容并保存为.reg格式的文件,然后双击运行该文件,确......
  • 云计算 3月18号 (mysql安装及操作)
    一、Mysql1.1MySQL数据库介绍1.1.1什么是数据库DB?DB的全称是database,即数据库的意思。数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作;1.1.2什么是sql?SQL代表结构化查询语言(StructuredQ......
  • PaddleNLP:Docker下搭建基于ES的语义检索系统
    PaddleNLP:Docker下搭建基于ES的语义检索系统什么是语义检索?语义检索(也称基于向量的检索):指检索系统不再拘泥于用户Query字面本身(例如:sql查询的like),而是能精准捕捉到用户Query后面的真正意图并以此来搜索,从而更准确地向用户返回最符合的结果。原理是通过使用最先进的语义......
  • Docker与K8S实战系列教程--靠谱、易学
    ​在招聘网站上,Docker和K8S已经成为频繁出现的技能:对于Java高级开发、架构师、技术总监,Docker和K8S是必备技能。对于Java初级、中级开发,Docker和K8S是简历里的加分项。为什么Docker和K8S这么重要?因为Docker和K8S确实强大!它们的作用是:让项目部署非常便捷、让挂掉的应用自动重......
  • Elasticsearch:使用在本地计算机上运行的 LLM 以及 Ollama 和 Langchain 构建 RAG 应用
    无需GPU的隐私保护LLM。在本博客中,我将演示使用不同的工具Ollama构建的RAG应用程序。与本文相关的所有源代码均已发布在github上。请克隆存储库以跟随文章操作。我们可以通过如下的方式来克隆:gitclonehttps://github.com/liu-xiao-guo/ollama_es什么是 Ollam......
  • 使用Docker搭建MySQL数据库服务
    简介在现代应用程序开发中,使用数据库是必不可少的。而Docker作为一种流行的容器化解决方案,可以使数据库的部署和管理变得更加简单和灵活。本文将介绍如何使用Docker搭建MySQL数据库服务,让你在本地环境中快速部署一个MySQL实例。第一步:拉取MySQL镜像dockerpullmysql:5.7第......
  • 使用Docker快速搭建Web服务器Nginx
    简介在现代Web开发中,Nginx作为一款高性能的Web服务器和反向代理服务器,被广泛应用于各种项目中。而使用Docker可以极大地简化服务器的部署和管理过程。本文将介绍如何利用Docker快速搭建NginxWeb服务器,并简要说明一些常见的配置和使用方法。第一步:拉取镜像在拉取镜像时,我们可......