【Linux作业】CentOS 7下MySQL数据库安装与数据导入实操项目报告

记录一个Linux作业:

在Centos下安装MySql数据库并导入数据操作。

最后附上最终的实验报告。

文章目录

一、实验环境与详细实操步骤

1. 实验环境说明

  • 操作系统:CentOS 7.9 Minimal
  • MySQL版本:MySQL 5.7(社区版)
  • 硬件要求:虚拟机或物理机,至少2GB RAM,20GB硬盘空间
  • 网络要求:可访问互联网以下载软件包

2. 详细实操步骤

步骤1:系统准备与更新
bash 复制代码
# 1.1 登录系统(使用root用户或具有sudo权限的用户)
ssh root@服务器IP地址

# 1.2 检查系统版本
cat /etc/redhat-release
# 预期输出:CentOS Linux release 7.9.2009 (Core)

# 1.3 更新系统到最新状态
yum update -y

# 1.4 安装常用工具
yum install -y wget vim net-tools lsof

# 1.5 关闭防火墙(生产环境请谨慎操作)
systemctl stop firewalld
systemctl disable firewalld

# 1.6 关闭SELinux(临时关闭)
setenforce 0
# 永久关闭需要编辑配置文件
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
步骤2:安装MySQL 5.7
bash 复制代码
# 2.1 下载MySQL官方Yum仓库
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

# 2.2 安装MySQL仓库
rpm -ivh mysql57-community-release-el7-11.noarch.rpm

# 2.3 检查仓库是否安装成功
yum repolist enabled | grep "mysql.*-community.*"

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

# 2.5 检查安装的MySQL版本
mysql --version
# 预期输出:mysql  Ver 14.14 Distrib 5.7.xx, for Linux (x86_64)

# 2.6 启动MySQL服务
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld

# 2.7 查看MySQL初始密码
grep 'temporary password' /var/log/mysqld.log
# 会显示类似内容:A temporary password is generated for root@localhost: 随机密码
步骤3:MySQL安全配置与初始化
bash 复制代码
# 3.1 运行安全配置脚本(使用上一步获取的临时密码)
mysql_secure_installation

# 交互式配置过程:
# 1. 输入临时密码
# 2. 是否修改root密码?[Y/n] y
# 3. 输入新密码(需包含大小写字母、数字、特殊字符,长度至少8位)
# 4. 确认新密码
# 5. 删除匿名用户?[Y/n] y
# 6. 禁止root远程登录?[Y/n] n(根据需求选择)
# 7. 删除测试数据库?[Y/n] y
# 8. 重新加载权限表?[Y/n] y

# 3.2 测试登录MySQL
mysql -u root -p
# 输入密码后进入MySQL命令行

# 3.3 创建用于测试的数据库
CREATE DATABASE school_db;
SHOW DATABASES;

# 3.4 创建新用户并授权
CREATE USER 'school_admin'@'localhost' IDENTIFIED BY 'School@123';
GRANT ALL PRIVILEGES ON school_db.* TO 'school_admin'@'localhost';
FLUSH PRIVILEGES;

# 3.5 退出MySQL
EXIT;
步骤4:准备测试数据
bash 复制代码
# 4.1 创建测试数据文件
vim /tmp/students.sql

在编辑器中输入以下SQL内容:

sql 复制代码
-- 创建学生表
CREATE TABLE IF NOT EXISTS students (
    student_id INT PRIMARY KEY AUTO_INCREMENT,
    student_name VARCHAR(50) NOT NULL,
    gender ENUM('男', '女') NOT NULL,
    birth_date DATE,
    class VARCHAR(20),
    enrollment_date DATE DEFAULT CURRENT_DATE,
    contact_phone VARCHAR(15),
    email VARCHAR(100),
    address TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 创建成绩表
CREATE TABLE IF NOT EXISTS scores (
    score_id INT PRIMARY KEY AUTO_INCREMENT,
    student_id INT,
    subject VARCHAR(50) NOT NULL,
    score DECIMAL(5,2) CHECK (score >= 0 AND score <= 100),
    exam_date DATE,
    FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 插入学生数据
INSERT INTO students (student_name, gender, birth_date, class, contact_phone, email, address) VALUES
('张三', '男', '2005-03-15', '高三(1)班', '13800138001', 'zhangsan@example.com', '北京市海淀区'),
('李四', '女', '2005-07-22', '高三(2)班', '13800138002', 'lisi@example.com', '上海市浦东新区'),
('王五', '男', '2005-01-30', '高三(1)班', '13800138003', 'wangwu@example.com', '广州市天河区'),
('赵六', '女', '2005-11-18', '高三(3)班', '13800138004', 'zhaoliu@example.com', '深圳市南山区'),
('钱七', '男', '2005-05-09', '高三(2)班', '13800138005', 'qianqi@example.com', '杭州市西湖区');

-- 插入成绩数据
INSERT INTO scores (student_id, subject, score, exam_date) VALUES
(1, '数学', 95.5, '2023-12-15'),
(1, '英语', 88.0, '2023-12-16'),
(1, '物理', 92.5, '2023-12-17'),
(2, '数学', 87.0, '2023-12-15'),
(2, '英语', 91.5, '2023-12-16'),
(2, '化学', 89.0, '2023-12-18'),
(3, '数学', 78.5, '2023-12-15'),
(3, '英语', 82.0, '2023-12-16'),
(4, '数学', 96.0, '2023-12-15'),
(4, '英语', 94.5, '2023-12-16'),
(5, '数学', 85.0, '2023-12-15'),
(5, '英语', 79.5, '2023-12-16');
步骤5:导入测试数据
bash 复制代码
# 5.1 使用school_admin用户登录并导入数据
mysql -u school_admin -p school_db < /tmp/students.sql

# 5.2 验证数据导入
mysql -u school_admin -p

# 5.3 在MySQL命令行中执行验证查询
USE school_db;

# 查看所有表
SHOW TABLES;

# 查询学生数据
SELECT * FROM students;

# 查询成绩数据
SELECT * FROM scores;

# 复杂查询:查询每个学生的平均分
SELECT 
    s.student_id,
    s.student_name,
    s.class,
    ROUND(AVG(sc.score), 2) as avg_score,
    COUNT(sc.subject) as subject_count
FROM students s
LEFT JOIN scores sc ON s.student_id = sc.student_id
GROUP BY s.student_id, s.student_name, s.class
ORDER BY avg_score DESC;
步骤6:配置MySQL远程访问(可选)
bash 复制代码
# 6.1 修改MySQL配置文件
vim /etc/my.cnf

# 在[mysqld]部分添加或修改:
# bind-address = 0.0.0.0

# 6.2 重启MySQL服务
systemctl restart mysqld

# 6.3 在MySQL中创建远程访问用户(使用root登录)
mysql -u root -p

# 创建远程用户
CREATE USER 'remote_admin'@'%' IDENTIFIED BY 'Remote@123';
GRANT ALL PRIVILEGES ON school_db.* TO 'remote_admin'@'%';
FLUSH PRIVILEGES;
EXIT;

# 6.4 开放防火墙端口(如果开启了防火墙)
# firewall-cmd --zone=public --add-port=3306/tcp --permanent
# firewall-cmd --reload
步骤7:备份与恢复测试
bash 复制代码
# 7.1 备份数据库
mysqldump -u school_admin -p school_db > /tmp/school_db_backup_$(date +%Y%m%d).sql

# 7.2 创建测试数据库用于恢复
mysql -u root -p -e "CREATE DATABASE school_db_test;"

# 7.3 恢复备份到测试数据库
mysql -u school_admin -p school_db_test < /tmp/school_db_backup_$(date +%Y%m%d).sql

# 7.4 验证恢复结果
mysql -u school_admin -p -e "USE school_db_test; SELECT COUNT(*) FROM students;"
步骤8:自动化脚本编写
bash 复制代码
# 8.1 创建数据库维护脚本
vim /usr/local/bin/mysql_maintenance.sh

脚本内容:

bash 复制代码
#!/bin/bash
# MySQL数据库维护脚本

BACKUP_DIR="/data/mysql_backup"
LOG_FILE="/var/log/mysql_backup.log"
DB_NAME="school_db"
DB_USER="school_admin"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份数据库
echo "[$(date)] 开始备份数据库 $DB_NAME" >> $LOG_FILE
mysqldump -u $DB_USER -p'School@123' $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.sql

if [ $? -eq 0 ]; then
    echo "[$(date)] 数据库备份成功: $BACKUP_DIR/${DB_NAME}_${DATE}.sql" >> $LOG_FILE
    
    # 压缩备份文件
    gzip $BACKUP_DIR/${DB_NAME}_${DATE}.sql
    
    # 删除7天前的备份
    find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
    
    # 检查数据库状态
    mysqlcheck -u $DB_USER -p'School@123' $DB_NAME --auto-repair >> $LOG_FILE
else
    echo "[$(date)] 数据库备份失败!" >> $LOG_FILE
fi
bash 复制代码
# 8.2 给脚本添加执行权限
chmod +x /usr/local/bin/mysql_maintenance.sh

# 8.3 添加到计划任务
crontab -e
# 添加以下内容(每天凌晨2点执行):
# 0 2 * * * /usr/local/bin/mysql_maintenance.sh

二、项目报告

CentOS 7下MySQL数据库安装与数据导入实操项目报告

引言

项目背景

在当今信息技术高速发展的时代,数据库管理系统作为数据存储和管理的核心组件,已成为各类信息系统不可或缺的基础设施。MySQL作为最流行的开源关系型数据库管理系统之一,以其高性能、高可靠性、易用性和开源免费的特性,广泛应用于Web应用、企业系统、数据分析等各个领域。在Linux服务器环境下部署和管理MySQL数据库,是系统管理员、开发人员以及运维工程师必须掌握的核心技能。

本项目立足于实际应用需求,选择在CentOS 7操作系统上完成MySQL数据库的完整部署与配置。CentOS作为企业级Linux发行版的代表,以其稳定性和安全性著称,是目前服务器环境中最常用的操作系统之一。通过本项目的实践,不仅能够掌握Linux系统下软件安装、配置和管理的基本方法,还能深入理解数据库系统的部署流程,为后续的数据库管理、应用开发和系统运维工作打下坚实基础。

项目目标

本项目的核心目标是在CentOS 7操作系统上完成MySQL 5.7数据库的完整部署与配置,并通过实际的数据导入操作验证系统的可用性和功能性。具体目标分解如下:

  1. 系统环境准备:完成CentOS 7系统的初始化配置,包括系统更新、基础工具安装和必要的安全设置。
  2. MySQL数据库安装:通过官方仓库安装MySQL 5.7社区版,确保安装过程正确无误。
  3. 数据库安全配置:运行安全配置脚本,设置root密码、删除匿名用户、移除测试数据库等安全措施。
  4. 数据库初始化:创建测试数据库和用户,配置相应的访问权限。
  5. 数据导入与验证:设计合理的测试数据结构,导入测试数据,并通过多种查询验证数据完整性。
  6. 维护配置:配置数据库备份机制,编写自动化维护脚本,确保系统的可持续运行。
环境说明
  • 硬件环境:虚拟机(VMware Workstation 16 Pro),配置为2核CPU,4GB内存,50GB硬盘空间
  • 操作系统:CentOS 7.9 Minimal版本,内核版本 3.10.0-1160.el7.x86_64
  • 数据库系统:MySQL Community Server 5.7.42
  • 网络环境:NAT网络模式,可访问互联网以下载软件包
  • 工具软件:SSH客户端(PuTTY 0.78)、文本编辑器(Vim 7.4)

二、项目准备

理论知识

本项目涉及以下Linux核心知识点:

  1. yum软件包管理:作为CentOS系统的包管理工具,yum能够自动处理依赖关系,实现软件的安装、更新和卸载。本项目中将使用yum安装MySQL及其依赖包。

  2. 系统服务管理:通过systemctl命令管理系统服务,包括启动(start)、停止(stop)、重启(restart)、查看状态(status)以及设置开机自启(enable)。

  3. 文件权限管理:Linux系统的安全基础,包括文件权限的查看(ls -l)、修改(chmod)和所有权变更(chown)。数据库相关文件需要正确的权限设置以保证安全性。

  4. 文本处理与编辑:使用vim编辑器创建和修改配置文件,以及使用重定向操作符(>、>>、<)处理输入输出。

  5. 进程与端口管理:通过ps命令查看进程状态,通过netstat或ss命令查看网络连接和端口监听情况,确保MySQL服务正常运行在3306端口。

  6. Shell脚本编程:编写自动化脚本实现数据库的定期备份和维护,使用变量、条件判断、循环等Shell编程基础。

  7. 计划任务配置:使用crontab设置定时任务,实现自动化运维。

准备工作

在开始项目实施前,需要完成以下准备工作:

  1. 系统安装:已完成CentOS 7.9 Minimal版本的安装,配置了root用户密码,并确保系统能够正常启动。

  2. 网络配置 :通过ip addr命令查看网络配置,使用ping baidu.com测试网络连通性,确保系统能够访问互联网。

  3. SSH服务启用 :通过systemctl start sshd启动SSH服务,方便通过远程终端进行操作。

  4. 时间同步 :执行timedatectl set-timezone Asia/Shanghai设置正确的时区,确保系统时间准确。

  5. 磁盘空间检查 :使用df -h命令检查磁盘空间,确保有足够的空间安装MySQL及其数据文件。

  6. 内存检查 :使用free -m命令检查内存使用情况,MySQL 5.7推荐至少2GB内存。

三、项目实施步骤

第一阶段:系统初始化配置

步骤1.1:系统登录与版本确认

首先通过SSH客户端连接到CentOS服务器,使用root账户登录。登录后立即检查系统版本,确保是CentOS 7系列。执行命令:

bash 复制代码
cat /etc/redhat-release

预期输出为"CentOS Linux release 7.9.2009 (Core)",确认系统版本符合要求。

步骤1.2:系统更新与基础工具安装

为了保证系统的安全性和稳定性,首先进行系统更新:

bash 复制代码
yum update -y

此命令会自动下载并安装所有可用的更新包,"-y"参数表示自动确认所有提示。

接下来安装项目所需的基础工具:

bash 复制代码
yum install -y wget vim net-tools lsof
  • wget:用于从网络下载文件
  • vim:高级文本编辑器
  • net-tools:包含netstat等网络工具
  • lsof:列出打开文件的工具,用于端口检查

步骤1.3:安全配置调整

为了方便实验环境配置,暂时关闭防火墙和SELinux:

bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

注意:生产环境中应根据实际安全需求进行配置,不应直接关闭这些安全机制。

第二阶段:MySQL数据库安装

步骤2.1:添加MySQL官方仓库

CentOS默认仓库中的MySQL版本可能较旧,因此需要添加MySQL官方仓库:

bash 复制代码
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

下载完成后,安装仓库文件:

bash 复制代码
rpm -ivh mysql57-community-release-el7-11.noarch.rpm

成功安装后,检查仓库是否已正确添加:

bash 复制代码
yum repolist enabled | grep "mysql.*-community.*"

应看到mysql57-community仓库已启用。

步骤2.2:安装MySQL服务器

执行以下命令安装MySQL服务器:

bash 复制代码
yum install -y mysql-community-server

安装过程大约需要2-5分钟,具体时间取决于网络速度。安装完成后验证版本:

bash 复制代码
mysql --version

预期输出包含"Distrib 5.7"字样,确认安装的版本正确。

步骤2.3:启动MySQL服务

安装完成后,启动MySQL服务并设置开机自启:

bash 复制代码
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld

systemctl status mysqld命令输出中应显示"active (running)",表示服务已成功启动。

步骤2.4:获取初始密码

MySQL 5.7在首次启动时会为root用户生成一个临时密码,查看日志获取该密码:

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

输出类似于:"2023-12-01T10:00:00.123456Z 1 Note A temporary password is generated for root@localhost: Abc123def",记录下"Abc123def"这部分密码。

第三阶段:MySQL安全配置

步骤3.1:运行安全配置脚本

使用获取的临时密码运行安全配置脚本:

bash 复制代码
mysql_secure_installation

脚本会引导完成以下配置:

  1. 输入临时密码
  2. 设置新密码(要求包含大小写字母、数字、特殊字符)
  3. 删除匿名用户
  4. 禁止root远程登录(根据需求选择)
  5. 删除测试数据库
  6. 重新加载权限表

步骤3.2:创建应用数据库和用户

以root身份登录MySQL:

bash 复制代码
mysql -u root -p

输入新设置的root密码后,进入MySQL命令行。首先创建项目数据库:

sql 复制代码
CREATE DATABASE school_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

使用utf8mb4字符集可以支持完整的Unicode字符,包括表情符号。

创建专门管理该数据库的用户:

sql 复制代码
CREATE USER 'school_admin'@'localhost' IDENTIFIED BY 'School@123';
GRANT ALL PRIVILEGES ON school_db.* TO 'school_admin'@'localhost';
FLUSH PRIVILEGES;

这样既保证了安全性,又遵循了最小权限原则。

步骤3.3:验证用户权限

退出root登录,用新创建的用户登录测试:

bash 复制代码
mysql -u school_admin -p

输入密码后,尝试访问数据库:

sql 复制代码
USE school_db;
SHOW TABLES;

此时应显示"Empty set",因为还没有创建表。

第四阶段:测试数据准备与导入

步骤4.1:设计数据表结构

根据学校管理系统的常见需求,设计两个核心表:

  1. students表:存储学生基本信息,包含学号、姓名、性别、出生日期、班级等字段
  2. scores表:存储学生成绩信息,与students表通过外键关联

详细SQL语句已在实验步骤中提供,这里重点说明设计考虑:

  • 使用InnoDB引擎,支持事务和外键约束
  • 设置主键自增,确保唯一性
  • 添加必要的检查约束,如成绩范围限制
  • 设置默认值和自动时间戳

步骤4.2:创建数据导入文件

使用vim创建SQL文件:

bash 复制代码
vim /tmp/students.sql

将完整的SQL语句写入文件,包括:

  1. 表结构创建语句
  2. 示例数据插入语句
  3. 索引创建语句(可选的性能优化)

步骤4.3:执行数据导入

使用school_admin用户导入数据:

bash 复制代码
mysql -u school_admin -p school_db < /tmp/students.sql

导入过程应无错误输出,表示导入成功。

步骤4.4:数据验证

登录MySQL验证数据:

bash 复制代码
mysql -u school_admin -p

执行一系列验证查询:

sql 复制代码
-- 查看表结构
DESC students;
DESC scores;

-- 统计记录数
SELECT 'students' as table_name, COUNT(*) as record_count FROM students
UNION ALL
SELECT 'scores' as table_name, COUNT(*) as record_count FROM scores;

-- 查看学生数据
SELECT * FROM students LIMIT 5;

-- 查看成绩数据
SELECT * FROM scores LIMIT 10;
第五阶段:高级查询与功能测试

步骤5.1:复杂查询测试

测试数据库的查询功能,执行一些实用的复杂查询:

sql 复制代码
-- 查询每个学生的平均成绩
SELECT 
    s.student_id,
    s.student_name,
    s.class,
    ROUND(AVG(sc.score), 2) as avg_score,
    COUNT(sc.subject) as subject_count
FROM students s
LEFT JOIN scores sc ON s.student_id = sc.student_id
GROUP BY s.student_id, s.student_name, s.class
ORDER BY avg_score DESC;

-- 查询各科目平均分
SELECT 
    subject,
    ROUND(AVG(score), 2) as avg_score,
    MAX(score) as max_score,
    MIN(score) as min_score,
    COUNT(*) as student_count
FROM scores
GROUP BY subject
ORDER BY avg_score DESC;

-- 查询每班学生数量
SELECT 
    class,
    COUNT(*) as student_count,
    SUM(CASE WHEN gender='男' THEN 1 ELSE 0 END) as male_count,
    SUM(CASE WHEN gender='女' THEN 1 ELSE 0 END) as female_count
FROM students
GROUP BY class;

步骤5.2:事务功能测试

测试MySQL的事务处理能力:

sql 复制代码
START TRANSACTION;

-- 插入新学生
INSERT INTO students (student_name, gender, birth_date, class) 
VALUES ('测试学生', '男', '2005-08-15', '测试班');

-- 获取刚插入的学生ID
SET @new_student_id = LAST_INSERT_ID();

-- 为该学生插入成绩
INSERT INTO scores (student_id, subject, score) 
VALUES (@new_student_id, '数学', 85.5);

-- 提交事务
COMMIT;

-- 验证数据
SELECT * FROM students WHERE student_name = '测试学生';
SELECT * FROM scores WHERE student_id = @new_student_id;
第六阶段:备份与恢复测试

步骤6.1:数据库备份

使用mysqldump工具进行完整备份:

bash 复制代码
mysqldump -u school_admin -p school_db > /tmp/school_db_full_backup.sql

备份文件包含数据库结构、数据和存储过程等完整信息。

步骤6.2:备份压缩与归档

为节省空间,压缩备份文件:

bash 复制代码
gzip /tmp/school_db_full_backup.sql

生成school_db_full_backup.sql.gz压缩文件。

步骤6.3:模拟数据丢失与恢复

首先模拟数据问题:

sql 复制代码
-- 删除部分数据
DELETE FROM scores WHERE student_id = 1;
-- 验证数据已删除
SELECT * FROM scores WHERE student_id = 1;

然后从备份恢复:

bash 复制代码
# 解压备份文件
gunzip /tmp/school_db_full_backup.sql.gz

# 恢复数据
mysql -u school_admin -p school_db < /tmp/school_db_full_backup.sql

# 验证恢复结果
mysql -u school_admin -p -e "USE school_db; SELECT COUNT(*) FROM scores WHERE student_id = 1;"
第七阶段:自动化运维配置

步骤7.1:编写备份脚本

创建自动化备份脚本,包含完整的功能:

bash 复制代码
vim /usr/local/bin/mysql_backup.sh

脚本内容应包括:

  1. 变量定义(备份目录、数据库名、日志文件等)
  2. 目录创建检查
  3. 备份执行与错误处理
  4. 备份文件压缩
  5. 旧备份清理
  6. 日志记录

步骤7.2:设置计划任务

配置cron定时执行备份任务:

bash 复制代码
crontab -e

添加以下内容:

复制代码
# 每天凌晨2点执行数据库备份
0 2 * * * /usr/local/bin/mysql_backup.sh > /dev/null 2>&1

# 每周日凌晨3点执行数据库优化
0 3 * * 0 mysqlcheck -u school_admin -p'School@123' school_db --auto-repair > /var/log/mysql_optimize.log 2>&1

步骤7.3:监控配置

配置简单的监控,检查MySQL服务状态:

bash 复制代码
vim /usr/local/bin/mysql_monitor.sh

脚本内容:

bash 复制代码
#!/bin/bash
# MySQL服务监控脚本

SERVICE="mysqld"
LOG_FILE="/var/log/mysql_status.log"

if systemctl is-active --quiet $SERVICE; then
    echo "[$(date)] MySQL服务运行正常" >> $LOG_FILE
else
    echo "[$(date)] MySQL服务异常,尝试重启..." >> $LOG_FILE
    systemctl restart $SERVICE
    # 发送警报(可根据需要扩展)
fi

四、项目结果与验证

结果说明

本项目成功完成了所有预定目标,具体结果如下:

  1. 系统环境准备完成:CentOS 7.9系统已更新至最新状态,安装了所有必要的工具软件,完成了基本的安全配置。

  2. MySQL数据库成功安装 :MySQL 5.7.42版本已通过官方仓库成功安装,服务正常启动并运行。通过systemctl status mysqld验证服务状态为"active (running)"。

  3. 安全配置已完成 :运行了mysql_secure_installation脚本,设置了强密码策略,删除了匿名用户和测试数据库,关闭了root远程登录,显著提升了数据库安全性。

  4. 数据库初始化成功:创建了school_db数据库,建立了school_admin管理用户并授予了适当权限。数据库字符集配置为utf8mb4,支持完整的Unicode字符。

  5. 数据导入与验证通过:成功导入了包含两个表的测试数据,共5条学生记录和12条成绩记录。所有查询测试均返回预期结果,数据完整性和一致性得到验证。

  6. 备份恢复机制有效:实现了完整的数据库备份与恢复流程,测试证明在数据丢失情况下能够有效恢复。

  7. 自动化运维配置完成:编写了备份脚本和监控脚本,配置了计划任务,实现了基本的自动化运维。

验证方式

通过以下关键命令验证项目成果:

验证1:MySQL服务状态

bash 复制代码
systemctl status mysqld

输出应包含:"Active: active (running)"和"Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled)"。

验证2:MySQL版本确认

bash 复制代码
mysql --version

输出示例:"mysql Ver 14.14 Distrib 5.7.42, for Linux (x86_64)"。

验证3:数据库连接测试

bash 复制代码
mysql -u school_admin -p -e "SELECT '数据库连接成功' as Status;"

输入密码后应显示:"数据库连接成功"。

验证4:数据完整性验证

bash 复制代码
mysql -u school_admin -p -e "USE school_db; SELECT COUNT(*) as 学生数量 FROM students; SELECT COUNT(*) as 成绩记录数 FROM scores;"

预期输出:学生数量=5,成绩记录数=12。

验证5:复杂查询验证

bash 复制代码
mysql -u school_admin -p -e "USE school_db; SELECT class as 班级, COUNT(*) as 学生数 FROM students GROUP BY class ORDER BY 学生数 DESC;"

预期输出:列出各班学生数量统计。

验证6:备份文件验证

bash 复制代码
ls -lh /tmp/school_db_backup_*.sql.gz

应能看到最近创建的备份文件,大小合理(通常几十到几百KB)。

验证7:端口监听验证

bash 复制代码
netstat -tlnp | grep 3306

输出应显示MySQL正在监听3306端口。

验证8:进程状态验证

bash 复制代码
ps aux | grep mysqld | grep -v grep

应显示MySQL守护进程正在运行。

项目价值

本项目具有以下实际应用价值:

  1. 教学培训价值:为Linux系统管理和数据库管理初学者提供了完整的学习路径和实操指导。

  2. 企业应用基础:企业环境中部署MySQL数据库的标准流程,可直接应用于生产环境。

  3. 运维自动化基础:展示了自动化备份和监控的基本实现方法,可扩展为更复杂的运维体系。

  4. 安全实践示范:体现了数据库安全配置的最佳实践,包括强密码策略、最小权限原则等。

  5. 故障恢复准备:完整的备份恢复流程为企业数据安全提供了基础保障。

  6. 性能优化起点:通过合理的表结构设计和索引策略,为后续性能优化奠定了基础。

五、总结与体会

项目总结

本项目通过系统的实操步骤,完整实现了在CentOS 7环境下MySQL数据库的部署、配置、数据导入和运维管理。项目涵盖从系统准备到应用部署的全过程,重点强化了以下核心工作:

  1. 系统环境标准化配置:建立了规范的Linux系统初始化流程,包括系统更新、工具安装和安全配置,为后续软件部署提供了稳定基础。

  2. 软件安装最佳实践:通过官方仓库安装MySQL,确保了软件的完整性和兼容性,避免了源码编译的复杂性和潜在问题。

  3. 安全配置全面性:不仅完成了基础的数据库安全设置,还实施了用户权限最小化原则,显著提升了系统安全水平。

  4. 数据管理规范化:设计了合理的数据结构,实现了数据的完整导入和验证,建立了标准的数据操作流程。

  5. 运维自动化初步实现:通过脚本和计划任务,实现了基本的自动化备份和监控,提高了运维效率。

项目不足与改进方向:

  1. 安全配置深度不足:生产环境中需要更细致的安全配置,如SSL加密连接、审计日志、入侵检测等。

  2. 性能优化未涉及:未对MySQL进行深度性能优化,如缓存配置、索引优化、查询优化等。

  3. 高可用性未考虑:单节点部署存在单点故障风险,未实现主从复制或集群部署。

  4. 监控告警不完善:仅实现了基础的服务状态监控,缺少性能指标监控和自动告警机制。

  5. 备份策略较简单:备份策略较为基础,未实现增量备份、异地备份等高级特性。

后续学习计划

基于本次项目的经验和不足,计划后续深入学习以下内容:

  1. MySQL性能优化:学习查询优化、索引策略、配置参数调优等,提升数据库性能。

  2. 高可用架构:研究MySQL主从复制、集群部署、读写分离等高可用方案。

  3. 安全加固:深入学习数据库安全最佳实践,包括加密、访问控制、审计等。

  4. 自动化运维体系:学习Ansible、Chef等自动化运维工具,构建完整的自动化运维体系。

  5. 监控告警系统:研究Prometheus、Grafana等监控方案,实现全面的数据库监控。

  6. 容器化部署:学习Docker和Kubernetes,实现MySQL的容器化部署和管理。

通过本次项目实践,不仅掌握了Linux下MySQL部署的核心技能,更重要的是建立了系统化的问题解决思路和规范的运维流程意识,为今后的技术学习和职业发展奠定了坚实基础。

附录

核心命令清单

系统配置相关命令:

  • yum update -y - 更新系统所有软件包
  • yum install -y wget vim - 安装常用工具
  • systemctl stop firewalld - 停止防火墙服务
  • setenforce 0 - 临时关闭SELinux

MySQL安装命令:

  • wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm - 下载MySQL仓库
  • rpm -ivh mysql57-community-release-el7-11.noarch.rpm - 安装MySQL仓库
  • yum install -y mysql-community-server - 安装MySQL服务器
  • systemctl start mysqld - 启动MySQL服务
  • grep 'temporary password' /var/log/mysqld.log - 查看初始密码

MySQL配置命令:

  • mysql_secure_installation - 安全配置向导
  • mysql -u root -p - 以root身份登录MySQL
  • CREATE DATABASE school_db; - 创建数据库
  • CREATE USER 'school_admin'@'localhost' IDENTIFIED BY '密码'; - 创建用户
  • GRANT ALL PRIVILEGES ON school_db.* TO 'school_admin'@'localhost'; - 授予权限

数据操作命令:

  • mysql -u school_admin -p school_db < students.sql - 导入SQL文件
  • mysqldump -u school_admin -p school_db > backup.sql - 备份数据库
  • mysqlcheck -u school_admin -p school_db --auto-repair - 检查并修复表

验证命令:

  • systemctl status mysqld - 查看MySQL服务状态
  • mysql --version - 查看MySQL版本
  • netstat -tlnp | grep 3306 - 查看3306端口监听状态
  • ps aux | grep mysqld - 查看MySQL进程
关键截图说明

1.MySQL安装成功截图 :显示 mysql --version 命令输出,确认MySQL 5.7成功安装。

安装成功并查看版本:

2.服务状态截图 :显示 systemctl status mysqld 命令输出,确认服务正常运行。

3.成功登陆数据库截图:

4.数据导入验证截图 :显示数据查询结果,确认数据完整导入。

验证导入的数据:

5.备份文件截图 :显示备份文件列表,确认备份成功创建。

首先备份文件:

对备份结果进行验证:

相关推荐
坐吃山猪18 分钟前
【多线程】Semaphore使用
java·数据库·oracle·多线程
数智启示录25 分钟前
PostgreSQL 内存调优实战(第 12 篇):work_mem 只调大 64 倍,峰值为什么远不止 64 倍
运维·数据库·经验分享·postgresql·面试
平原201831 分钟前
GPT Image 2 / Nano Banana API成本拆解:$0.0081、84.7%与单张有效成本
linux·服务器·gpt
T1mzhou1 小时前
ARM64 Linux 6.10内核启动流程2-rootfs 怎么挂上
linux·服务器·前端
捷瑞电子工坊1 小时前
Ubuntu 终端指令速查手册(持续更新)
linux·ubuntu·教程·开发工具·命令行·速查手册·终端指令
雯宝1 小时前
6. USB 转串口驱动
linux
rest10241 小时前
对jemalloc的理解
linux
姜太小白1 小时前
【Oracle】记排查sh脚本调用SQL执行卡顿的排查总结
数据库·sql·oracle
bgy66662 小时前
MariaDB 数据库 基础详解
数据库·mariadb
自动化监测Learner2 小时前
QGIS 把geojson数据导入 PostgreSQL/PostGIS 的完整流程
数据库·postgresql