安装完成后,第一步就是学会如何启动和停止 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 操作都将基于这个连接和账号体系展开。