CentOS 7 环境下 MySQL 5.7 深度指南:从安装、配置到基础 SQL 操作

1. 基础工具安装与 Yum 仓库配置

1.1 安装 Wget 并更新 Yum

首先安装 wget 工具并更新系统 Yum 缓存。

bash 复制代码
# 安装 wget
yum install -y wget

# 更新 yum
yum update -y

1.2 解决 Yum 无法使用的问题(若遇到)

如果 Yum 无法正常工作(例如,因为 CentOS 7 官方停止维护),可以尝试以下任一方法修复:

方法一:更换 Yum 源

bash 复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo http://file.kangle.cccyun.cn/repo/Centos-7.repo
yum clean all
yum makecache

方法二:切换到 Vault 存档库

bash 复制代码
# 步骤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 仓库文件。

bash 复制代码
# 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

bash 复制代码
yum install -y yum-utils

2.2 禁用 8.0 并启用 5.7

bash 复制代码
# 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 选项跳过。

bash 复制代码
# 导入 GPG 密钥以避免警告(可选但推荐)
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# 安装 MySQL 社区服务器
yum install -y mysql-community-server

关于 GPG 密钥错误:

如果在安装过程中遇到类似 "公钥尚未安装 " 的错误,可能是 GPG 密钥过期。可以尝试导入最新的密钥,然后再次运行安装命令(使用 --nogpgcheck-y):

bash 复制代码
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install mysql-community-server --nogpgcheck

3.2 启动并检查服务状态

启动 MySQL 服务并检查其运行状态。

bash 复制代码
# 启动 MySQL 服务
systemctl start mysqld

# 查看服务状态(确保显示 Active: active (running))
systemctl status mysqld

4. 首次登录与密码配置

4.1 获取临时密码(首次安装)

MySQL 5.7 首次启动会生成一个临时密码。

bash 复制代码
grep "password" /var/log/mysqld.log

如果临时密码无法使用,或者多次尝试均失败,请使用 跳过验证 的方法。

4.2 跳过登录验证(推荐处理临时密码问题)

修改配置文件 /etc/my.cnf 跳过密码验证,以便强制修改 root 密码。

  1. 编辑配置文件:

    bash 复制代码
    vim /etc/my.cnf
  2. [mysqld] 配置段下添加以下行,并设置默认字符集:

    ini 复制代码
    [mysqld]
    # 添加以下行,跳过登陆验证
    skip-grant-tables 
    # 设置默认字符集 UTF-8
    character_set_server=utf8 
    init_connect='SET NAMES utf8' 
  3. 重启 MySQL 服务使配置生效:

    bash 复制代码
    systemctl restart mysqld

4.3 登录并修改 Root 密码

  1. 免密登录 MySQL:

    bash 复制代码
    mysql -u root -h localhost -P 3306
    # 如果出现需要输入密码,直接回车即可
  2. 在 MySQL 命令行内执行以下操作:

    • 设置新密码: MySQL 5.7 默认要求密码必须包含大小写字母、数字和特殊字符,且长度至少为 8 位。

      sql 复制代码
      -- 将 'yourPassword1234!' 替换为您自己的高强度密码
      ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourPassword1234!';
    • 刷新权限: 立即生效。

      sql 复制代码
      FLUSH PRIVILEGES; 
    • 退出:

      sql 复制代码
      exit
  3. 恢复配置文件: 重新编辑 /etc/my.cnf注释或删除 skip-grant-tables 这一行,然后重启 MySQL 服务。

    bash 复制代码
    # 重新编辑 /etc/my.cnf 并注释或删除 skip-grant-tables
    # systemctl restart mysqld

5. 开启远程访问权限

使用新密码重新登录,并开启 root 用户的远程访问权限。

  1. 使用新密码登录:

    bash 复制代码
    mysql -u root -p
    # 提示时输入您的新密码 'yourPassword1234!'
  2. 在 MySQL 命令行内执行以下命令,允许 root 用户从任何主机 (%) 访问:

    sql 复制代码
    -- 注意: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)。在设置密码时,您可以通过以下命令查看当前的密码策略要求:

sql 复制代码
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

sql 复制代码
-- 降低密码安全策略(不推荐用于生产环境)
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;

** 关键提示:** DELETEUPDATE 语句必须WHERE 子句,否则会影响表中的所有数据!


9.5示例

sql 复制代码
-- 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;
相关推荐
编程充电站pro3 小时前
SQL 面试题解析:如何用多表查询写用户订单统计?
数据库·sql
数据知道5 小时前
Go基础:正则表达式 regexp 库详解
开发语言·mysql·golang·正则表达式·go语言
编程充电站pro15 小时前
SQL 面试高频:INNER JOIN vs LEFT JOIN 怎么考?
数据库·sql
这周也會开心15 小时前
SQL-窗口函数做题总结
数据库·sql
2301_7720935615 小时前
tuchuang_后端_前端_注册登录
数据库·后端·网络协议·mysql·wireshark
K_i13415 小时前
中国电信用户行为实时分析系统运维实战
hadoop·mysql
武子康15 小时前
Java-141 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(3)
java·数据库·mysql·spring·性能优化·系统架构·事务
罗政16 小时前
CentOS 7.6 系统源码部署 HivisionIDPhotos
linux·运维·centos
风跟我说过她16 小时前
Sqoop的安装与配置
hive·hadoop·经验分享·centos·hbase·sqoop