Maclean’s Oracle Database Tech Blog Archives

  • 快速部署有身份验证和授权的MongoDB Replica SET复制集

    在启用身份验证后, MongoDB将强制所有客户端在访问数据库前先做身份验证authentication。 Authorization, 授权允许管理员限制用户使用的资源和允许做的操作。 对于产品环境中使用mongodb replica set 复制集,必须启用Authentication 和Authorization。   所有的MongoDB部署均支持身份验证。 默认情况下MongoDB不检测是否授权用户。对于现有部署和新部署都可以启用身份验证和授权。 但是要启用它们必须有停机时间,无法对在线的mongodb做修改。 以下我们将部署一个三节点的replica set复制集,其中的三个节点: rep0.dbdao.com    默认的primary rep1.dbdao.com    Secondary rep2.dbdao.com   Secondary 注意以下所有操作均在ubuntu 上以root用户执行,如果你要以其他用户执行,请注意权限。 ubuntu启用-root账号 可以参考: https://www.askmac.cn/archives/ubuntu%E5%90%AF%E7%94%A8-root%E8%B4%A6%E5%8F%B7.html   1、首先创建必要的目录 三个节点均运行 su – root                                            …

  • MongoDB 用户角色授权与AUTH启用

    MongoDB中几种常用用户角色: dbAdmin 在db范围内包括下面的权限: collStats dbHash dbStats find killCursors listIndexes listCollections dropCollection 和 createCollection on system.profile only userAdmin在db范围内包括如下权限: changeCustomData changePassword createRole createUser dropRole dropUser grantRole revokeRole viewRole viewUser readAnyDatabase  对所有数据库中的collection可读,同时包含listDatabases权限 readWriteAnyDatabase  对所有数据库中的collection可读且可写,同时包含listDatabases权限 userAdminAnyDatabase 对所有数据库拥有userAdmin角色,同时包含listDatabases权限 dbAdminAnyDatabase 对所有数据库拥有dbAdmin角色,同时包含listDatabases权限 cluster相关的权限  clusterMonitor、hostManager、clusterManager、clusterAdmin root权限, 包含 readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase 和 clusterAdmin 等角色。 但不能访问system. 开头的collection(root does not include any access to collections that begin with…

  • 【MySQL学生手册】MySQL架构概览 – MySQL架构

    章节中会介绍MySQL所使用的客户/服务器模型。你会了解:   对MySQL C/S模式的描述 理解通信协议(Communication Protocols) 理解服务器如何支持存储引擎 关于MySQL如何使用内存和磁盘空间的基础知识   2.1 MySQL架构概览   MySQL架构实际上是一组为了完成数据库服务器任务而协同工作的相关功能组合。这些功能集包含超过50,0000行代码。下图中对其中的功能子系统进行了分层展示,层级之间通过相应API进行交互。多数情况下,每个子系统会对信息进行接收,处理然后再传送给下一个子系统以完成所分配的任务。子系统之间相对独立,这样就会有更大的自由度(如由于执行语句的存储引擎独立性,客户端不必知道哪个存储引擎执行其请求)。   2.1.1 核心共享子系统(Core Shared Subsystems) 在MySQL中的每个子系统都能自成一章。由于篇幅所限,这里仅对每个核心共享子系统进行简单描述,以给大家对其性能特点有一个概括性理解。   进程,线程和资源管理器(Process, Thread and Resource Management): MySQL使用了一个基于线程的服务器架构,允许各种执行线程(或称为轻量级进程)访问核心共享资源。MySQL这种的多线程单进程架构能保证多个执行线程之间不会相互冲突或覆盖重要数据。使用基于线程的服务器架构最值得注意的优点是: 节约成本 – 和进程相比,线程的建立和销毁成本更低。新的线程可使用其父进程的地址空间而不需要额外的地址空间。 切换代价低 – 由于线程运行于相同的服务器进程空间中, 因此线程之间的切换代价很小。 极小的开销 – 由于线程可对父进程地址空间进行访问,因此在共享资源下开销也变得极小。   缓存(Cache/Buffer)管理: 此子系统专注于缓冲并取回服务器进程中所有线程执行所用的大量数据类型。由于已经将返回的数据进行内存缓存,因此数据缓存使得MySQL可以降低大量对于基于磁盘I/O代价昂贵的操作。   网络管理(Networking Management): 此子系统的职责是通过处理在多平台间发送和接收带有MySQL连接请求和命令的网络数据包这样的工作,使得各种通信协议(TCP/IP, 命名管道Named Pipes等)对连接线程变得透明。它也包括了处理安全套接字层(Secured Socket Layers: SSL)这样的工作。   日志管理: 这个子系统是为了将各种日志事件子类被维护在一个日志类下而建立的。这样能使得开发者能在不破坏系统核心功能的情况下增加日志和日志事件。通过对日志系统中子系统的区分。各种系统活动(启动,多语句事务,自动增量auto-increment值改变等)就可以通过子类事件进行记录。   访问及授权管理: 此子系统定义了所有为执行命令所需的GRANT权限并主要用于保证客户端和服务器间的安全。它会验证用户在登陆过程中的访问权限及查询权限。此子系统也包含了一些对授权表的内存版本修改功能及密码生成功能。  …

  • 快速部署MongoDB Replica Set复制集

    本文介绍如何快速部署MongoDB  Replica Set复制集,注意本文中的配置是不涉及授权验证的。 MongoDB版本为3.0.2 , 该部署全部在同一台服务器上完成,实际产品环境 Replica Set 中master和slave显然应当在不同的服务器上, 仅仅需要对本文中涉及IP的地方有所修改即可 我们假定用户已经成功安装mongoDB 3.0.2   启动 replica set的primary节点上的mongodb sudo mkdir -p /m01/mongo1 sudo mkdir -p /m01/mongo2 sudo mkdir -p /m01/mongo3 mongod -dbpath /m01/mongo1 –replSet “rs_maclean” –port 35001 –storageEngine wiredTiger & mongod -dbpath /m01/mongo2 –replSet “rs_maclean” –port 35002 –storageEngine wiredTiger & mongod -dbpath /m01/mongo3 –replSet “rs_maclean” –port 35003 –storageEngine…

  • MongoDB BSONObj size is invalid错误一例

    某个MongoDB数据库出现如下错误”assertion 10334 BSONObj size: 1684627202 (0x64695F02) is invalid. Size must be between 0 and 16793600(16MB) First element: EOO ns:local.oplog.$main query:{ query: {}, orderby: { $natural: -1 } }”一例:     2015-05-12T16:12:43.872+0800 I – ***** SERVER RESTARTED ***** 2015-05-12T16:12:43.883+0800 I – [initandlisten] MongoDB starting : pid=1697 port=27019 dbpath=arb/mongodb master=1 64-bit host=ubuntu 2015-05-12T16:12:43.883+0800 I – [initandlisten] 2015-05-12T16:12:43.884+0800…

  • MongoDB Aggregation聚集测试

    db.alpha.insert({_id:1, region:”NW1″, leads:1 , email: “[email protected]”}); db.alpha.insert({_id:2, region:”NW1″, leads:1 , email: “[email protected]”}); db.alpha.insert({_id:3, region:”NW1″, leads:2 , email: “[email protected]”}); db.alpha.insert({_id:4, region:”SE1″, leads:8 , email: “[email protected]”}); db.alpha.insert({_id:5, region:”SE2″, leads:4 , email: “[email protected]”}); db.alpha.insert({_id:6, region:”SE2″, leads:2 , email: “[email protected]”}); db.alpha.insert({_id:7, region:”SE2″, leads:4 , email: “[email protected]”}); db.alpha.insert({_id:8, region:”SW1″, leads:1 , email: “[email protected]”}); db.alpha.insert({_id:9, region:”SW1″, leads:2 , email: “[email protected]”}); db.alpha.insert({_id:10,…

  • MongoDB索引与排序

    对于下面的例子而言,mongoDB会如何处理这个查询?   ongos> db.users.insert({user: { login:”maclean”, desc:”maclean liu” , date : new Date(“2015-01-01”) }}); mongos> mongos> db.users.findOne(); { “_id” : ObjectId(“555179f2315a40007db97d3c”), “user” : { “login” : “maclean”, “desc” : “maclean liu”, “date” : ISODate(“2015-01-01T00:00:00Z”) } } mongos> db.users.ensureIndex( { “user.login” :1 , “user.date” :-1} , “myIndex” ); { “raw” : { “shard0.dbdao.com:35001” : { “createdCollectionAutomatically”…

  • MongoDB sharding collection 与 unique index

      MongoDB中对于已经分片的collection ,仅有索引对应的field是shard key is a prefix的情况才可以建unique index唯一索引,否则不能建为唯一索引。 例如: mongos> sh.status(); — Sharding Status — sharding version: { “_id” : 1, “minCompatibleVersion” : 5, “currentVersion” : 6, “clusterId” : ObjectId(“554b241f4df23a46a60f6a9c”) } shards: { “_id” : “shard0000”, “host” : “shard0.dbdao.com:35001” } { “_id” : “shard0001”, “host” : “shard1.dbdao.com:35001” } { “_id” : “shard0002”, “host” : “shard2.dbdao.com:35001″…

  • E11000 duplicate key & mongorestore

    mongorestore 可以将mongodump工具导出的数据导入到其他mongodb数据库中。 由于mongoDB中有_id字段总是作为主键存在,所以对于一般不会覆盖完全相同(包括_id)也相同的数据,因为如果导入的数据有重复的_id,那么会触发E11000 duplicate key错误。   例如     ac:~ maclean$ mongo MongoDB shell version: 3.0.2 connecting to: test > db.abc db.abc > db.duptest.insert({_id:10,x:10}); WriteResult({ “nInserted” : 1 }) > > ac:~ maclean$ mongodump -h localhost -p 27017 -d test -c duptest –out duptest 2015-05-11T22:22:36.743+0800 writing test.duptest to duptest/test/duptest.bson 2015-05-11T22:22:36.744+0800 writing test.duptest metadata to duptest/test/duptest.metadata.json…

  • 面向未来的数据库,你准备好了么?

    Oracles数据库正在面向云端。你准备好了么? 现在请关于相关认证路径以获取最新认证。 通过Oracle数据库管理员Associate认证(OCA)以建立确立你的知识基础,而通过成为Oracle专家认证(OCP)则能证明你具有更多相关高级技能。  通过使用Oracle数据库12c多租户架构和云计算,管理变得比以往更加自动化和简单化。不要让自己变得落伍了,始终保持你的技能最新化。现在有两条升级路线可选;Oracle数据库11g或12c管理员专家认证。每个路线的需求被列示如下。快来让OCP logo展现在你职业道路的下一站中吧: 升级至11g DBA OCP 从Oracle 数据库9i或10g管理员Associate认证(9i 或 10g DBA OCA)升级: 完成“View Upgrade Path – Oracle Database 11g Administrator OCP – upgrade from Oracle9i or Oracle Database 10g DBA OCA”中第二步列出的课程中的一门 通过认证考试”Upgrade Oracle9i/10g OCA or OCP to Oracle Database 11g OCP” (1Z0-034). 升级至12c DBA OCP 从Oracle9i Database, Oracle Database 10g或11g管理员Associate认证 (9i, 10g或11g DBA OCA)升级至Oracle…