Ubuntu22.04在Docker下安装Mysql5.7

Ubuntu22.04在Docker下安装Mysql5.7

通常在项目研发阶段为了开发测试方便此处mysql安装在docker下(便于移至和扩展比较灵活),必须要注意在生产环境中不推荐直接安装在docker下

打开官网地址:https://hub.docker.com/(需要挂vpn科学上网)

搜索mysql选择5.7.44进行下载(其他myql版本类似操作,例如下安装mysql8.0x版本同理)

下载mysql5.7.44镜像

复制代码
docker pull mysql:5.7.44 拉取镜像
docker images 查看当前已有镜像

启动mysql容器

复制代码
docker run [启动参数] IMAGE [镜像启动的运行命令(一般不写)]

使用如下命令来启动mysql容器(端口映射、文件挂载、密码设置、数据库格式):

复制代码
docker run -p 3306:3306 --name mysql \
-v /home/mysql5.7/log:/var/log/mysql \
-v /home/mysql5.7/data:/var/lib/mysql \
-v /home/mysql5.7/conf:/etc/mysql \
-v /home/mysql5.7/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.44 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  • docker run: 运行一个容器,每个容器相互隔离,他都是独立的运行环境,是一个完整的实例。

  • -p 3306:3306:把mysql容器自己的端口映射到虚拟主机,这样我们才能访问,这是端口映射。(左侧是本地端口:右侧是docker容器里的端口)

  • --name mysql:为容器取名,这个名字随意。

  • -v:文件路径的挂载。(数据库文件,日志,配置文件)

  • -e MYSQL_ROOT_PASSWORD:添加环境参数,比如密码。

  • d mysql:5.7.44:在后端运行,指定使用的是哪个镜像。

通过命令进入mysql docker exec -it mysql bash,进入mysql命令模式后输入ls /查看目录

可以看到,这相当于是一个独立的linux文件目录树结构,那么我们要设置挂载路径,就是把mysql内部的文件映射到我们在外部的,也就是咱们自己的虚拟机里的路径,这样会更加方便的查看以及修改。相当于是创建了一个文件夹的快捷方式。

查看当前docker运行的容器docker ps

查看当前docker运行的包含抱错的容器docker ps -a,可以看到在创建的第一秒mysql服务就已经退出了

查看docker容器下的mysql日志寻找报错信息,发现无法创建文件目录

首先移除mysql容器docker rm mysql

删除运行容器时的conf文件目录挂载

复制代码
docker run -p 3306:3306 --name mysql \
-v /home/mysql5.7/log:/var/log/mysql \
-v /home/mysql5.7/data:/var/lib/mysql \
-v /home/mysql5.7/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.44 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

可以看到容器运行成功,端口已经成功映射

查看docker容器运行的状态docker stats

输入docker exec -it mysql bash通过docker进入mysql

输入mysql -u root -p进入mysql命令模式,输入之前设置的密码root

输入use mysql;进入mysql数据库

输入如下命令修改数据库的访问密码

复制代码
alter user 'root'@'localhost' identified with mysql_native_password by 'lvdamaoluguo';

给root账户授予所有权限

复制代码
grant all privileges on test_grant.* to 'root'@'%' with grant option;

修改root账户外部访问权限密码模式

复制代码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'lvdamaoluguo';

输入flush privileges;刷新配置

使用Navicat重新连接数据库后输入重新设置好的密码输入以下代码查看

sql 复制代码
SELECT `host`,`user`,`plugin` FROM `user`

本地桌面新建my.cnf文件设置mysql字符集,使用记事本打开复制如下代码保存

复制代码
[client]
port=3306
default_character_set=utf8mb4

[mysql]
default_character_set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake

kip-name-resovle: mysql连接慢,不把ip地址解析为域名,无用,有问题
skip-character-set-client-handshake: 忽略客户端的字符集,使用服务器的设置

使用xftp文件传输工具传入至服务器上的/home/mysql5.7/conf目录下

相关推荐
lzyuuuu4 分钟前
Ubuntu22.04 VMware虚拟机文件拖放问题:文字复制正常但文件拖放失效
ubuntu
Wang's Blog1 小时前
MySQL: 高并发电商场景下的数据库架构演进与性能优化实践
mysql·性能优化·数据库架构
板鸭〈小号〉1 小时前
connect 的断线重连
运维·服务器
程序新视界1 小时前
什么是MySQL JOIN查询的驱动表和被驱动表?
数据库·后端·mysql
黄昏晓x2 小时前
Linux----权限
linux·运维·服务器
小白不想白a2 小时前
【shell】每日shell练习(系统服务状态监控/系统性能瓶颈分析)
linux·运维·服务器
一匹电信狗2 小时前
【MySQL】数据库的相关操作
linux·运维·服务器·数据库·mysql·ubuntu·小程序
迦蓝叶2 小时前
JAiRouter v1.0.0 正式发布:企业级 AI 服务网关的开源解决方案
java·运维·人工智能·网关·spring·ai·开源
陈一Tender3 小时前
JavaWeb后端实战(登录认证 & 令牌技术 & 拦截器 & 过滤器)
java·开发语言·spring boot·mysql
bugtraq20213 小时前
为什么.NET的System.IO.Compression无法解压zlib流
linux·运维·服务器