MySQL:CentOS 7 Docker 联网安装 MySQL

news/2025/3/11 15:19:14/文章来源:https://www.cnblogs.com/casoli/p/18765125

1. 创建mysql挂载目录

mkdir -p /home/data/mysql/config/ 配置目录挂载
mkdir -p /home/data/mysql/data/ 数据目录挂载

2. 在config目录下创建字符集文件

vim /home/data/mysql/config/my.cnf 填写

[mysqld] user=mysql character-set-server=utf8 
[client] default-character-set=utf8 
[mysql] default-character-set=utf8

3. 安装mysql(拉取镜像)

查看当前本地docker镜像,docker image ls
仓库源查看所有mysql镜像,docker search mysql

拉取指定版本(5.7)mysql镜像:docker pull mysql:5.7 (推荐指定版本吧,最新版本总是有些不适配,而且会有很多问题)

拉取最新版本mysql镜像:docker pull mysql

4. 启动mysql(运行容器)

创建一个shell脚本(放刚刚创建的mysql目录下) cd /home/data/mysql && vim startup.sh
编辑内容如下(5.7版本的):

#!/bin/bash
docker run -itd \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=你的密码 \-v $PWD/config/my.cnf:/etc/my.cnf \-v $PWD/data:/var/lib/mysql \--name mysql \--restart=unless-stopped \mysql:5.7

PS:( \ 后边一定要是换行,不能为空格,因为这个\是转义)

参数说明:

-i 以交互模式运行容器 
-t 为容器重新分配伪输入终端 
-d 后台运行容器 
-p {外部暴露端口}:{容器内部端口} 
-e 添加参数(环境变量) 
-v {挂载的位置}:{挂载源} 添加卷,将容器的文件挂载到外部 
--name 别名 
--restart=always 容器自动启动 
最后一行是 镜像名称:标签(执行docker image ls查看name和tag)

保存退出,Esc+:wq

增加执行权限:chmod +x start.sh
执行 ./start.sh

如果在run的时候忘记加 restart,可以使用命令docker update --restart=unless-stopped mysql进行容器配置更新

docker的重启策略:

  • no ,默认策略,不重启
  • on-failure ,在容器非正常退出(容器退出状态码非0)时,重启容器
  • on-failure:3 ,非正常退出,最多重启三次
  • always ,容器退出总是重启
  • unless-stopped,容器退出时总是重启,不考虑docker守护进程启动时已经停止的容器

 
一开始我分不清 always和unless-stopped,后来做了个测试;
使用always运行的mysql容器,停止运行mysql容器后,重启docker,mysql也启动了;
而unless-stopped则不会启动。

4.-1 ERROR 突然报错

/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused “process_linux.go:258: applying cgroup configuration for process caused “Cannot set property TasksAccounting, or unknown property.
内核版本与docker不兼容
我的解决办法是 yum update,中间可能需要输入y

有人说上边没用 用下边这个解决办法

使用 uname -a 更新系统使用
systemctl restart docker 重新启动

5. 登录mysql,验证成功

查看docker运行的容器列表
docker ps | grep mysql

进入容器伪终端docker exec -it mysql bash
登录MySQL:mysql -uroot -p你的密码

exit 退出mysql
exit 退出容器

6. Navicat登录mysql报错

6.1 阿里云配置安全组规则

在入方向手动添加 mysql的3306端口,优先级越小越优先,

6.2 增加远程登录权限(mysql 8.0+)

连接mysql数据库:use mysql;

查看所有用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
如果没有root用户需先创建,才能执行后续步骤
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';

由于我的mysql安装的8.0+版本,不能使用grant all privileges on *.* to 'root'@'%' identified by '你的密码';命令修改权限
所以使用grant all privileges on *.* to 'root'@'%' ;

刷新权限:flush privileges;

6.3 修改加密规则

网上看到原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 把mysql用户登录密码加密规则还原成mysql_native_password

查看所有用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码' PASSWORD EXPIRE NEVER;

修改用户认证规则
alter user 'root'@'%' identified with mysql_native_password by 'cbc1998+';
其中'用户名'@'%'的 %是所有主机都可以连接,若为'用户名'@'localhost'为本地连接

刷新权限
flush privileges;

6.4 修改端口

阿里云 提示 3306高危端口,建议修改

关闭容器,停止docker
修改 /home/data/docker/containers/{mysql容器id}*/hostconfig.json
PortBindings修改HostPort(外部监听端口),

"PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3307"}]}
前一个数字是容器内端口, 后一个是宿主机端口.

修改同目录下config.v2.json
ExposedPorts 和 Ports

重启docker

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897284.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目经理私藏!2025年10款小众但超实用的管理神器

在项目管理的江湖中,15 年的实战经验就像是一本活的百科全书,见证了无数项目的起起落落。想象一下,在一个大型建筑项目中,原本计划有序的施工突然因为材料供应不及时而陷入混乱,工期眼看着就要延误,成本也开始失控。这时候,一位经验丰富的项目经理凭借着他独特的管理工具…

SQLServer 死锁排查

适用于2012及以上版本一、创建扩展事件会话 CREATE EVENT SESSION [Deadlock_Monitor] ON SERVER ADD EVENT sqlserver.xml_deadlock_report ADD TARGET package0.event_file(SET filename=NDeadlock_Monitor.xel) WITH (STARTUP_STATE=ON); GO ALTER EVENT SESSION [Deadloc…

Eureka服务注册发现源码流程简析

一: 服务的注册客户端通过执行InstanceInfoReplicator#run()调用DiscoveryClient#register()发送http请求进行注册 InstanceInfoReplicator 是同于更新同步当前服务到服务端的任务实现 //A task for updating and replicating the local instanceinfo to the remote server.//…

高等数学笔记

唉...本蒟蒻也是要考研了, 目前目标是深圳大学, 想研究的方向偏算法多一点, 深度学习强化学习什么的, 我会尽最大努力了 9 做到一个新的问题,想起与过去某个问题类似。发现在解答中,对此类问题,以及工具和方法的理解是存在缺陷的,或者发现理解不够深刻。于是通过解决新的…

Scatter(A Distance-Guided Fuzzing For Heap-layout)

SCATTER Abstract 利用堆利用的方法为将受害者的chunk放在可以溢出的chunk之后。SCATTER使能够以无原始的方式以普通purpose程序中的堆溢出产生可剥削的堆布局。它先使用静态分析和动态检测来计算潜在的堆利用布局,然后设计由新操纵距离为指导的fuzz,该距离衡量了在堆布局空间…

使用 Pixi.js 插件实现探险者小游戏(二)

使用 Pixi.js 插件实现探险者小游戏(一)中我们学习了如何创建精灵图,这节我们要让精灵图动起来。 精灵图布局 游戏画面如下图所示,我们要生成一个围墙,探险者、恶魔、宝物都在这个围墙里面。探险者可以上下左右移动,恶魔只能上下移动,宝物是不动的。探险者与宝物被恶魔群…

Docker:CentOS 7 离线安装 docker-ce

0. 检查卸载已有docker 查看是否安装 docker yum list installed | grep docker 卸载docker yum remove docker docker-common container-selinux docker-selinux docker-engineyum remove -y docker-* 1. 下载安装包 要下载docker-18.06.x-ce版本,否则有些不支持 k8s。。请看…

dp泄露攻击

题目: from Crypto.Util.number import *flag = bNSSCTF{******} + b1*100p = getPrime(512) q = getPrime(512)n = p*q e = 65537 d = inverse(e, (p-1)*(q-1))dp = d % (p-1)m = bytes_to_long(flag)c = pow(m, e, n)print(fn = {n}) print(fc = {c}) print(fdp = {dp}) n = …

dpdq泄露攻击-没e_

题目: from Crypto.Util.number import * from gmpy2 import * from secret import flagp = getPrime(1024) q = getPrime(1024) d = inverse(65537,(p-1)*(q-1)) dp = d%(p-1) dq = d%(q-1) print(fc={pow(bytes_to_long(flag),e,p*q)}) print(fp={p}) print(fq={q}) print(fd…

Linux安装Ollama服务

背景 Ollama官方提供了一键式安装脚本,但因国内网络问题,效率太低,所以探索更为快捷方式。 我的系统信息如下 root@yan:/mnt/d/data# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Code…

C学习笔记-311

多维数组和指针 为什么需要数组为了解决大量同类型数据的存储和使用问题。 用数组可以模拟现实世界。Int a[25]:一维数组,可以当做一个线性结构。 Int a[8][6]:可以当做一个平面,意思是8行6列。有48个元素。 Int a[3][4][5]:可以当做一个三维立体。 Int a[3][4][5][6]:可…

e与(p-1)或(q-1)均不互素

题目: from Crypto.Util.number import bytes_to_long from secret import flage = 0x14 p = 7330895897249035860738209657929637460767893905398244379628076799548083100726568174238286139385106848645676643457511649442694896479642275193079806880680590593771233914993…