戏里戏外

Rocky Linux 上安装和配置 MySQL 5.7

2024-11-14#CentOS#MySQL

前提条件

  • 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;

故障排除

一下是一些常见问题解决的解决方案:

  1. 无法启动MySQL

    # 检查错误日志
    sudo tail -f /var/log/mysqld.log
    
    # 检查权限
    sudo chown -R mysql:mysql /var/lib/mysql
    
  2. 连接超时

  • 检查 max_connections 设置
  • 检查 wait_timeout
  • 查看系统资源使用情况
  1. 查询慢
  • 启用慢查询日志
  • 使用 EXPLAIN 分析查询
  • 检查索引使用情况