### PHP操作MongoDB详解
#### 一、MongoDB服务启动及配置
MongoDB是一个高性能、易部署、易扩展的开源文档数据库系统。在使用PHP与MongoDB进行交互之前,首先需要确保MongoDB服务正常启动。
##### 启动选项
启动MongoDB服务器时,通常会用到`mongod`命令,并可通过添加不同参数来满足特定需求:
- `--dbpath`: 指定MongoDB的数据存储目录,默认为`/data/db/`。为了支持多实例运行,每个`mongod`进程都应有自己的数据目录。例如,要运行三个MongoDB实例,则需要三个独立的数据目录。启动时,`mongod`会在该目录下创建一个`mongod.lock`文件,以防止其他进程同时访问同一个目录。
- `--port`: 指定服务器监听的端口号,默认为27017。如果需要在同一台机器上运行多个实例,需要为每个实例分配不同的端口号。
- `--fork`: 使`mongod`进程作为守护进程(后台进程)运行,这对于生产环境中的部署是非常有用的。
- `--logpath`: 将日志输出重定向到指定文件而非控制台。若指定的日志文件不存在,将会自动创建;如果文件已存在,则会清空原有内容。若希望保留原有日志内容,可以使用`--logappend`参数设置日志追加模式。
- `--config`: 从指定的配置文件读取启动选项,避免每次启动时都要输入大量的命令行参数。例如:
```plaintext
# 示例配置文件
port=5586
fork=true # 作为守护进程运行
logpath=mongodb.log
```
##### 关闭MongoDB
- **发送信号**:最基础的方式是向MongoDB进程发送`SIGINT`或`SIGTERM`信号。如果服务是在前台运行的,可以通过按下`Ctrl+C`来发送信号;如果是后台进程,则可以通过`kill`命令发送信号。
- **使用`shutdownServer()`命令**:另一种方法是在`admin`数据库上下文中运行`shutdownServer()`命令,这将优雅地关闭MongoDB服务。
#### 二、用户管理和权限验证
MongoDB提供了丰富的用户管理功能,允许管理员创建具有不同权限级别的用户。
##### 添加用户
通过`admin`数据库上下文添加用户可以实现全局权限验证,即在`admin`数据库中添加的用户同样适用于其他数据库。
- **添加用户**:使用`db.addUser()`方法创建新用户,例如:
```javascript
use admin
db.addUser("ixigua", "hi.baidu")
```
- **权限验证**:使用`db.auth()`方法验证用户的登录凭证:
```javascript
db.auth("ixigua", "hi.baidu")
```
- **查看用户**:使用`db.system.users.find()`命令查看已存在的用户列表。
- **添加权限**:可以为特定数据库的用户设置不同的权限,例如只读权限或读写权限。从版本1.3.2开始支持只读权限用户:
```javascript
use virusDB
db.addUser("virus", "passwordForVirus") // 读写权限
db.addUser("guest", "passwordForReadonly", true) // 只读权限
```
##### 更改与删除用户
- **更改密码**:通过`db.addUser()`方法更改现有用户的密码:
```javascript
db.addUser("guest", "change_passwordForReadonly", true)
```
- **删除用户**:使用`db.system.users.remove()`方法删除用户:
```javascript
db.system.users.remove({user: "guest"})
```
#### 三、启用权限验证
为了启用权限验证,需要在启动MongoDB服务时添加`--auth`参数。例如:
- **以服务方式启动MongoDB**:
```bash
mongod --auth
```
#### 四、备份与恢复
MongoDB提供了多种备份方案,包括简单的文件复制以及专用的备份工具`mongodump`和`mongorestore`。
##### 文件复制
- **数据目录备份**:最简单的方法是关闭MongoDB服务后,复制整个数据目录作为备份。
- **在线备份**:如果不能关闭服务,可以考虑使用`mongodump`等工具。
##### 使用`mongodump`和`mongorestore`
- **导出数据**:使用`mongodump`工具可以将当前MongoDB实例中的所有数据导出到指定目录。
- **导入数据**:使用`mongorestore`工具可以将之前导出的数据恢复到MongoDB实例中。
通过以上步骤,我们可以有效地管理和操作MongoDB,无论是从服务启动、用户管理还是备份恢复等方面都能够得到很好的支持。