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. Navicat 远程连接配置
- 在 Windows/Mac 端安装 Navicat
- 新建连接,填写:
- 主机:CentOS 服务器 IP
- 端口:3306
- 用户名:root
- 密码:设置的密码
- 测试连接并保存
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 的稳定性,足以支撑中小型企业的核心业务。