Loading...

文章背景图

MySQL

2025-06-25
0
-
- 分钟
|

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 PRIVILEGESSELECTINSERTUPDATEDELETE 等,多个权限用逗号分隔。

  • 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';

四、配置文件 /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

混合日期和时间值,时间戳

评论交流

文章目录