CentOS7下MySQL8.0的安装到基本操作

一、CentOS 7 安装 MySQL 8.0 全流程

1. 环境准备与依赖检查

CentOS 7 默认软件源中 MySQL 版本较低,需先配置官方 Yum 仓库:

复制代码
# 安装必要依赖
sudo yum install -y wget vim net-tools

# 下载并安装 MySQL 官方 Yum 仓库配置
sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

# 安装仓库配置包
sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm

# 刷新 Yum 缓存
sudo yum makecache

2. 安装 MySQL 8.0 服务器

bash

复制代码
# 安装 MySQL 服务器(默认安装最新稳定版)
sudo yum install -y mysql-community-server

# 启动 MySQL 服务
sudo systemctl start mysqld

# 查看服务状态
sudo systemctl status mysqld

# 设置开机自启动
sudo systemctl enable mysqld

3. 初始化配置与安全设置

MySQL 8.0 首次启动会生成临时密码,需通过以下步骤获取并修改:

bash

复制代码
# 查看初始化密码(注意复制时不要包含空格)
sudo grep 'temporary password' /var/log/mysqld.log

# 登录 MySQL(使用生成的临时密码)
mysql -u root -p

# 修改 root 密码(需符合复杂度要求,至少8位含大小写、数字、符号)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPassword!';

# 刷新权限
FLUSH PRIVILEGES;

# 退出 MySQL
EXIT;

4. 配置防火墙与远程访问

bash

复制代码
# 开放 MySQL 端口(3306)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

# 允许远程登录(生产环境建议仅开放特定IP)
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourStrongPassword!' REQUIRE SSL;
FLUSH PRIVILEGES;
EXIT;

二、CentOS 下 MySQL 核心操作指南

1. 数据库与表的基本操作(DDL)

(1)数据库管理

sql

复制代码
-- 查看所有数据库
SHOW DATABASES;

-- 创建数据库(指定UTF-8编码)
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 切换数据库
USE mydb;

-- 删除数据库
DROP DATABASE IF EXISTS mydb;
(2)表结构管理

sql

复制代码
-- 创建用户表
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(100) NOT NULL,
    email VARCHAR(100) DEFAULT '',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    status TINYINT DEFAULT 1 COMMENT '1:启用 0:禁用'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 查看表结构
DESC users;

-- 修改表结构(添加字段)
ALTER TABLE users ADD COLUMN last_login DATETIME AFTER password;

-- 修改表结构(删除字段)
ALTER TABLE users DROP COLUMN last_login;

-- 重命名表
RENAME TABLE users TO user_accounts;

2. 数据操作语言(DML)实战

(1)数据插入

sql

复制代码
-- 插入单条记录(指定字段)
INSERT INTO user_accounts (username, password, email) 
VALUES ('admin', 'admin123', 'admin@example.com');

-- 插入单条记录(全字段)
INSERT INTO user_accounts VALUES (NULL, 'user001', 'user123', 'user@example.com', NOW(), 1);

-- 批量插入
INSERT INTO user_accounts (username, password, email) VALUES
('user002', 'user123', 'user2@example.com'),
('user003', 'user123', 'user3@example.com');
(2)数据更新与删除

sql

复制代码
-- 更新单条记录
UPDATE user_accounts SET password = 'newpassword' WHERE username = 'admin';

-- 批量更新(将所有用户状态设为禁用)
UPDATE user_accounts SET status = 0;

-- 删除单条记录
DELETE FROM user_accounts WHERE username = 'user003';

-- 清空表(不可恢复,比DELETE更快)
TRUNCATE TABLE user_accounts;

三、MySQL 约束与索引优化

1. 数据完整性约束

sql

复制代码
-- 创建带约束的表
CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,        -- 主键约束
    name VARCHAR(100) NOT NULL,              -- 非空约束
    price DECIMAL(10,2) NOT NULL DEFAULT 0,   -- 默认约束
    stock INT UNSIGNED ZEROFILL,             -- 零填充约束
    barcode VARCHAR(30) UNIQUE,              -- 唯一约束
    category_id INT,
    -- 外键约束(关联分类表)
    FOREIGN KEY (category_id) REFERENCES categories(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 添加外键约束(修改表)
ALTER TABLE products ADD FOREIGN KEY (category_id) REFERENCES categories(id);

-- 删除约束
ALTER TABLE products DROP PRIMARY KEY;
ALTER TABLE products DROP FOREIGN KEY products_ibfk_1;

2. 索引设计与优化

sql

复制代码
-- 创建普通索引
CREATE INDEX idx_product_name ON products(name);

-- 创建组合索引(最左前缀原则)
CREATE INDEX idx_product_price_category ON products(price, category_id);

-- 查看表索引
SHOW INDEX FROM products;

-- 删除索引
DROP INDEX idx_product_name ON products;

-- 查看查询执行计划(优化关键)
EXPLAIN SELECT * FROM products WHERE name LIKE '手机%' AND price > 2000;

四、高级查询与性能优化

1. 复杂查询实战

sql

复制代码
-- 分页查询(第2页,每页10条)
SELECT * FROM user_accounts ORDER BY id LIMIT 10, 10;

-- 聚合查询(统计各状态用户数)
SELECT status, COUNT(*) AS user_count FROM user_accounts GROUP BY status;

-- 分组后筛选(只显示用户数>5的状态)
SELECT status, COUNT(*) AS user_count 
FROM user_accounts 
GROUP BY status 
HAVING user_count > 5;

-- 多表JOIN查询(用户与订单关联)
SELECT u.username, o.order_id, o.order_amount
FROM user_accounts u
JOIN orders o ON u.id = o.user_id
WHERE o.order_amount > 1000;

2. 性能优化基础

sql

复制代码
-- 查看慢查询日志(需先配置my.cnf)
SHOW VARIABLES LIKE 'slow_query_log';

-- 设置慢查询阈值(超过1秒的查询记录)
SET GLOBAL long_query_time = 1;

-- 分析SQL执行时间
SELECT SQL_NO_CACHE *, FORMAT((TO_DAYS(NOW())-TO_DAYS(create_time)),0) AS days_old 
FROM user_accounts 
WHERE status = 1 ORDER BY id DESC LIMIT 10;

-- 优化表结构(碎片整理)
OPTIMIZE TABLE user_accounts;

五、CentOS 下 MySQL 管理技巧

1. 配置文件优化

CentOS 7 下 MySQL 配置文件路径:/etc/my.cnf,常见优化配置:

ini

复制代码
[mysqld]
# 基础配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 性能优化(根据服务器内存调整)
innodb_buffer_pool_size = 8G       # 建议设为物理内存的50%-70%
innodb_log_file_size = 256M
max_connections = 1000
table_open_cache = 2048

# 日志与安全
slow_query_log = ON
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1
log_bin = /var/log/mysql-bin
server_id = 1

2. 备份与恢复

bash

复制代码
# 全库备份(推荐使用mysqldump)
sudo mysqldump -u root -p --all-databases > all_dbs_backup.sql

# 单库备份
sudo mysqldump -u root -p mydb > mydb_backup.sql

# 备份指定表
sudo mysqldump -u root -p mydb users orders > mydb_tables_backup.sql

# 恢复数据库(先创建空库)
mysql -u root -p mydb < mydb_backup.sql

# 定时备份脚本(crontab配置)
0 2 * * * /usr/bin/mysqldump -u root -p --all-databases > /backup/mysql/all_$(date +\%Y\%m\%d).sql

3. 监控与维护

bash

复制代码
# 查看MySQL状态
mysqladmin -u root -p status

# 查看进程
mysqladmin -u root -p processlist

# 查看数据库大小
mysql -u root -p -e "SELECT table_schema, SUM(data_length+index_length)/1024/1024 AS size_mb FROM information_schema.tables GROUP BY table_schema ORDER BY size_mb DESC;"

# 重启MySQL服务(谨慎操作)
sudo systemctl restart mysqld

六、CentOS 下 MySQL 图形化工具使用

虽然 CentOS 作为服务器系统通常使用命令行管理,但通过远程连接工具可提升管理效率:

  1. 在 Windows/Mac 端安装 Navicat
  2. 新建连接,填写:
    • 主机:CentOS 服务器 IP
    • 端口:3306
    • 用户名:root
    • 密码:设置的密码
  3. 测试连接并保存

2. MySQL Workbench(Linux 版)

bash

复制代码
# 下载Linux版Workbench(64位)
wget https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-8.0.28-1.el7.x86_64.rpm

# 安装
sudo yum install -y mysql-workbench-community-8.0.28-1.el7.x86_64.rpm

# 启动(图形界面环境)
mysql-workbench

七、总结与资源推荐

在 CentOS 7 环境中学习 MySQL,不仅能掌握数据库核心技能,更能理解 Linux 服务器环境下的系统级优化思路。MySQL 8.0 带来了 CTE、窗口函数、JSON 增强等新特性,结合 CentOS 的稳定性,足以支撑中小型企业的核心业务。

相关推荐
鸭鸭鸭进京赶烤3 小时前
大学专业科普 | 云计算、大数据
大数据·云计算
tan180°5 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
DuelCode6 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
幽络源小助理6 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
G皮T7 小时前
【Elasticsearch】自定义评分检索
大数据·elasticsearch·搜索引擎·查询·检索·自定义评分·_score
爬山算法7 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
搞笑的秀儿10 小时前
信息新技术
大数据·人工智能·物联网·云计算·区块链
SelectDB10 小时前
SelectDB 在 AWS Graviton ARM 架构下相比 x86 实现 36% 性价比提升
大数据·架构·aws
二二孚日11 小时前
自用华为ICT云赛道Big Data第五章知识点-Flume海量日志聚合
大数据·华为
二二孚日13 小时前
自用华为ICT云赛道Big Data第四章知识点-Flink流批一体分布式实时处理引擎
大数据·华为