MySQL 管理与使用指南
本文档涵盖 Windows Docker 环境部署 MySQL、本地服务启停、用户权限管理及配置文件说明,保留必要的操作细节与参数解释。
参考风格:菜鸟教程 - MySQL
一、使用 Docker 部署 MySQL(Windows 示例)
1. 查看本地镜像
docker images
2. 拉取 MySQL 镜像
若本地无所需镜像,则拉取:
docker pull mysql:9.6.0
3. 启动容器
关于换行符的特别说明:
- Windows CMD 使用
^- Windows PowerShell 使用
`- Linux / Mac 使用
\
执行前请确保宿主机已创建数据持久化目录:
D:\Z-Source\Docker\MySQL
docker run -d \
--name MySQL \
-p 3306:3306 \
-v D:\Z-Source\Docker\MySQL:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_ROOT_HOST=% \
-e TZ=Asia/Shanghai \
mysql:9.6.0
各参数含义:
| 参数 | 说明 |
|---|---|
-d |
后台运行容器(detach 模式) |
--name MySQL |
为容器指定一个自定义名称 MySQL |
-p 3306:3306 |
端口映射:宿主机端口 : 容器端口,将容器的 3306 映射到本机 3306 |
-v D:\Z-Source\Docker\MySQL:/var/lib/mysql |
挂载数据卷:宿主机目录 : 容器内 MySQL 数据目录,实现数据持久化 |
-e MYSQL_ROOT_PASSWORD=123456 |
环境变量,设置 MySQL 的 root 用户密码 |
-e MYSQL_ROOT_HOST=% |
环境变量,允许 root 用户从任意主机连接(% 为通配符) |
-e TZ=Asia/Shanghai |
环境变量,设置容器时区为上海,确保时间正确 |
4. 查看运行中的容器
docker ps
5. 进入 MySQL 容器并连接数据库
docker exec -it MySQL mysql -h127.0.0.1 -uroot -p123456
命令分解说明:
docker exec -it MySQL:在名为MySQL的容器中打开一个交互式终端。mysql -h127.0.0.1 -uroot -p123456:
--h:指定要连接的 MySQL 服务器主机地址,此处为本地容器内的回环地址(本地可省略)。
--u:指定登录用户名,此处为root。
--p:指定用户密码,此处直接跟密码123456(也可仅写-p后回车输入,更安全)。
二、本地安装 MySQL 的启停命令
Windows 系统
net start mysql # 启动 MySQL 服务
net stop mysql # 停止 MySQL 服务
Linux 系统
1. 启动服务
sudo systemctl start mysql
# 或旧版命令
sudo service mysql start
2. 关闭服务
sudo systemctl stop mysql
# 或
sudo service mysql stop
3. 重启服务
sudo systemctl restart mysql
# 或
sudo service mysql restart
4. 查看服务状态
sudo systemctl status mysql
# 或
sudo service mysql status
macOS 系统
# 启动
sudo /usr/local/mysql/support-files/mysql.server start
# 停止
sudo /usr/local/mysql/support-files/mysql.server stop
# 重启
sudo /usr/local/mysql/support-files/mysql.server restart
# 状态
sudo /usr/local/mysql/support-files/mysql.server status
注意:macOS 下 MySQL 默认安装路径为
/usr/local/mysql/,具体路径可能因安装方式而异。
三、MySQL 用户与权限管理
1. 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
| 参数 | 含义 |
|---|---|
username |
要创建的用户名 |
host |
允许用户从哪些主机连接。 • 'localhost' 仅允许本地连接• '%' 允许从任意主机连接• 也可指定具体 IP 如 '192.168.1.100' |
password |
用户的登录密码 |
示例:
CREATE USER 'john'@'localhost' IDENTIFIED BY 'password123';
2. 授予权限
GRANT privileges ON database_name.* TO 'username'@'host';
补充说明:
privileges:所需授予的权限,如ALL PRIVILEGES、SELECT、INSERT、UPDATE、DELETE等,多个权限用逗号分隔。database_name.*:指定作用对象。*表示该数据库下的所有表;若只针对某张表,则写为database_name.table_name。
示例:
GRANT ALL PRIVILEGES ON test_db.* TO 'john'@'localhost';
3. 刷新权限
权限变更后必须执行,使修改立即生效:
FLUSH PRIVILEGES;
4. 查看用户权限
SHOW GRANTS FOR 'username'@'host';
示例:
SHOW GRANTS FOR 'john'@'localhost';
5. 撤销权限
REVOKE privileges ON database_name.* FROM 'username'@'host';
示例:
REVOKE ALL PRIVILEGES ON test_db.* FROM 'john'@'localhost';
6. 修改用户密码
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
示例:
ALTER USER 'john'@'localhost' IDENTIFIED BY 'newpassword456';
7. 修改用户可连接主机
MySQL 不支持直接修改用户主机,需先删除原用户,再重新创建。
-- 1. 删除旧用户
DROP USER 'john'@'localhost';
-- 2. 重新创建并指定新主机
CREATE USER 'john'@'%' IDENTIFIED BY 'password123';
8. 删除用户
DROP USER 'username'@'host';
示例:
DROP USER 'john'@'localhost';
9. 创建用户时同时授权(MySQL 8.0.16+ 支持)
CREATE USER 'john'@'localhost' IDENTIFIED BY 'password123' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON test_db.* TO 'john'@'localhost';
cover: 附件/Halo封面/database.jpg
四、配置文件 /etc/my.cnf 说明
/etc/my.cnf 是 MySQL 的主配置文件(Linux 环境下默认路径),用于控制服务器的运行参数。
默认配置示例
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
五、MySQL 常用管理命令速查
以下命令均在 MySQL 客户端内执行。
| 命令 | 作用 |
|---|---|
USE 数据库名; |
切换当前操作的数据库 |
SHOW DATABASES; |
列出所有数据库 |
SHOW TABLES; |
列出当前数据库中的所有表 |
SHOW COLUMNS FROM 表名; |
查看表的字段结构(类型、键、默认值等) |
SHOW INDEX FROM 表名; |
查看表的索引信息 |
SHOW TABLE STATUS [FROM 数据库名] [LIKE 'pattern'] \G; |
查看表的详细状态与统计信息。\G 表示按列纵向输出,便于阅读。 |
示例:
-- 选择数据库
USE RUNOOB;
-- 查看所有表
SHOW TABLES;
-- 查看 runoob_tbl 表的字段结构
SHOW COLUMNS FROM runoob_tbl;
-- 查看 runoob_tbl 表的索引
SHOW INDEX FROM runoob_tbl;
-- 查看以 runoob 开头的表的状态信息(纵向显示)
SHOW TABLE STATUS FROM RUNOOB LIKE 'runoob%' \G;
命令语法教学
创建数据库
CREATE DATABASE 数据库名;
也可以适当的指定字符集和排序规则,我们有很多的字符集和排序规则,这里谨慎使用
CREATE DATABASE IF NOT EXISTS mydatabase
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
- CHARACTER SET utf8mb4:
数据库用 utf8mb4 字符集(能存所有中文、表情、特殊符号) - COLLATE utf8mb4_general_ci:
排序规则用 不区分大小写、通用排序
常用的字符集和排序规则有:
一、常用字符集对比表 (Character Set)
| 字符集 | 全称/含义 | 支持范围 | 适用场景 | 推荐度 |
|---|---|---|---|---|
| utf8mb4 | UTF-8 通用编码 (完整版) | ✅ 中文、英文、数字、表情(Emoji)、特殊符号、多国语言 | 所有新项目、通用业务、国际化系统 | ⭐⭐⭐⭐⭐ (行业标准) |
| utf8 | UTF-8 编码 (阉割版) | ✅ 中文、英文、数字 | ❌ 不支持表情,部分特殊字符会乱码 | ⭐ (仅用于遗留老系统,新项目禁用) |
| gbk | 国标扩展编码 | ✅ 简体中文、英文、数字 | ❌ 不支持表情,不支持多国语言 | ⭐⭐ (仅用于国内传统内网、老政府系统) |
| latin1 | 西欧字符集 | ✅ 英文、数字、西欧字符 (如法语重音) | ❌ 完全不支持中文 | ⭐ (仅用于早期英文系统,新项目禁用) |
| ascii | 美国标准信息交换码 | ✅ 英文、数字、基础符号 | ❌ 不支持中文 | ⭐ (极少单独使用,多为兼容) |
二、常用排序规则对比表 (Collation)
排序规则通常与字符集配套使用,命名规律如下:
- _ci (Case Insensitive):不区分大小写 (最常用)
- _cs (Case Sensitive):区分大小写 (较少用)
- _bin (Binary):二进制比较 (严格区分,按编码值排序)
| 排序规则 | 含义 | 大小写敏感性 | 排序特点 | 适用场景 | 推荐度 |
|---|---|---|---|---|---|
| utf8mb4_general_ci | 通用UTF8MB4排序规则 | ❌ 不区分 | 速度快,中文排序符合直觉 | 绝大多数业务场景、学习、开发 | ⭐⭐⭐⭐⭐ (默认首选) |
| utf8mb4_unicode_ci | 国际标准UTF8MB4排序规则 | ❌ 不区分 | 更精确的国际语言排序,速度略慢 | 对多语言排序有严格要求的系统 | ⭐⭐⭐ (一般项目无需) |
| utf8mb4_bin | UTF8MB4二进制排序规则 | ✅ 区分 | 严格按字符编码数值比较,速度最快 | 密码、验证码、用户名、需严格区分大小写的字段 | ⭐⭐⭐⭐ (特定场景首选) |
| gbk_chinese_ci | GBK中文排序规则 | ❌ 不区分 | 按中文拼音顺序排序 | 传统中文内网系统 | ⭐⭐ (老系统常用) |
| gbk_bin | GBK二进制排序规则 | ✅ 区分 | 严格按GBK编码值比较 | 传统中文系统需区分大小写的场景 | ⭐ (老系统特定场景) |
三、最常用组合推荐表 (直接抄)
| 组合 (字符集 + 排序规则) | 适用场景 | 优点 | 备注 |
|---|---|---|---|
| utf8mb4 + utf8mb4_general_ci | 通用业务、新项目、默认推荐 | 支持表情/中文,不区分大小写,性能好 | 90% 的项目都用这个 |
| utf8mb4 + utf8mb4_bin | 密码、验证码、敏感字段 | 严格区分大小写,排序最精准 | 用于需要精确匹配的场景 |
| gbk + gbk_chinese_ci | 传统中文内网、老系统 | 兼容中文,排序符合中文习惯 | 新项目不推荐,尽量迁移到 utf8mb4 |
MySQL 删除数据库
drop 命令删除数据库
drop 命令格式:
DROP DATABASE <database_name>; -- 直接删除数据库,不检查是否存在
或
DROP DATABASE [IF EXISTS] <database_name>;
-- 直接删除数据库,不检查是否存在
mysql> DROP DATABASE RUNOOB;
-- 删除数据库,如果存在的话
DROP DATABASE IF EXISTS RUNOOB;
MySQL 选择数据库
USE database_name;
mysql -u your_username -p -D your_database
- -D 参数用于指定要选择的数据库。
MySQL 数据类型
数值类型
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
| SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
| MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
| INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
| BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
| FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
| DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
| DECIMAL | 对DECIMAL(M,D),如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期和时间类型
| 类型 | 大小 ( bytes) |
范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901/2155 | YYYY | 年份值 |
| DATETIME | 8 | ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ | YYYY-MM-DD hh:mm:ss | 混合日期和时间值 |
| TIMESTAMP | 4 | ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 |
YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 |