拥有数据库全权限的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
相关产品推荐
相关产品推荐

