使用Shell脚本备份MySQL数据库时遭遇1045访问拒绝错误求助
解决MySQL备份脚本的1045访问拒绝问题
以下是针对性的解决步骤:
1. 统一用户名并补全localhost授权
错误提示显示的是user'@'localhost,但你的脚本变量DB_USER="myusername"、授权语句用的是myuser@'%',三者用户名不一致,且MySQL中@'%'和@'localhost'是两个独立身份,需统一并补全授权:
- 将脚本里的
DB_USER改为myuser,和授权用户名保持一致 - 执行以下SQL补全localhost权限:
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
2. 修复脚本变量引用问题
你的DB_NAME包含空格,直接传给mysqldump会被解析为多个参数,需用双引号包裹所有变量,避免解析错误:
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" | gzip > "$BACKUP_FILENAME"
3. 处理特殊密码(可选)
如果密码包含!、$、&等特殊字符,直接写在脚本里会被Shell解析,建议改用.my.cnf配置文件:
在/root/.my.cnf中添加:
[mysqldump] user=myuser password=你的数据库密码 host=localhost
然后给文件设置安全权限:
chmod 600 /root/.my.cnf
脚本里的mysqldump命令可简化为:
mysqldump "$DB_NAME" | gzip > "$BACKUP_FILENAME"
4. 手动测试验证
先执行手动命令确认连接正常:
mysqldump -h localhost -u myuser -p你的密码 "mydb name" > test.sql
能成功生成test.sql再放回脚本运行
内容的提问来源于stack exchange,提问作者boyenec
相关产品推荐
相关产品推荐

