执行 call proc1(),报错了:
ERROR 1436 (HY000): Thread stack overrun: 6656 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack.
错误原因是 thread_stack(如果是Window下的话在这个文件中my-small.ini)太小,默认的128K,建议调整到500K
mysql 服务器配置:
http://www.52z.com/info/html/24810.html
关于这个速查卡
MongoDB是一个文档型数据库,它可以方便的应用于大多数语言。这个小清单列出了MongoDB经常使用和容易忘记的一些操作,命令和技术。
配置选项
安装选项
启动MongoDB的选项可以通过命令行或者配置文件设置,两者的语法稍微有点不同,这里有一个三种选项的设置例子:
命令行配置文件--dbpath /path/to/dbdbpath=/path/to/db--authauth=true-vvvvvv=true在mongod下运行--help可以列出所有的操作选项,但是这里我们列出了一些最常用的:
操作选项描述--config /path/to/config指定其他配置选项的配置文件.--dbpath /path/to/data数据存储目录.--port 27017监听端口号.--logpath /path/to/file.log日志输出文件,这是个明确的文件路径,不是目录.--logappend重启后,以追加的方式创建日志防止把之前的日志删除了。在使用--logpath时总是开启.--fork把mongod配置为守护进程.--auth单个服务器的安全验证.--keyFile /path/to/key.txt副本集和分片时安全验证,需要使用一个路径共享密钥。--nohttpinterface关闭http访问接口--bind_ip address只允许指定的网络ip访问.如果想安全的启动mongod,就要使用nohttpinterface和bind_ip操作选项,确定外网不能直接访问。尤其确保你没有其余的选项启动,MongoDB需要以下网络环境可以访问:
- 单个服务器 - 客户端程序可以获取访问连接
- 副本集 - 任何成员集能够访问,包括自己;客户端能够访问任何一个成员集,并且可访问的成员集都能够成为主节点(活跃节点).
- 分片- mongos进程必须能够连接到配置的服务器和分片,分片必须能够彼此连接。客户端程序必须能够连接到mongos进程。配置服务器没必要彼此提供访问连接的支持。
所有的连接都是通过tcp建立的.
缪斯的情人
翻译于 2天前
6人顶
顶 翻译的不错哦!
其它翻译版本(2)查看配置
如果你6个月前启动mongod时做了一堆配置,那么现在你如何知道做了什么配置呢?这里提供了一个shell小助手:
> db.serverCmdLineOpts(){ "argv" : [ "./mongod", "--port", "30000" ], "parsed" : { },
"ok" : 1 }
解析后的字段是从配置文件读取的一些参数列表.
使用shell
Shell帮助
当你忘记一个命令时,mongodb提供了许多功能帮助你:
> // basic help> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
...
注意对于数据库,集合,副本集,分片,管理员等提供了单独了帮助功能。这里没有一一列出,像游标的帮助功能如下:
> // list common cursor functions> db.foo.find().help()
你可以使用这个功能和小助手作为一个内置的备忘清单。
缪斯的情人
翻译于 2天前
0人顶
顶 翻译的不错哦!
查看方法的定义
如果你不知道一个方法是干什么用的,你可以在shell中通过去除括号的方式运行它,查看它的源码:
> // run the function> db.serverCmdLineOpts()
{ "argv" : [ "./mongod" ], "parsed" : { }, "ok" : 1 }
> // see its source
> db.serverCmdLineOpts
function () {
return this._adminCommand("getCmdLineOpts");
}
这可以帮助我们获悉这个方法需要什么参数和抛出什么错误,以及如何在其他语言中使用。
缪斯的情人
翻译于 2天前
0人顶
顶 翻译的不错哦!
使用编辑功能
shell命令限制多行的支持,因此在里面编写程序很费劲,shell编辑小助手让它更加简单,打开一个文本编辑器,编辑一个变量,例如:
> x = function() { /* some function we're going to fill in */ }> edit x
在编辑器修改一个变量保存退出。这个变量就在shell里面被设定好了。
不管是编辑器的环境变量或者MongoDB shell的变量编辑环境,都必须设置使用edit模式。你可以在MongoDB shell中通过如下命令配置:
> EDITOR="/usr/bin/emacs"编辑模式在JavaScript脚本下是无法使用的,只能在交互的shell中使用。
缪斯的情人
翻译于 2天前
1人顶
顶 翻译的不错哦!
.mongorc.js
如果你的主目录下有个.mongorc.js文件,那么当你启动shell时他就会自动运行。使用它可以初始化任何你经常使用的helper方法和你不想意外操作的删除方法.
比如,你不想使用默认的dropDatabase()方法了,你可以在.mongorc.js文件中添加下面的命令:
DB.prototype.dropDatabase = function() {print("No dropping DBs!");
}
db.dropDatabase = DB.prototype.dropDatabase;
上面的例子改变了dropDatabase() helper方法,使他只打印出一行信息,而没有真正的删除数据库.
注意这个技巧不是一个安全手段,固执的用户仍然可以在不使用helper前提下删除数据库。然而,移除危险的admin权限命令也可以帮助阻止“大堤的奔溃”.
几个建议在.mongorc.js中使用helper命令时移除的:
- DB.prototype.shutdownServer
- DBCollection.prototype.drop
- DBCollection.prototype.ensureIndex
- DBCollection.prototype.reIndex
- DBCollection.prototype.dropIndexes
在使用这个功能之前必须确保event_scheduler已开启,可执行
SET GLOBAL event_scheduler = 1;
或我们可以在配置my.ini文件 中加上 event_scheduler = 1或
SET GLOBAL event_scheduler = ON;
来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:
mysqld ... --event_scheduler=1
要查看当前是否已开启事件调度器,可执行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler';
或
SELECT @@event_scheduler;
或
拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。
在使用事件这个功能,首先要保证你的mysql的版本是5.1以上,然后还要查看你的mysql服务器上的事件是否开启。
查看事件是否开启,使用如下命令查看:
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;
如果看到event_scheduler为on或者PROCESSLIST中显示有event_scheduler的信息说明就已经开启了事件。如果显示为off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就说明事件没有开启,我们需要开启它。
开启mysql的事件,通过如下三种方式开启:
Ø 通过动态参数修改
SET GLOBAL event_scheduler = ON;
更改完这个参数就立刻生效了
注意:还是要在my.cnf中添加event_scheduler=ON。因为如果没有添加的话,mysql重启事件又会回到原来的状态了。
Ø 更改配置文件然后重启
在my.cnf中的[mysqld]部分添加如下内容,然后重启mysql。
event_scheduler=ON
Ø 通过制定事件参数启动
mysqld ... --event_scheduler=ON