AI总结
既然决定把 MySQL 也搬进 Docker,那操作就非常爽快了,一行命令就能搞定,完全不用去折腾复杂的编译和环境配置。
为了保证你的数据安全(防止容器重启后数据丢失),我们需要先做一步准备工作,然后在腾讯云上跑一条核心命令即可。
第一步:做点准备工作(非常重要!)
1. 在腾讯云上创建专属数据文件夹
我们需要把 MySQL 的数据“引出”到服务器硬盘上。在终端输入:
mkdir -p /root/mysql/data
mkdir -p /root/mysql/logs
mkdir -p /root/mysql/conf
(这样就算你把 MySQL 容器玩坏了删掉,你的真实数据依然安安静静地躺在这个文件夹里)
2. 简单配置一下 MySQL
在 /root/mysql/conf 目录下创建一个 my.cnf 文件,填入最基础的配置:
[mysqld]
user=mysql
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
secure_file_priv=''
explicit_defaults_for_timestamp=true[client]
default-character-set=utf8mb4[mysql]
default-character-set=utf8mb4
第二步:一键拉取并启动 MySQL 容器
直接复制粘贴下面这整段命令到你的腾讯云终端里回车(注意把 [你的密码] 替换成你自己设定的强密码):
docker run \
-p 3306:3306 \
--name mysql \
-v /root/mysql/logs:/var/log/mysql \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=[你的密码] \
-d \
mysql:8.0
这段“魔法代码”是什么意思呢?
-p 3306:3306:把服务器的 3306 端口交给 MySQL 使用。--name mysql:给容器起个名字,方便以后管理。-v:就是我们刚才说的“数据引渡”,把容器里的数据和日志同步到你服务器刚建好的文件夹里。-e MYSQL_ROOT_PASSWORD=:设置 root 账号的密码(一定要改掉括号里的内容)。-d:让它在后台默默运行。mysql:8.0:自动去官方下载 8.0 版本的最新镜像。
运行后,输入 docker ps,如果看到 mysql 正在运行,就说明你的数据库已经成功起飞了!🚀
第三步:别忘了打开腾讯云的“大门”
就像上次部署 .NET 8 一样,外部电脑想要连接到这个数据库,必须在腾讯云后台放行端口:
- 进入腾讯云轻量服务器控制台的 防火墙(注意这次叫防火墙,和前面提到的安全组是一个东西)。
- 点击 添加规则。
- 协议选 TCP,端口填
3306,来源填0.0.0.0/0(代表允许所有IP访问,如果怕不安全,可以只在需要时放开)。 - 点确定。
💡 进阶小贴士:你的 .NET 8 怎么连它?
这里有个新手容易卡住的点:连接地址用什么?
- 如果你用 Navicat 等本地软件连数据库:地址填你的 腾讯云公网IP,端口 3306,密码是你刚才设的密码。
- 如果你的 .NET 8 项目在另一个 Docker 容器里想连这个 MySQL:
千万不要用localhost或127.0.0.1!因为在 Docker 的世界里,每个容器都是独立的小房间。你应该用 你的腾讯云内网 IP(通常是172.17.0.1或服务器在局域网里的 IP)来连接。
如果后续你打算把 .NET 8 和 MySQL 写在一个 docker-compose.yml 里,它们甚至可以直接用容器名 mysql 互相打招呼,连 IP 都不用记了!需要的话,随时喊我教你写这个“一键部署全家桶”脚本!
Docker 安装完 MySQL 后,所有的操作都可以通过几条简单的命令来完成。我带你一步步确认状态并做好开机自启的配置。
Mysql设置开机启动
一、 如何查看 MySQL 是否成功启动?
在终端里输入以下命令,可以查看当前正在运行的容器列表:
docker ps
怎么看结果?
- 如果列表中出现了名为
mysql(或者你启动时--name指定的名字)的容器,并且STATUS那一栏显示Up XX seconds/minutes,恭喜你,它已经成功跑起来了!🎉 - 如果你没在列表里看到它,说明它可能启动失败退出了。这时候输入
docker ps -a查看所有容器(包括已停止的),找到它并输入docker logs mysql(把 mysql 换成你的容器名)查看报错日志。
二、 如何设置开机自动启动?
这里我们要分两步来保证服务器重启后,数据库能“自己爬起来干活”:
1. 设置 Docker 容器自身随 Docker 服务自启
既然 MySQL 跑在 Docker 里,我们首先要保证这个容器配置了“自启”属性。在你当前运行的容器上,执行以下命令:
docker update --restart=always mysql
(提示:把 mysql 换成你实际给容器起的名字)
这就够了吗?
是的,对于大多数云服务器来说这就足够了。只要腾讯云的宿主机(Linux系统)重启,Docker 服务会自动启动,然后这个 MySQL 容器就会被自动拉起来。
2. (极端情况预防)确保 Docker 服务随系统自启
为了防止极少数情况下 Docker 服务本身没有随系统启动,我们可以顺手给 Linux 系统打个预防针。根据你的系统(通常是 Ubuntu 或 CentOS),任选其一执行:
- Ubuntu / Debian 系统:
sudo systemctl enable docker - CentOS / RHEL 系统:
sudo chkconfig docker on
做完这两步,你的 MySQL 就已经牢牢绑定在开机启动了,可以安然入睡,不用担心半夜服务器维护重启导致网站连不上数据库了。
⚠️ 友情提醒:关于刚刚开放的 3306 端口
在上一步配置腾讯云防火墙时,如果你为了图省事,把 3306 端口的来源设置成了 0.0.0.0/0(允许全网访问),出于安全考虑,强烈建议你找个时间把它改掉!
原因是: 一旦你把 3306 暴露在全网,互联网上的恶意扫描机器人就会疯狂试探你的数据库,试图爆破你的 root 密码。
更安全的做法是:
- 来源限制:把防火墙规则的来源改成你平时办公电脑的固定公网 IP(可以在百度搜“IP”查到)。
- 临时开关:平时关闭 3306 端口,需要维护数据时再用腾讯云后台的“快捷登录”功能或者临时开放几分钟。
- 使用 SSH 隧道:通过 Navicat 等工具的 SSH 隧道功能连接,完全不需要对外开放数据库端口。
保护好数据,咱们才能愉快地继续折腾 .NET 项目!如果需要教你如何在 .NET 8 里配置数据库连接字符串,随时告诉我。
你这个报错是因为启动 MySQL 容器时缺少了必需的密码参数。MySQL 8.0 的官方镜像强制要求你必须通过环境变量指定 root 密码的设置方式。
为什么会出现这个错误?
root@VM-0-12-ubuntu:~# docker run mysql:8.0
2026-04-16 00:08:41+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.45-1.el9 started.
2026-04-16 00:08:42+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2026-04-16 00:08:42+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.45-1.el9 started.
2026-04-16 00:08:42+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specifiedYou need to specify one of the following as an environment variable:◦ MYSQL_ROOT_PASSWORD◦ MYSQL_ALLOW_EMPTY_PASSWORD◦ MYSQL_RANDOM_ROOT_PASSWORD
当你只运行 docker run mysql:8.0 时:
- 容器尝试初始化全新的数据库
- 但没有收到任何密码设置指令
- MySQL 为了保护数据安全,直接拒绝启动并报错
解决方案:加上密码参数重新启动
请使用以下完整命令(记得替换 [你的密码] 为实际密码):
docker run \
-p 3306:3306 \
--name mysql \
-v /root/mysql/logs:/var/log/mysql \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=[你的密码] \
-d \
mysql:8.0
如果之前已经有同名的容器了怎么办?
如果你之前尝试创建过 mysql 容器(即使没启动成功),需要先清理:
# 先停止(如果存在)
docker stop mysql 2>/dev/null || true# 删除旧容器
docker rm mysql 2>/dev/null || true# 再重新运行上面的完整命令
验证是否启动成功
# 查看运行中的容器
docker ps# 查看容器日志(确认无报错)
docker logs mysql --tail 20
快速测试连接
# 进入容器内部测试 MySQL
docker exec -it mysql mysql -uroot -p[你的密码]# 如果能进入 MySQL 命令行,说明一切正常!
小贴士
- 密码复杂度:建议包含大小写字母、数字和特殊字符,避免太简单的密码
- 端口冲突:如果宿主机 3306 端口已被占用,可以改为
-p 3307:3306(用 3307 对外) - 数据持久化:确保
/root/mysql/data目录存在且有写入权限
现在重新运行带密码参数的命令,你的 MySQL 就能顺利启动啦!🚀
