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 占用过高,自动迁移副本)。
自启策略
简单地说就是:什么样的故障,可以重启?对这个问题预估不足。
在集群环境中,配置了重启策略,重启过程用户无感,数据出现不一致了,却一直在使用。
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY