Loading...

文章背景图

MySQL 部署管理与使用指南

2026-01-24
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 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 混合日期和时间值,时间戳
原创

MySQL 部署管理与使用指南

本文链接: MySQL 部署管理与使用指南

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录