用 Docker 一键跑起 MySQL 5.7 或 8.0
对新手来说,装原生 MySQL 容易卡在服务启动、权限配置、编码乱码这些环节。Docker 是最省事的选择——不用改系统环境变量,不污染本地端口(默认只开
3306),镜像版本明确,删了重来也只要几秒。
实操建议:
先确认已安装docker和
docker-compose(macOS / Windows 用户推荐用 Docker Desktop) 运行以下命令直接拉起 MySQL 8.0(带初始化数据库和用户):
docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root123 \ -e MYSQL_DATABASE=testdb \ -e MYSQL_USER=dev \ -e MYSQL_PASSWORD=dev123 \ -v $(pwd)/mysql-data:/var/lib/mysql \ -d mysql:8.0若想用更稳定的 MySQL 5.7(尤其配合旧教程或 PHP 项目),把镜像名换成
mysql:5.7即可
$(pwd)/mysql-data是本地持久化路径,第一次运行后会自动生成;别漏掉这个
-v,否则容器重启数据就丢了
连接失败?重点检查这三处
执行
mysql -h 127.0.0.1 -P 3306 -u root -p报错时,90% 出在这几个地方: MySQL 8.0 默认用
caching_sha2_password插件认证,老客户端(比如某些 Python 的
mysql-connector8.0.11 之前版本)不支持 → 改成
mysql_native_password:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';宿主机连不上容器?确认
-p 3306:3306映射正确,且没被本机其他服务(如 MAMP、Homebrew MySQL)占着端口 → 查看占用:
lsof -i :3306(macOS/Linux)或
netstat -ano | findstr :3306(Windows) 远程连接被拒?MySQL 默认只允许
localhost连接 → 进容器执行:
mysql -u root -proot123 -e "CREATE USER 'dev'@'%' IDENTIFIED BY 'dev123'; GRANT ALL ON *.* TO 'dev'@'%'; FLUSH PRIVILEGES;"
MySQL Workbench 或 DBeaver 怎么配才不报错
图形客户端比命令行友好,但新手常因驱动/SSL 设置栽跟头:
Workbench 连 MySQL 8.0:在 Connection → Advanced 里勾选Use SSL→ 设为
Require或
Disable(本地学习建议关掉,避免证书报错) DBeaver 连接时,Driver properties 中必须设
allowPublicKeyRetrieval=true(否则报
Public Key Retrieval is not allowed) 如果提示
Unknown system variable 'query_cache_size',说明用了 MySQL 8.0 驱动连 5.7 实例(或反过来)→ 在 DBeaver 的 Driver Settings → Edit Driver → 切换对应版本的 JAR(如
mysql-connector-java-8.0.33.jar对应 8.0,
mysql-connector-java-5.1.49.jar对应 5.7)
中文存进去变问号?SET NAMES utf8mb4 才是正解
建库建表时指定了
CHARSET=utf8mb4,但插入中文还是乱码,问题大概率出在连接层——MySQL 的
utf8实际是阉割版(最多 3 字节),真正支持 emoji 和生僻字的是
utf8mb4。 容器启动时加参数强制连接编码:
docker run ... -e MYSQL_INITDB_ARGS="--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci" ...进容器后手动设置(临时):
mysql -u root -proot123 -e "SET NAMES utf8mb4;"永久生效需挂载自定义配置文件:
my.cnf内容如下:
[client] default-character-set = utf8mb4 <p>[mysql] default-character-set = utf8mb4</p><p>[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci然后启动时加
-v $(pwd)/my.cnf:/etc/mysql/conf.d/my.cnf
字符集这事,服务端、连接层、客户端三者缺一不可,少设一处就白忙活。
