docker - 安装mysql

总的来说,不推荐把 mysql 安装到 docker 下,这么安装的后果,是需要自己或公司长期维护。

要求你有 “极大的信心” 和 “充足的时间” 解决过程中的所有问题。

  • 数据库是核心,哪怕未来 docker 没落了,数据库可能还在使用;
  • 安装过程,越简单约好,装得越复杂,风险越大;
  • 数据库大部分人都会,但是不一定懂 docker,后期的项目维护,客户可能无法接受;
  • 有些纯粹是玩得花,k8s、swarm、nas、nfs能上的全上,任何一个环节出问题,都能导致 mysql 损坏。

如果没有这些顾虑,那么就开始你的操作:

镜像拉取/删除

# 拉取镜像
docker pull mysql:8.0.32
# 移除镜像
docker rmi -f mysql:8.0.32

创建容器

# 安装 mysql,注意这是单行命令(这里使用续行符 '\' 连接)
docker run --restart=always --name=mysql8 -p 3307:3306 \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root mysql:8.0.32

# 参数说明:
# restart=always 自动重启
# -p 3307:3306 将容器 3306 端口映射到主机 3307
# -e MYSQL_ROOT_PASSWORD=root 设置初始密码为 root
# -v 目录挂载(日志、数据、配置),核心是 /etc/mysql(my.cnf 所在目录),其余目录可按需调整

# 剩下的步骤与常规安装一致,进入到容器内部,修改 root 账号密码

初始化数据库

进入到容器内部,初始化数据库,操作方式与 linux 上安装一致

# 进入容器
docker exec -it [container_id] bash;

# 登录账号
mysql -u root -p

flush privileges;

# 修改密码(两个命令都可用)
# SET PASSWORD = PASSWORD('root');

# 修改密码(两个命令都可用)
alter user 'root'@'localhost' identified by 'root';

# 密码永不过期
alter user 'root'@'localhost' password expire never;

# 允许任何主机登录
update user set host = '%' where user = 'root';

# 载入信息使之生效,有时候会报错,先执行一下这一句
flush privileges;

已知问题

主从

在使用主从关系的时候,要求网络非常好;

高并发场景下,因为其自身机制问题,如果出现网络波动,本身就容易出现损坏;

使用工具进行事务操作(例如:DBeaver手动提交事务),这种操作会锁表,极易导致主从不一致;

波动的原因,不仅仅是网络问题,挂载不稳定、CPU 占用过高等,都有可能引起波动(例如:k8s 环境下,CPU 占用过高,自动迁移副本)。

自启策略

简单地说就是:什么样的故障,可以重启?对这个问题预估不足。

在集群环境中,配置了重启策略,重启过程用户无感,数据出现不一致了,却一直在使用。

posted on   疯狂的妞妞  阅读(131)  评论(0编辑  收藏  举报

(评论功能已被禁用)
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示