前提条件
- Rocky Linux 8 或更高版本
- root 权限或 sudo 权限
- 至少 2GB 可用内存
- 可用的互联网连接
WARNING
MySQL 5.7 是 MySQL 社区版的一个版本,它已经停止维护,不建议在生产环境中使用。
MySQL 8.0 拥有更好的性能和安全性,支持更多的特性,建议新项目使用 MySQL 8.0 或更高版本。
安装 MySQL
1. 添加 MySQL 源
# 下载 MySQL 源
wget https://dev.mysql.com/get/mysql57-community-release-el8-11.noarch.rpm
# 安装 MySQL 源
sudo rpm -ivh mysql57-community-release-el8-11.noarch.rpm
# 导入 MySQL GPG 密钥
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 确保启用源
sudo dnf config-manager --disable mysql80-community
sudo dnf config-manager --enable mysql57-community
# 更新 dnf 缓存
sudo dnf makecache
2. 安装 MySQL 服务器
sudo dnf install mysql-server -y # 安装 MySQL 服务器
sudo systemctl start mysqld # 启动 MySQL 服务
sudo systemctl enable mysqld # 设置开机自启
sudo systemctl status mysqld # 查看 MySQL 状态
3. 初始配置
sudo grep 'temporary password' /var/log/mysqld.log # 获取临时 root 密码
# 修改 root 密码
mysql -uroot -p # 输入上面获取的临时 root 密码
# 使用以下 SQL 语句修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'pId%Mm!2vs~qnM@LFf^Bm';
FLUSH PRIVILEGES;
sudo mysql_secure_installation # 运行安全配置向导
TIP
mysql_secure_installation
命令会提示设置新的 root 密码,可以选择跳过。
同时会删除匿名用户、禁止root远程登录、删除测试数据库、刷新权限等选项,根据需要输入对应选项即可。
基础配置
主配置文件位置:/etc/my.cnf
[mysqld]
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 基础设置
port=3306
user=mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 连接数设置
max_connections=1000
max_connect_errors=10000
# 缓冲区设置
key_buffer_size=256M
max_allowed_packet=16M
mysql -u root -p -- 登录MySQL
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建数据库
-- 创建用户并授权
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'CKHbYiEpZokM9yB7ojqPUikSLX4P!8Y';
GRANT ALL PRIVILEGES ON new_user_database.* TO 'new_user'@'localhost';
FLUSH PRIVILEGES;
性能优化
[mysqld]
# InnoDB缓冲池
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4
# 日志文件设置
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
# IO优化
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# 并发设置
innodb_thread_concurrency = 0
innodb_read_io_threads = 4
innodb_write_io_threads = 4
[mysqld]
# 查询缓存设置
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
[mysqld]
# 连接超时
wait_timeout = 600
interactive_timeout = 600
# 线程缓存
thread_cache_size = 16
安全配置
[mysqld]
; 禁用远程 root 登录
bind-address = 127.0.0.1
# 限制文件权限
local-infile = 0
-- 查看用户权限
SHOW GRANTS FOR 'user'@'host';
-- 收回权限
REVOKE ALL PRIVILEGES ON database.* FROM 'user'@'host';
-- 删除用户
DROP USER 'user'@'host';
备份和恢复
# 备份单个数据库
mysqldump -u root -p database_name > backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases.sql
# 压缩备份
mysqldump -u root -p database_name | gzip > backup.sql.gz
# 恢复数据库
mysql -u root -p database_name < backup.sql
# 恢复压缩备份
gunzip < backup.sql.gz | mysql -u root -p database_name
监控和维护
-- 查看系统状态
SHOW GLOBAL STATUS;
-- 查看进程列表
SHOW PROCESSLIST;
-- 查看表状态
SHOW TABLE STATUS;
-- 查看InnoDB状态
SHOW ENGINE INNODB STATUS;
-- 优化表
OPTIMIZE TABLE table_name;
-- 分析表
ANALYZE TABLE table_name;
-- 检查表
CHECK TABLE table_name;
故障排除
一下是一些常见问题解决的解决方案:
-
无法启动MySQL
# 检查错误日志 sudo tail -f /var/log/mysqld.log # 检查权限 sudo chown -R mysql:mysql /var/lib/mysql
-
连接超时
- 检查
max_connections
设置 - 检查
wait_timeout
值 - 查看系统资源使用情况
- 查询慢
- 启用慢查询日志
- 使用 EXPLAIN 分析查询
- 检查索引使用情况