You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拥有数据库全权限的MariaDB用户执行mysqldump时访问被拒

问题描述

我有一个MariaDB用户userX@localhost,该用户拥有DBY数据库的全部权限,权限信息如下:

SHOW GRANTS FOR 'userX'@'localhost';
GRANT ALL PRIVILEGES ON `DBY`.* TO `userX`@`localhost

出于备份需求,我想导出该数据库的所有表。执行以下命令并手动输入正确密码时,可成功生成backup.sql文件:

mysqldump -h localhost --single-transaction -u userX DBY -p > backup.sql

但我需要通过定时任务自动生成备份,因此将密码写入/home/user/.my.cnf文件(权限为600),文件格式如下:

[DBY]
host          = localhost
user          = userX
password      = pwd
auth_plugin   = caching_sha2_password

当执行以下命令时:

mysqldump --defaults-extra-file=/home/user/.my.cnf -h localhost --single-transaction -u userX DBY > backup.sql

出现错误:

mysqldump: Got error: 1045: "Access denied for user 'userX'@'localhost' (using password: YES)" when trying to connect

请问有人能找出问题所在吗?

问题排查与解决

核心原因:配置文件组名不匹配

你的.my.cnf使用[DBY]作为配置组,但mysqldump默认不会自动加载这个自定义组的配置,必须指定组名或者使用工具默认识别的组名。

修复方案

方案1:修改配置文件组名(推荐)

将.my.cnf的组名改为[client](所有MySQL/MariaDB客户端通用)或[mysqldump](仅备份工具专用),修改后的文件内容:

[client]
host          = localhost
user          = userX
password      = pwd
auth_plugin   = caching_sha2_password

修改后执行备份命令时,无需额外指定用户参数,简化命令:

mysqldump --defaults-extra-file=/home/user/.my.cnf --single-transaction DBY > backup.sql

方案2:保留原组名,添加参数指定加载

如果不想改动配置文件,执行mysqldump时加上--defaults-group-suffix=DBY参数,让工具读取该组的配置:

mysqldump --defaults-extra-file=/home/user/.my.cnf --defaults-group-suffix=DBY --single-transaction DBY > backup.sql

注意:此时命令里的-u userX可以省略,避免配置与命令参数冲突。

额外检查项

  • 确保.my.cnf的所有者为执行定时任务的用户,权限维持600,防止密码泄露。
  • 验证MariaDB版本对认证插件的支持:部分旧版MariaDB对caching_sha2_password兼容性不佳,可将用户认证插件改为mysql_native_password,执行以下SQL:
ALTER USER 'userX'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd';
FLUSH PRIVILEGES;

同步修改.my.cnf中的auth_plugin字段为mysql_native_password。

内容的提问来源于stack exchange,提问作者BCArg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:13:20