首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Mysql 和MongoDB用户访问权限问题及mongodump、mongorestore

Mysql 和MongoDB用户访问权限问题及mongodump、mongorestore

作者头像
用户11690639
发布2026-06-17 21:57:35
发布2026-06-17 21:57:35
1040
举报

Mysql

刚给二线运维排查了一个问题,Mysql安装完可用,且可用navicat连接,项目中通过127.0.0.1去连数据库报错了。错误是access denied for user ‘root’@localhost,排查思路

1. 密码是否正确

(不需要重置。到Mysql的安装目录下找到my.ini,在Mysqld 后添加skip-grant-tables,这样可不用密码登陆。eg: mysql -uroot -p; )

代码语言:javascript
复制
1. 进入mysql安装目录,找到my.ini
2. 在[mysqld] 后面敲入:skip-grant-tables
3. 重启服务, net stop mysqld;net start msyqld
4.  通过命令进行密码修改:alter user root@'localhost' identified by 'testByZl*!1234';
5. 删除掉my.ini中添加的skip-grant-tables; 并完成mysql重启,参考3步即可

2.授权问题

数据库安装好,建完用户后,需要对用户进行权限授予,目的是让用户对数据库有一系列执行操作,包括但不限于DDL语句和SQL语句。授权通常用到下面语句

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.* TO 'usrname'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

今天遇到的问题是第二个问题导致的。未授权,解决该问题用到的语句为

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'  IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

接下来说一下%和localhost区别 【本地主机限制】grant all privileges on . to ‘usename’@‘localhost’ 和 【任意主机允许】grant all privileges on . to ‘usename’@‘%’ 它两区别在于 第一个连接为本地主机限制,用户仅被 授权从本地主机(即Mysql所在的服务器)访问数据 库。这种限制用于提高数据库的安全性。 第二个连接%是通配符,表示用户可以从八喜何IP地址访问数据库,允许远程客户端访问数据库。

Mongo 连接报 Authentication failed

在这里插入图片描述
在这里插入图片描述

Mongo创建好后,也是需要给用户授权的,不然只是单独create user后访问库也会报Authentication failed。注意,需要在admin下面创建用户及授权,如果在自己的数据库中创建用户授权即使授权的是admin库,也依然会报Authentication failed。用户大致整理如下所示:

Mongo 创建用户

代码语言:javascript
复制
use admin
db.createUser(
  {
    user: "calamity",
    pwd: "Gq40H1%44W%44nHy",
    roles: [ { role: "readWrite", db: "calamity" }]
  }
)

mongo 授权用户

需要组当前用户授予admin库的只读权限,这样才能通过admin库进行业务库的授权。因些需要执行以下语句

代码语言:javascript
复制
use admin
db.grantRolesToUser(
    "calamity",
    [
      { role: "read", db: "admin" }
    ]
)

Mongo库restore操作

需要测试数据,导了个tar包,打开看都是bson、json 文件,需要把相应的文件copy到mongo 安装路径下的db下面,可以通过mongorestore执行。我先是把tar包解压缩了,然后将其目录下文件转成.gz文件,然后执行了mongoresote命令。分别如下所示:

1.tar 解压缩

代码语言:javascript
复制
tar -xvf calamity.tar

2. 转在gz文件

之所以有这步,是因为这前存的restore命令是针对.gz文件的,懒于重新编辑命令,所以闭着眼睛执行了这步操作

代码语言:javascript
复制
 gzip -r calamity  # calamity是解tar后的文件夹 -r 是说将其下的所有文件打成gz

3. mongorestore执行

代码语言:javascript
复制
mongorestore --uri="mongodb://calamity:Gq40H1%44W%44nHy@ip1:27017,ip2:27017,ip3:27017/?replicaSet=rs0&authSource=calamity"  -d calamity  /home/data/db --gzip

4. mongorestore 还原 gz文件

代码语言:javascript
复制
mongorestore --gzip --archive=/data/mongo/bak/calamity.gz --nsInclude="*"

其它 mongorestoe 其它命令参考

代码语言:javascript
复制
//压缩备份
mongodump -u csms -p Sh%2523mkaJaaa11 --authenticationDatabase csms -d csms -o /home/backup --gzip
mongodump -u csms -p csms --authenticationDatabase csms -d csms -c  zl.position_history_202212 -o /home/backup --gzip

//恢复还原
mongorestore -u csms -p Sh%2523mkaJaaa11 --authenticationDatabase csms -d csms  /home/backup/csms --gzip
mongorestore --uri="mongodb://admin:Sh%2523mkaJaaa11 @192.168.1.1:27027192.168.1.12:27027,192.168.1.13:27027/?authSource=admin&replicaSet=dev_rs0" -d csms_lgyz  /home/backup/csms --gzip
mongorestore --uri="mongodb://admin:Sh%2523mkaJaaa11 @192.168.1.1:27027192.168.1.12:27027,192.168.1.13:27027/?authSource=admin&replicaSet=dev_rs0" -d csms_lgyz -c cmss.analog_minute_his_202307  /home/backup/csms/cmss.analog_minute_his_202307.bson.gz --gzip

//dump数据信息
mongodump -u admin -p Sh%252523mkaJ210599 --authenticationDatabase admin  -d zhangyiyitest-o /home/backup --gzip
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mysql
    • 1. 密码是否正确
    • 2.授权问题
    • Mongo 连接报 Authentication failed
    • Mongo 创建用户
    • mongo 授权用户
  • Mongo库restore操作
    • 1.tar 解压缩
    • 2. 转在gz文件
    • 3. mongorestore执行
    • 4. mongorestore 还原 gz文件
    • 其它 mongorestoe 其它命令参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档