用 Docker 快速启动 MySQL 8.0 实例最省事,推荐命令行操作、显式指定 utf8mb4字符集,并优先使用 mysql-native-password 认证插件避免连接问题。
本地开发学 MySQL,别折腾 mysqld 服务安装、my.cnf 配置、用户权限初始化这些。Docker 一条命令就能拉起干净、可重置的实例,版本也随你选(mysql:8.0 或 mysql:5.7)。
实操建议:
docker + docker-compose(Linux)docker run -d \ --name mysql-learn \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_DATABASE=testdb \ -v $(pwd)/mysql-data:/var/lib/mysql \ -d mysql:8.0
mysql -h 127.0.0.1 -P 3306 -u root -p,密码是 123456
localhost 连,必须用 127.0.0.1,否则可能报 Authentication plugin 'caching_sha2_password' cannot be loaded
MySQL 8.0 默认用 caching_sha2_password,而老客户端(比如某些 GUI 工具或旧版 Python mysql-connector)不支持,连不上还报错模糊。
解决办法(二选一):
-e MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password
docker exec -it mysql-learn mysql -u root -p123456 -e "ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;"
pymysql 支持 caching_sha2_password,但 mysql-connector-python 低于 8.0.19 就不行初学阶段别急着开 TablePlus、Navicat 或 phpMyAdmin。GUI 隐藏了 SQL 执行上下文,容易把「点几下出结果」当成「懂了语法」。
推荐坚持用终端跑命令:
mysql -h 127.0.0.1 -P 3306 -u root -p 登录后,先执行 SELECT VERSION(), CURRENT_USER(); 确认连对了CREATE DATABASE demo CHARSET utf8mb4;、USE demo;、CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20));
mysqldump -h 127.0.0.1 -u root -p --no-data testdb > schema.sql
EXPLAIN 输出)或管理多个连接时再启用很多人写完 CREATE TABLE 就开始 INSERT,直到插入中文变 ???、ORDER BY 中文乱序、或者 WHERE name = '张三' 查不到才回头翻文档。
起步就该定死两件事:
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql -u root -p --default-character-set=utf8mb4,否则即使库是 utf8mb4,连接层可能还是 latin1SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; —— 重点看 character_set_client、character_set_connection、character_set_results 三个是否都是 utf8mb4
utf8mb4 是唯一能存 emoji 和生僻汉字的选项,别信“utf8 就够用”这种过时说法。