安装mysql数据库GPG检查失败-mysql配置和管理
GPG 检查失败的问题,原因是 RPM 软件包的签名无法验证。如果提示成功,则再次尝试安装软件包。输出中应该包含类似5072E1F5的 GPG 密钥。如果不存在,则说明导入失败。再次尝试导入 GPG 公钥。不过,这种方法建议仅用于内部测试或非生产环境。在 AlmaLinux 上配置和管理 MySQL 数据库,可以通过以下步骤完成。本文以 MySQL 社区版为例,同时适用于 MariaDB。
GPG 检查失败的问题,原因是 RPM 软件包的签名无法验证。可能是由于以下原因之一:
- GPG 密钥未正确导入。
- 下载的软件包签名不匹配。
以下是解决问题的步骤:
1. 手动导入 MySQL GPG 公钥
确保系统已导入正确的 GPG 公钥:
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
如果提示成功,则再次尝试安装软件包。
2. 验证 GPG 密钥
检查导入的 GPG 密钥是否正确:
sudo rpm -qa gpg-pubkey*
输出中应该包含类似 5072E1F5
的 GPG 密钥。如果不存在,则说明导入失败。再次尝试导入 GPG 公钥。
3. 清理缓存
清理 DNF 缓存,以确保没有缓存损坏的问题:
sudo dnf clean all
4. 再次尝试安装
重新运行安装命令:
sudo dnf install mysql-community-server
5. 禁用 GPG 检查(临时解决方法)
如果仍然遇到问题,并且您确信软件源和包是可信的,可以临时禁用 GPG 检查:
sudo dnf install --nogpgcheck mysql-community-server
不过,这种方法建议仅用于内部测试或非生产环境。
6. 验证安装
安装成功后,验证 MySQL 是否安装:
mysql --version
在 AlmaLinux 上配置和管理 MySQL 数据库,可以通过以下步骤完成。本文以 MySQL 社区版为例,同时适用于 MariaDB。
1. 安装 MySQL
步骤 1: 更新系统
sudo dnf update -y
步骤 2: 添加 MySQL Yum 仓库
从 MySQL 官方下载页面 获取最新的仓库 RPM 包地址。例如:
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
sudo rpm -Uvh mysql80-community-release-el8-1.noarch.rpm
步骤 3: 安装 MySQL
sudo dnf install mysql-server -y
步骤 4: 启动和设置 MySQL 服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
2. 初始配置
步骤 1: 获取临时密码
安装后 MySQL 会生成一个临时密码,存储在日志中:
sudo grep 'temporary password' /var/log/mysqld.log
步骤 2: 运行安全安装向导
sudo mysql_secure_installation
配置选项:
- 输入临时密码。
- 设置新密码。
- 删除匿名用户、禁用远程 root 登录、删除测试数据库、重新加载权限表(推荐选择
Y
)。
步骤 3: 登录 MySQL
mysql -u root -p
3. 基本配置
1. 创建用户和分配权限
创建新用户并赋予权限:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2. 创建数据库
CREATE DATABASE db_name;
USE db_name;
3. 优化配置文件
编辑 MySQL 配置文件 /etc/my.cnf
:
sudo nano /etc/my.cnf
建议调整以下参数:
[mysqld]
bind-address = 0.0.0.0 # 允许远程连接(如需要)
max_connections = 200 # 最大连接数
innodb_buffer_pool_size = 1G # 缓存大小(根据内存设置)
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2 # 记录执行时间超过 2 秒的查询
重启服务以应用更改:
sudo systemctl restart mysqld
4. 管理 MySQL
1. 启动/停止/重启服务
sudo systemctl start mysqld
sudo systemctl stop mysqld
sudo systemctl restart mysqld
2. 查看服务状态
sudo systemctl status mysqld
3. 检查 MySQL 运行状况
登录 MySQL 后运行:
SHOW STATUS LIKE 'Threads_connected'; # 查看当前连接数
SHOW VARIABLES LIKE 'max_connections'; # 查看最大连接数
SHOW DATABASES; # 查看所有数据库
5. 数据库备份与恢复
1. 备份数据库
使用 mysqldump
工具:
mysqldump -u username -p db_name > backup.sql
2. 恢复数据库
mysql -u username -p db_name < backup.sql
6. 监控与日志
1. 查看错误日志
MySQL 默认的错误日志路径:
sudo tail -f /var/log/mysqld.log
2. 慢查询日志
启用慢查询日志后,检查日志:
sudo tail -f /var/log/mysql-slow.log
7. 安全加固
1. 限制远程访问
修改 /etc/my.cnf
,将 bind-address
配置为 127.0.0.1
:
bind-address = 127.0.0.1
2. 使用防火墙
仅开放 MySQL 必要端口(默认 3306):
sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload
3. 启用 SSL
配置 SSL 证书后,在 MySQL 中启用加密连接:
SHOW VARIABLES LIKE 'have_ssl';
8. 高级功能
- 复制与高可用性:配置主从复制或 MySQL Group Replication。
- 性能调优:使用工具如
MySQLTuner
自动分析和优化配置。 - 定期自动备份:结合
cron
和mysqldump
实现。
你的命令 GRANT SELECT, INSERT, UPDATE, DELETE ON IT.* TO 'admin'@'localhost';
只授予了基本的 DML(数据操作语言)权限,而 mysqldump
工具需要额外的权限来正确完成备份操作。
mysqldump 所需的权限
在使用 mysqldump
备份时,通常需要以下权限:
- SELECT
用于读取数据库数据。 - LOCK TABLES
用于在导出数据时锁定表,确保一致性。 - SHOW VIEW
如果数据库中有视图,则需要该权限来导出视图定义。 - EVENT
如果数据库中有事件调度器(Event Scheduler),需要该权限。 - TRIGGER
如果数据库中有触发器,则需要该权限。 - PROCESS
mysqldump
默认会尝试导出表空间信息(特别是在 MySQL 8.0+ 中),需要PROCESS
权限。
解决方法
1. 更新权限
执行以下命令为 admin
用户添加必要的权限:
GRANT SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, PROCESS ON IT.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;
2. 跳过表空间导出(可选)
如果不需要导出表空间信息,可以使用 --no-tablespaces
参数来避免 PROCESS
权限问题:
mysqldump --no-tablespaces -u admin -p IT > backup.sql
重新测试
完成权限配置或添加 --no-tablespaces
参数后,重新运行你的 mysqldump
命令。如果还有其他错误,请提供完整的错误信息进一步分析。
注意
- 权限范围: 上述
GRANT
命令仅对数据库IT
生效。如果需要全局权限,请将IT.*
改为*.*
。 - MySQL 版本: 如果你使用的是 MySQL 8.0+,权限验证和策略可能更加严格,确保客户端工具和服务器版本匹配。
错误信息 ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
表明,某些权限(例如 PROCESS
)是全局权限,不能直接对单个数据库(如 IT.*
)授予。这是因为 PROCESS
和类似的权限属于 MySQL 的全局作用域,而不是数据库作用域。
此外,mysqldump
报错的根本原因是 admin
用户缺少 PROCESS
权限。
正确解决方法
-
修复权限授予命令
对于PROCESS
这类全局权限,需要在全局范围授予,而其他权限可以继续在数据库范围授予。可以分两步完成:全局权限(例如
PROCESS
)GRANT PROCESS, LOCK TABLES, SHOW VIEW ON *.* TO 'admin'@'localhost';
数据库范围权限
GRANT SELECT, INSERT, UPDATE, DELETE, EVENT, TRIGGER ON IT.* TO 'admin'@'localhost';
然后刷新权限:
FLUSH PRIVILEGES;
-
使用
--no-tablespaces
参数跳过表空间信息
如果表空间信息并不重要(一般对大多数常规数据库备份来说不必要),可以通过以下命令跳过表空间部分:mysqldump --no-tablespaces -u admin -p IT > backup.sql
验证解决方法
验证权限
执行以下命令检查是否正确授予了所需权限:
SHOW GRANTS FOR 'admin'@'localhost';
确保输出中包含以下关键权限:
PROCESS
LOCK TABLES
SHOW VIEW
- 数据库
IT
上的SELECT
等权限。
验证备份命令
在修复权限或添加 --no-tablespaces
参数后,重新运行以下命令:
mysqldump -u admin -p IT > backup.sql
注意事项
- 敏感权限分配:
- 全局权限如
PROCESS
应仅授予可信用户,避免安全风险。
- 全局权限如
- 备份的影响:
- 使用
--no-tablespaces
参数可能对恢复操作影响较小,但如果涉及表空间管理,建议在需要时补充完整权限进行备份。
- 使用
mysql操作命令
#查询用户的权限授权
show grants for 'admin'@'localhost';
#给用户全局授权
GRANT PROCESS, LOCK TABLES, SHOW VIEW ON *.* TO 'admin'@'localhost';
#数据库范围授权
GRANT SELECT, INSERT, UPDATE, DELETE, EVENT, TRIGGER ON IT.* TO 'admin'@'localhost';
#刷新授权
FLUSH PRIVILEGES;
#备份mysql
mysqldump -u admin -p IT > backup.sql
#恢复数据库
mysql -u username -p db_name < backup.sql

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)