本文介绍在 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
| 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
| sudo yum install -y wget
sudo dnf install -y wget
|
安装 MySQL 5.7
方法一:使用 MySQL 官方 YUM 仓库(推荐)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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.*"
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
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
| 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.*"
sudo yum install -y mysql-community-server mysql-community-client
sudo yum install -y mysql-community-devel
|
启动和配置 MySQL 服务
启动 MySQL 服务
1 2 3 4 5 6 7 8
| sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld
|
获取临时 root 密码
MySQL 5.7 和 8.0 在首次启动时会生成临时 root 密码:
1 2 3 4 5
| 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
| sudo mysql_secure_installation
sudo mysql_secure_installation
|
配置向导会引导你完成:
- 设置 root 密码强度验证策略
- 设置 root 密码
- 删除匿名用户
- 禁止 root 远程登录(可选)
- 删除测试数据库
- 重新加载权限表
手动登录和修改密码
如果不想使用安全配置向导,可以手动操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword123!';
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 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_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
| sudo systemctl restart mysqld
sudo systemctl status mysqld
|
创建数据库和用户
登录 MySQL
创建数据库
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
| CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'SecurePassword123!';
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
| ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'NewPassword123!';
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
| sudo firewall-cmd --permanent --add-service=mysql sudo firewall-cmd --reload
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
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
| sudo systemctl start mysqld
sudo systemctl stop mysqld
sudo systemctl restart mysqld
sudo systemctl status mysqld
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
| 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
| sudo systemctl stop mysqld
sudo mysqld_safe --skip-grant-tables &
mysql -u root
USE mysql; UPDATE user SET authentication_string=PASSWORD('NewPassword123!') WHERE User='root'; FLUSH PRIVILEGES; EXIT;
sudo systemctl restart mysqld
|
3. 连接被拒绝
1 2 3 4 5 6 7 8 9 10 11
| 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';
SHOW ENGINE INNODB STATUS;
|
卸载 MySQL(如需要)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| sudo systemctl stop mysqld sudo systemctl disable mysqld
sudo yum remove -y mysql-community-server mysql-community-client mysql-community-common
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.7 | MySQL 8.0 |
|---|
| 默认认证插件 | mysql_native_password | caching_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。