CentOS 7 环境下 MySQL 5.7 深度指南:从安装、配置到基础 SQL 操作
1. 基础工具安装与 Yum 仓库配置
1.1 安装 Wget 并更新 Yum
首先安装 wget
工具并更新系统 Yum 缓存。
# 安装 wget
yum install -y wget# 更新 yum
yum update -y
1.2 解决 Yum 无法使用的问题(若遇到)
如果 Yum 无法正常工作(例如,因为 CentOS 7 官方停止维护),可以尝试以下任一方法修复:
方法一:更换 Yum 源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://file.kangle.cccyun.cn/repo/Centos-7.repo
yum clean all
yum makecache
方法二:切换到 Vault 存档库
# 步骤1:注释掉现有的 mirrorlist 配置
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*# 步骤2:启用 baseurl 指向 CentOS Vault
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*# 步骤3:重建 yum 缓存
yum clean all
yum makecache
1.3 添加 MySQL Yum 仓库
下载并安装 MySQL 官方 Yum 仓库文件。
# 1. 使用 wget 下载 MySQL 8.0 的 Yum 源配置文件
# 注意:该文件包含所有 MySQL 版本的配置
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm# 2. 添加 MySQL Yum 源
yum localinstall -y mysql80-community-release-el7-3.noarch.rpm
2. 启用 MySQL 5.7 版本
默认情况下,MySQL 8.0 仓库是启用的。我们需要安装 yum-utils
工具,然后禁用 8.0 并启用 5.7。
2.1 安装 Yum-Utils
yum install -y yum-utils
2.2 禁用 8.0 并启用 5.7
# 1. 禁用 MySQL 8.0 社区版
yum-config-manager --disable mysql80-community# 2. 启用 MySQL 5.7 社区版
yum-config-manager --enable mysql57-community# 3. 检查 MySQL 5.7 是否已启用
# 确保输出中显示 "mysql57-community/x86_64" 处于启用状态
yum repolist enabled | grep mysql
3. 安装 MySQL 服务
3.1 正式安装
执行安装命令。安装过程中如果遇到 GPG 密钥检查问题,可使用 --nogpgcheck
选项跳过。
# 导入 GPG 密钥以避免警告(可选但推荐)
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql# 安装 MySQL 社区服务器
yum install -y mysql-community-server
关于 GPG 密钥错误:
如果在安装过程中遇到类似 “公钥尚未安装” 的错误,可能是 GPG 密钥过期。可以尝试导入最新的密钥,然后再次运行安装命令(使用--nogpgcheck
或-y
):rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 yum install mysql-community-server --nogpgcheck
3.2 启动并检查服务状态
启动 MySQL 服务并检查其运行状态。
# 启动 MySQL 服务
systemctl start mysqld# 查看服务状态(确保显示 Active: active (running))
systemctl status mysqld
4. 首次登录与密码配置
4.1 获取临时密码(首次安装)
MySQL 5.7 首次启动会生成一个临时密码。
grep "password" /var/log/mysqld.log
如果临时密码无法使用,或者多次尝试均失败,请使用 跳过验证 的方法。
4.2 跳过登录验证(推荐处理临时密码问题)
修改配置文件 /etc/my.cnf
跳过密码验证,以便强制修改 root 密码。
-
编辑配置文件:
vim /etc/my.cnf
-
在
[mysqld]
配置段下添加以下行,并设置默认字符集:[mysqld] # 添加以下行,跳过登陆验证 skip-grant-tables # 设置默认字符集 UTF-8 character_set_server=utf8 init_connect='SET NAMES utf8'
-
重启 MySQL 服务使配置生效:
systemctl restart mysqld
4.3 登录并修改 Root 密码
-
免密登录 MySQL:
mysql -u root -h localhost -P 3306 # 如果出现需要输入密码,直接回车即可
-
在 MySQL 命令行内执行以下操作:
- 设置新密码: MySQL 5.7 默认要求密码必须包含大小写字母、数字和特殊字符,且长度至少为 8 位。
-- 将 'yourPassword1234!' 替换为您自己的高强度密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourPassword1234!';
- 刷新权限: 立即生效。
FLUSH PRIVILEGES;
- 退出:
exit
- 设置新密码: MySQL 5.7 默认要求密码必须包含大小写字母、数字和特殊字符,且长度至少为 8 位。
-
恢复配置文件: 重新编辑
/etc/my.cnf
,注释或删除skip-grant-tables
这一行,然后重启 MySQL 服务。# 重新编辑 /etc/my.cnf 并注释或删除 skip-grant-tables # systemctl restart mysqld
5. 开启远程访问权限
使用新密码重新登录,并开启 root 用户的远程访问权限。
-
使用新密码登录:
mysql -u root -p # 提示时输入您的新密码 'yourPassword1234!'
-
在 MySQL 命令行内执行以下命令,允许
root
用户从任何主机 (%
) 访问:-- 注意:IDENTIFIED BY 后面的密码必须与您刚才设置的新密码一致 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourPassword1234!' WITH GRANT OPTION;-- 立即生效 FLUSH PRIVILEGES;exit
6. 附录:MySQL 5.7 密码策略
MySQL 5.7 默认启用了密码验证插件 (validate_password
)。在设置密码时,您可以通过以下命令查看当前的密码策略要求:
SHOW VARIABLES LIKE 'validate_password%';
变量名 | 默认值 | 含义 |
---|---|---|
validate_password_length | 8 | 密码的最小长度。 |
validate_password_policy | MEDIUM | 密码检查的强度,MEDIUM 至少要求大小写字母、数字和特殊字符。 |
validate_password_mixed_case_count | 1 | 密码中大小写字母的最小个数。 |
validate_password_number_count | 1 | 密码中数字的最小个数。 |
validate_password_special_char_count | 1 | 密码中特殊字符的最小个数。 |
如果需要,您可以降低策略要求,例如将策略改为 LOW
:
-- 降低密码安全策略(不推荐用于生产环境)
SET GLOBAL validate_password_policy=0;
-- 或
SET GLOBAL validate_password_policy=LOW; -- 刷新权限
FLUSH PRIVILEGES;
7. 数据库(Database)操作
目的 | SQL 语句 | 示例 |
---|---|---|
显示所有数据库 | SHOW DATABASES; | SHOW DATABASES; |
创建新数据库 | CREATE DATABASE 数据库名; | CREATE DATABASE school_db; |
删除数据库 | DROP DATABASE 数据库名; | DROP DATABASE school_db; |
切换/使用数据库 | USE 数据库名; | USE school_db; |
8. 表格(Table)操作
在操作表之前,您必须先使用 USE 数据库名;
命令切换到目标数据库。
目的 | SQL 语句 | 示例 |
---|---|---|
显示当前数据库所有表 | SHOW TABLES; | SHOW TABLES; |
创建新表 | CREATE TABLE 表名 (列名 数据类型, ...); | CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(100), age INT); |
查看表结构 | DESC 表名; | DESC students; |
删除表 | DROP TABLE 表名; | DROP TABLE students; |
9. 数据(Data)操作:CRUD (增、查、改、删)
9.1 增加数据 (Insert)
将新记录添加到表中。
目的 | SQL 语句 | 示例 |
---|---|---|
插入完整行 | INSERT INTO 表名 VALUES (值1, 值2, ...); | INSERT INTO students VALUES (101, '张三', 20); |
插入指定列 | INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2); | INSERT INTO students (id, name) VALUES (102, '李四'); |
9.2 查询数据 (Select)
这是最常用也是最复杂的语句,用于从数据库中检索数据。
目的 | SQL 语句 | 示例 |
---|---|---|
查询所有数据和所有列 | SELECT * FROM 表名; | SELECT * FROM students; |
查询指定列 | SELECT 列1, 列2 FROM 表名; | SELECT name, age FROM students; |
带条件查询 | SELECT * FROM 表名 WHERE 条件; | SELECT * FROM students WHERE age > 20; |
去重查询 | SELECT DISTINCT 列名 FROM 表名; | ` SELECT DISTINCT age FROM students;`` |
9.3 修改数据 (Update)
用于更新表中已有的记录。
目的 | SQL 语句 | 示例 |
---|---|---|
更新指定记录 | UPDATE 表名 SET 列1=新值 WHERE 条件; | UPDATE students SET age=21 WHERE name='张三'; |
更新多列 | UPDATE 表名 SET 列1=值1, 列2=值2 WHERE 条件; | UPDATE students SET name='王五', age=22 WHERE id=102; |
9.4 删除数据 (Delete)
用于从表中删除记录。
目的 | SQL 语句 | 示例 |
---|---|---|
删除指定记录 | DELETE FROM 表名 WHERE 条件; | DELETE FROM students WHERE name='李四'; |
删除所有记录 | DELETE FROM 表名; | DELETE FROM students; |
** 关键提示:**
DELETE
和UPDATE
语句必须带WHERE
子句,否则会影响表中的所有数据!
9.5示例
-- 1. 创建数据库
CREATE DATABASE test_db;-- 2. 切换到数据库
USE test_db;-- 3. 创建表
CREATE TABLE product (p_id INT PRIMARY KEY,p_name VARCHAR(50),price DECIMAL(10, 2),stock INT
);-- 4. 插入数据
INSERT INTO product VALUES (1, '笔记本电脑', 7999.00, 50);
INSERT INTO product VALUES (2, '机械键盘', 599.00, 120);
INSERT INTO product VALUES (3, '无线鼠标', 199.50, 200);-- 5. 查询所有数据
SELECT * FROM product;-- 6. 更新数据:将笔记本电脑的价格降低
UPDATE product SET price = 7500.00 WHERE p_name = '笔记本电脑';-- 7. 查询价格低于 600 的商品
SELECT p_name, price FROM product WHERE price < 600;-- 8. 删除数据:删除库存为 200 的商品
DELETE FROM product WHERE stock = 200;-- 9. 再次查询所有数据验证
SELECT * FROM product;