人人都会AI编程

2.2 服务启停、客户端连接与权限初始化

更新时间:2026-07-11

安装完成后,第一步就是学会如何启动和停止 MySQL 服务,通过客户端连接进去,并完成初始的安全配置。这节会覆盖三个最基础也是最重要的操作:管理服务进程、建立连接、设置初始权限。

2.2.1 服务启停管理

MySQL 服务的启停方式取决于你的操作系统和安装方式。下面按最常见的场景分别说明。

Linux 环境(systemd 管理)

现代 Linux 发行版(CentOS 7+、Ubuntu 16.04+)大多使用 systemd 管理服务。如果是通过官方 YUM/APT 仓库或安装包安装的,服务名通常为 mysqld

# 启动 MySQL 服务
sudo systemctl start mysqld

# 停止 MySQL 服务
sudo systemctl stop mysqld

# 重启 MySQL 服务
sudo systemctl restart mysqld

# 查看服务运行状态
sudo systemctl status mysqld

# 设置开机自启
sudo systemctl enable mysqld

# 禁止开机自启
sudo systemctl disable mysqld

启动成功后,你可以通过 systemctl status mysqld 看到 active (running) 的状态提示。如果启动失败,通常会输出错误信息,常见的如配置文件错误、数据目录权限问题或端口被占用(默认 3306),此时需要查看错误日志定位。

MySQL 的错误日志位置可以在配置文件(/etc/my.cnf/etc/mysql/my.cnf)中通过 log_error 参数找到,默认一般输出在 /var/log/mysqld.log/var/log/mysql/error.log

# 查看最近的错误日志
sudo tail -50 /var/log/mysqld.log

Linux 环境(SysV init 管理)

老旧的 CentOS 6 等系统使用 service 命令:

sudo service mysqld start
sudo service mysqld stop
sudo service mysqld restart
sudo service mysqld status

二进制包或源码编译安装

如果你是通过解压二进制包并手动初始化的方式安装的,MySQL 可能没有注册成系统服务。这时可以用 mysqld_safe 脚本来启动,它是 MySQL 提供的一个启动辅助工具,能在进程异常退出后自动重启。

# 假设 MySQL 安装目录为 /usr/local/mysql,数据目录为 /data/mysql
sudo /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql &

# 关闭则以 mysqladmin 命令
/usr/local/mysql/bin/mysqladmin -u root -p shutdown

Docker 容器环境

如果是 Docker 部署,服务的启停就是对容器的启停。

# 启动一个 MySQL 容器(示例)
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=root123 -d mysql:8.0

# 停止容器
docker stop my-mysql

# 启动已存在的容器
docker start my-mysql

# 重启容器
docker restart my-mysql

# 查看容器日志
docker logs my-mysql

Windows 环境

在 Windows 上,MySQL 通常安装为 Windows 服务,可以在“服务”管理器中操作,也可以通过命令行:

# 以管理员身份打开命令提示符

# 启动服务
net start MySQL80

# 停止服务
net stop MySQL80

# 或者使用 sc 命令
sc start MySQL80
sc stop MySQL80

服务名取决于安装时指定的服务名,默认一般是 MySQL80(8.0 版本)。

2.2.2 客户端连接数据库

MySQL 服务启动后,你需要通过客户端工具连接到数据库才能执行操作。最基础、最可靠的方式就是自带的命令行客户端 mysql

命令行连接

无论哪种操作系统,只要 MySQL 客户端程序安装正确,都可以在终端中执行:

mysql -u 用户名 -p -h 主机地址 -P 端口
  • -u:指定登录用户名,如 root。
  • -p:提示输入密码(建议不要直接在命令行写密码,会被记录在 Shell 历史中)。
  • -h:指定目标主机,如果连本机可以省略或写 127.0.0.1
  • -P:指定端口,默认 3306 可省略。

示例:

# 以 root 用户连接本机 MySQL
mysql -u root -p

# 连接指定主机和端口
mysql -u myuser -p -h 192.168.1.100 -P 3307

输入密码后,如果登录成功,命令提示符会变成 mysql>,说明已经处于 MySQL 的交互式命令行环境。你可以在此输入 SQL 语句。

初次登录与 root 密码处理

MySQL 首次安装后,root 用户的密码生成方式取决于版本和安装方式:

  • 通过官方仓库安装(YUM/APT):安装过程中会生成一个临时 root 密码,通常记录在错误日志中。可以使用如下命令找到它:
  sudo grep 'temporary password' /var/log/mysqld.log
  

初次登录必须使用这个临时密码,并且登录后会强制要求修改密码。

  • 通过 Docker 安装:密码由环境变量 MYSQL_ROOT_PASSWORD 指定,如果未设置则无密码(仅限某些版本,生产环境禁此做法)。
  • 手动初始化数据目录:使用 mysqld --initialize 会生成临时密码并输出到错误日志;若使用 --initialize-insecure 则 root 无密码(极不安全)。

首次用临时密码登录后,执行任何 SQL 之前,必须先修改 root 密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

MySQL 8.0 的密码策略默认要求密码至少 8 位,包含大小写字母、数字和特殊字符。如果想在开发环境调整策略,可以临时降低要求:

-- 查看当前密码策略
SHOW VARIABLES LIKE 'validate_password%';

-- 将策略设为 LOW(只检查长度)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;

修改完成后,退出重新登录即可用新密码。

连接失败的常见原因

  • 服务没启动:先用 systemctl status mysqld 确认服务状态。
  • 端口错误或被防火墙拦截:确保防火墙放行 3306 端口(如 firewall-cmd --add-port=3306/tcp)。
  • 绑定地址限制:配置文件中的 bind-address 可能设为 127.0.0.1 只允许本地连接,若需远程连接可改为 0.0.0.0 或具体 IP,并重启服务。
  • 用户权限问题:没有从特定主机连接的权限,后面权限初始化解决。

其他客户端工具

命令行最可靠,但日常开发也可以配合图形化工具(如 Navicat、DBeaver、MySQL Workbench)来连接,只需提供主机、端口、用户名和密码即可,操作更直观。本书第 2.5 节会详细介绍常用的图形化工具。

2.2.3 权限初始化与安全配置

新安装的 MySQL,root 用户虽然有了密码,但仍需做一些账号和权限的初始配置,以满足日常开发或生产安全基线。

MySQL 的权限模型

MySQL 的权限是“用户 + 来源主机”的组合。比如 'root'@'localhost''root'@'%'不同的账户,可以拥有不同密码和权限。% 代表任意主机,localhost 仅限本地 socket 连接。

权限分为多个级别:全局权限(对所有库有效)、数据库级、表级、列级。可以通过 GRANT 语句授予,REVOKE 回收。

创建开发者账号

生产环境和开发环境都应创建独立的低权限账号,而不是直接使用 root。一个典型操作如下:

-- 创建一个可远程连接的用户,并设置密码
CREATE USER 'dev'@'%' IDENTIFIED BY 'DevPass123!';

-- 授予对指定数据库的全部权限
GRANT ALL PRIVILEGES ON mydb.* TO 'dev'@'%';

-- 授予只读权限(常用于查数需求)
CREATE USER 'readonly'@'%' IDENTIFIED BY 'ReadPass456!';
GRANT SELECT ON mydb.* TO 'readonly'@'%';

-- 刷新权限,使生效
FLUSH PRIVILEGES;

安全建议

  • 移除匿名用户和空密码:早期版本可能存在匿名用户,可以执行 mysql_secure_installation 脚本,它会引导你完成一系列安全设置:设置 root 密码、删除匿名用户、禁止 root 远程登录、删除 test 库等。
  • 限制 root 远程登录:生产环境中,root 应该只能从 localhost 登录,避免远程爆破。通常保留 'root'@'localhost' 即可,若需要远程维护,可创建其他强密码用户并授予 SUPER 等高级权限。
  • 最小权限原则:应用程序连接数据库的用户,只授予业务需要的库和操作权限。比如后端服务一般只需要 SELECT、INSERT、UPDATE、DELETE,不需要 GRANT、DROP、ALTER 等管理权限。
  • 修改密码:使用 ALTER USER 更符合标准,也支持密码过期策略。
-- 修改某个用户密码
ALTER USER 'dev'@'%' IDENTIFIED BY 'NewPassword!';

测试连接与权限

创建好账号后,务必用一个独立客户端测试连接,并验证权限是否如预期。例如,用 dev 账号登录后尝试访问未授权的库,应被拒绝:

mysql -u dev -p -h 192.168.1.100
-- 进入后测试
USE mysql;  -- 应该报错:Access denied

通过以上三步(启停服务、客户端连接、权限初始化),MySQL 的基本环境就处于可用且安全的状态了。后续所有 SQL 操作都将基于这个连接和账号体系展开。