CentOS MySQL 5.7/8.0 安装与配置指南

本文介绍在 CentOS 7/8 系统上安装和配置 MySQL 5.7 和 MySQL 8.0 的完整步骤,包括安装、初始化、安全配置和常用操作。

系统要求

  • CentOS 7 或更高版本
  • 至少 2GB RAM(推荐 4GB 或更多)
  • 足够的磁盘空间(至少 5GB)

注意:MySQL 5.7 已于 2023 年 10 月停止支持(EOL),建议新项目使用 MySQL 8.0。本文同时提供两种版本的安装方法。

安装前准备

检查是否已安装 MySQL

1
2
3
4
5
6
7
# 检查 MySQL 是否已安装
rpm -qa | grep mysql

# 如果已安装旧版本,先卸载
sudo yum remove -y mysql mysql-server mysql-libs mysql-common
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/my.cnf

安装必要的依赖

1
2
3
4
5
# CentOS 7
sudo yum install -y wget

# CentOS 8+ (使用 dnf)
sudo dnf install -y wget

安装 MySQL 5.7

方法一:使用 MySQL 官方 YUM 仓库(推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载 MySQL 5.7 仓库配置文件
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

# 安装仓库配置
sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm

# 验证仓库是否添加成功
yum repolist enabled | grep "mysql.*-community.*"

# 安装 MySQL Server 和 Client
sudo yum install -y mysql-community-server mysql-community-client

# 安装常用工具(可选)
sudo yum install -y mysql-community-devel mysql-community-common

方法二:使用国内镜像源(推荐国内用户)

如果官方源下载较慢,可以使用国内镜像:

1
2
3
4
5
6
7
8
9
10
11
# 使用清华大学镜像
sudo wget https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql57-community-el7/mysql57-community-release-el7-11.noarch.rpm

# 安装仓库配置
sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm

# 修改仓库配置使用清华镜像(可选)
sudo sed -i 's|^baseurl=.*|baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql57-community-el7/|g' /etc/yum.repos.d/mysql-community.repo

# 安装 MySQL
sudo yum install -y mysql-community-server mysql-community-client

安装 MySQL 8.0(推荐)

MySQL 8.0 是当前推荐版本,性能和安全特性更优:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载 MySQL 8.0 仓库配置文件
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm

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

# 验证仓库
yum repolist enabled | grep "mysql.*-community.*"

# 安装 MySQL 8.0 Server 和 Client
sudo yum install -y mysql-community-server mysql-community-client

# 如果需要安装 MySQL 8.0 的开发库
sudo yum install -y mysql-community-devel

启动和配置 MySQL 服务

启动 MySQL 服务

1
2
3
4
5
6
7
8
# 启动 MySQL 服务
sudo systemctl start mysqld

# 设置 MySQL 服务开机自启
sudo systemctl enable mysqld

# 查看 MySQL 服务状态
sudo systemctl status mysqld

获取临时 root 密码

MySQL 5.7 和 8.0 在首次启动时会生成临时 root 密码:

1
2
3
4
5
# MySQL 5.7 和 8.0 查看临时密码
sudo grep 'temporary password' /var/log/mysqld.log

# 或者使用以下命令
sudo grep 'A temporary password is generated' /var/log/mysqld.log | tail -1

输出示例:

1
2024-12-19T10:00:00.000000Z 1 [Note] A temporary password is generated for root@localhost: Abc123!@#

安全配置向导(推荐)

使用 MySQL 自带的安全配置脚本:

1
2
3
4
5
# MySQL 5.7
sudo mysql_secure_installation

# MySQL 8.0(如果使用)
sudo mysql_secure_installation

配置向导会引导你完成:

  1. 设置 root 密码强度验证策略
  2. 设置 root 密码
  3. 删除匿名用户
  4. 禁止 root 远程登录(可选)
  5. 删除测试数据库
  6. 重新加载权限表

手动登录和修改密码

如果不想使用安全配置向导,可以手动操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 使用临时密码登录
mysql -u root -p
# 输入临时密码

# 修改 root 密码(MySQL 5.7)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword123!';

# 修改 root 密码(MySQL 8.0)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourNewPassword123!';

# 刷新权限
FLUSH PRIVILEGES;

# 退出
EXIT;

基本配置

配置文件位置

MySQL 配置文件通常位于:

  • /etc/my.cnf(主配置文件)
  • /etc/mysql/my.cnf(某些系统)
  • ~/.my.cnf(用户配置文件)

常用配置示例

编辑配置文件:

1
sudo vi /etc/my.cnf

添加或修改以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[mysqld]
# 基本设置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 连接设置
max_connections=200
max_connect_errors=10
wait_timeout=28800
interactive_timeout=28800

# 日志设置
log-error=/var/log/mysqld.log
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=2

# InnoDB 设置
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=2

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4

应用配置

1
2
3
4
5
# 重启 MySQL 服务使配置生效
sudo systemctl restart mysqld

# 检查配置是否有错误
sudo systemctl status mysqld

创建数据库和用户

登录 MySQL

1
mysql -u root -p

创建数据库

1
2
3
4
5
6
7
8
-- 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 查看所有数据库
SHOW DATABASES;

-- 使用数据库
USE mydb;

创建用户并授权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 创建用户(MySQL 5.7)
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'SecurePassword123!';

-- 创建用户(MySQL 8.0)
CREATE USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'SecurePassword123!';

-- 授权(授予所有权限)
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

-- 授权(授予特定权限)
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'myuser'@'localhost';

-- 允许远程连接(谨慎使用)
CREATE USER 'myuser'@'%' IDENTIFIED BY 'SecurePassword123!';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

-- 查看用户权限
SHOW GRANTS FOR 'myuser'@'localhost';

修改用户密码

1
2
3
4
5
6
7
-- MySQL 5.7
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'NewPassword123!';

-- MySQL 8.0
ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword123!';

FLUSH PRIVILEGES;

防火墙配置

如果需要允许远程连接 MySQL,需要配置防火墙:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# CentOS 7 (firewalld)
sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload

# 或者开放特定端口
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

# CentOS 7 (iptables)
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo service iptables save

# 查看防火墙状态
sudo firewall-cmd --list-all

验证安装

检查 MySQL 版本

1
2
3
mysql --version
# 或
mysql -u root -p -e "SELECT VERSION();"

检查 MySQL 服务状态

1
sudo systemctl status mysqld

测试连接

1
2
3
4
5
# 本地连接测试
mysql -u root -p

# 使用新创建的用户测试
mysql -u myuser -p mydb

常用 MySQL 命令

服务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动 MySQL
sudo systemctl start mysqld

# 停止 MySQL
sudo systemctl stop mysqld

# 重启 MySQL
sudo systemctl restart mysqld

# 查看状态
sudo systemctl status mysqld

# 查看 MySQL 进程
ps aux | grep mysql

数据库操作

1
2
3
4
5
6
7
8
9
10
11
-- 查看所有数据库
SHOW DATABASES;

-- 查看当前数据库
SELECT DATABASE();

-- 查看数据库字符集
SHOW CREATE DATABASE mydb;

-- 删除数据库
DROP DATABASE mydb;

用户管理

1
2
3
4
5
6
7
8
9
10
11
-- 查看所有用户
SELECT user, host FROM mysql.user;

-- 查看当前用户
SELECT USER();

-- 删除用户
DROP USER 'myuser'@'localhost';

-- 撤销权限
REVOKE ALL PRIVILEGES ON mydb.* FROM 'myuser'@'localhost';

表操作

1
2
3
4
5
6
7
8
9
10
-- 查看所有表
SHOW TABLES;

-- 查看表结构
DESCRIBE table_name;
-- 或
SHOW CREATE TABLE table_name;

-- 查看表数据
SELECT * FROM table_name LIMIT 10;

备份和恢复

备份数据库

1
2
3
4
5
6
7
8
9
10
11
# 备份单个数据库
mysqldump -u root -p mydb > mydb_backup.sql

# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql

# 备份特定表
mysqldump -u root -p mydb table_name > table_backup.sql

# 压缩备份
mysqldump -u root -p mydb | gzip > mydb_backup.sql.gz

恢复数据库

1
2
3
4
5
6
7
8
# 恢复数据库
mysql -u root -p mydb < mydb_backup.sql

# 恢复压缩备份
gunzip < mydb_backup.sql.gz | mysql -u root -p mydb

# 恢复所有数据库
mysql -u root -p < all_databases_backup.sql

常见问题排查

1. MySQL 服务无法启动

1
2
3
4
5
6
7
8
9
# 查看 MySQL 错误日志
sudo tail -f /var/log/mysqld.log

# 检查配置文件语法
sudo mysqld --validate-config

# 检查数据目录权限
sudo ls -la /var/lib/mysql
sudo chown -R mysql:mysql /var/lib/mysql

2. 忘记 root 密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 停止 MySQL 服务
sudo systemctl stop mysqld

# 以安全模式启动 MySQL(跳过权限表)
sudo mysqld_safe --skip-grant-tables &

# 登录 MySQL(无需密码)
mysql -u root

# 重置密码
USE mysql;
UPDATE user SET authentication_string=PASSWORD('NewPassword123!') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;

# 重启 MySQL 服务
sudo systemctl restart mysqld

3. 连接被拒绝

1
2
3
4
5
6
7
8
9
10
11
# 检查 MySQL 是否运行
sudo systemctl status mysqld

# 检查端口是否监听
sudo netstat -tlnp | grep 3306

# 检查防火墙设置
sudo firewall-cmd --list-all

# 检查用户权限
mysql -u root -p -e "SELECT user, host FROM mysql.user;"

4. 字符集问题

1
2
3
4
5
6
7
8
9
-- 查看当前字符集
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';

-- 修改数据库字符集
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 修改表字符集
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

5. 性能优化

1
2
3
4
5
6
7
8
9
-- 查看慢查询日志
SHOW VARIABLES LIKE 'slow_query%';

-- 查看连接数
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';

-- 查看 InnoDB 状态
SHOW ENGINE INNODB STATUS;

卸载 MySQL(如需要)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 停止 MySQL 服务
sudo systemctl stop mysqld
sudo systemctl disable mysqld

# 卸载 MySQL 包
sudo yum remove -y mysql-community-server mysql-community-client mysql-community-common

# 删除 MySQL 数据目录(谨慎操作,会删除所有数据)
sudo rm -rf /var/lib/mysql

# 删除配置文件
sudo rm -rf /etc/my.cnf
sudo rm -rf /etc/my.cnf.rpmsave

# 删除日志文件
sudo rm -rf /var/log/mysqld.log

# 删除仓库配置
sudo rm -rf /etc/yum.repos.d/mysql-community*.repo

MySQL 5.7 vs MySQL 8.0

主要区别

特性MySQL 5.7MySQL 8.0
默认认证插件mysql_native_passwordcaching_sha2_password
JSON 支持基础支持增强支持
窗口函数不支持支持
性能良好更优
安全性良好增强
支持状态EOL(已停止支持)活跃支持

选择建议

  • 新项目:推荐使用 MySQL 8.0
  • 现有项目:如果已在运行 MySQL 5.7,可继续使用,但建议规划升级
  • 兼容性要求:某些旧应用可能需要 MySQL 5.7

参考资源


更新说明:本文已更新至 2024 年,包含 MySQL 5.7 和 8.0 的安装方法。MySQL 5.7 已于 2023 年 10 月停止支持,建议新项目使用 MySQL 8.0。

0%