mongodb js shell不能使用退格键的问题

2012年2月13日 没有评论

在centos下安装了mongodb,使用SecureCRT连接centos后,使用mongo来操作mongodb,在shell使用退格键时出现乱七八糟的字符,造成这个问题原因跟SecureCRT配置有关,修改设置为:选项 –> 会话选项 –> 终端 –> 仿真 –> 终端中选择linux 即可。详细如下图:

mysql 中对存储有中文信息字段使用拼音排序

2012年2月1日 没有评论

在mysql中使用order by对存储了中文信息的字段,默认出来的结果并不是按汉字拼音的顺序来排序,要想按汉字的拼音来排序,需要把数据库的字符集设置为UTF8,然后在order by 时候强制把该字段信息转换成GBK,这样出来的结果就是按拼音顺序排序的。例如:

SELECT * FROM table_name ORDER BY CONVERT(column_name USING gbk);

linux mysql客户端中执行系统命令

2012年1月17日 没有评论

在linux下可以用mysql命令登陆连接到mysql服务器,如果这时需要执行shell命令,例如查看某个目录下的文件列表,其实不需要退出mysql客户端,只需要在mysql提示符下输入system或\! 再加上系统命令即可。

分类: MySQL 标签:

查看mysql数据库中某个库的存储过程

2012年1月11日 没有评论

如果只想知道存储过程的名字,有两种方法

  • 方法一:
select `name` from mysql.proc where db = '数据库名' and `type` = 'PROCEDURE';
  • 方法二:
use 数据库名

show procedure status;

查看存储过程的代码

use 数据库名

show create procedure proc_name;
分类: MySQL 标签: ,

mysql的between的边界问题

2012年1月5日 没有评论

mysql的sql语句中可以使用between来限定一个数据的范围,例如:

select * from user where userId between 5 and 7;

查询userId为5、6,7的user,userId范围是包含边界值的,也等同如下查询:

select * from user where userId >= 5 and userId <= 7;

很多地方都提到between是给定的范围是大于等第一值,小于第二个值,其实这是不对的。此前我一直也是这么认为,通过实验,结论是包含两边的边界值,如果实在拿不准,可以采用>= 、<=的方式来指定条件。

另外 not  between的范围是不包含边界值。

分类: MySQL 标签: ,

配置记录mysql服务器的慢查询日志

2012年1月5日 没有评论

mysql服务可以把超过指定规定时间的sql语句已日志的方式记录下来,检查当前mysql服务有没有记录慢查询的命令为:

/usr/local/mysql/bin/mysqladmin var | grep log_slow | tr -d "|"

如果看到log_slow_queries OFF则没有启用,启用的方法很简单,把如下配置放在mysql的配置文件my.cnf中的mysqld段里即可。

log-slow-queries	= /var/lib/mysql/slow-queries.log
long_query_time		= 1
log-queries-not-using-indexes
log-slow-admin-statements

上面的配置打开了slow query日志,将会捕获了执行时间超过了1秒的查询,包括执行速度较慢的管理命令(比如OPTIMEZE TABLE),并且记录了没有使用索引的查询。这些SQL,都会被记录到log-slow-queries指定的文件/var/lib/mysql /slow-queries.log文件中。

log-slow-queries
存放slow query日志的文件。你必须保证mysql server进程mysqld_safe进程用户对该文件有w权限。

long_query_time
如果query time超过了该值,则认为是较慢查询,并被记录下来。单位是秒。

log-queries-not-using-indexes
MySQL会将没有使用索引的查询记录到slow query日志中。无论它执行有多快,查询语句没有使用索引,都会被记录。有的时候,有些没有使用引索的查询非常快(例如扫描很小的表),但也有可能导致服务器变慢,甚至还会使用大量的磁盘空间。

log-slow-admin-statements
一些管理指令,也会被记录。比如OPTIMEZE TABLE, ALTER TABLE等等。

需要说明的是long_query_time很多地方都说最小是1秒,其实该值可以是一个浮点数,起码在mysql 5版本中可以这么配置,例如 0.1,也就是100毫秒。

分类: MySQL 标签: ,

MySql表结构修改常用语句

2011年12月20日 没有评论
  • 增加列

增加的列位于最后

alter table table_name add col_name varchar(20);

alter table table_name add col_name varchar(20) default 'test' not null;

alter table table_name add column col_name varchar(20) default 'test' not null;

增加的列在指定的列之后

alter table table_name add col_name varchar(20) after exists_col_name;

增加的列位于第一列

alter table table_name add col_name varchar(20) first;
  • 修改列

修改列的类型

alter table table_name modify col_name varchar(40);	//假设原来的类型是varchar(20)

alter table table_name modify col_name int(11);		//从varchar修改为int

alter table table_name change col_name col_name varchar(20);	//从int修改为varchar

修改列名

alter table table_name change old_col_name new_col_name varchar(20);
  • 删除列
alter table table_name drop col_name;

alter table table_name drop column col_name;
分类: MySQL 标签: ,

在jdbc配置logSlowQueries信息

2011年12月15日 没有评论

MySql服务器端本身可以通过配置以日志的方式记录下来那些耗时的sql语句,对给系统调优提供一些参考信息,同样java的jdbc Driver也支持这样的功能,只需要在jdbc中增加logSlowQueries和配置即可slowQueryThresholdMillis,其中logSlowQueries参数设置是否打印出慢sql,slowQueryThresholdMillis定义一个时间,单位是毫秒,超过这个时间的就是慢sql,也就会打印出来。例如jdbc配置如下:

jdbc:mysql://localhost:3306/database_name?autoReconnect=true&useUnicode=true&characterEncoding=utf8
&logSlowQueries=true&slowQueryThresholdMillis=0

MySql多表关联Update笔记

2011年12月15日 没有评论

对单表执行更新没有什么好说的,无非就是update table_name set col1 = xx,col2 = yy where col = zz,主要就是where条件的设置。有时候更新某个表可能会涉及到多张数据表,例如:

update table_1 set score = score + 5 where uid in (select uid from table_2 where sid = 10);

其实update也可以用到left join、inner join来进行关联,可能执行效率更高,把上面的sql替换成join的方式如下:

update table_1 t1 inner join table_2 t2 on t1.uid = t2.uid set score = score + 5 where t2.sid = 10;

清理MySql的日志文件mysql-bin.00000

2011年11月15日 1 条评论

有一个应用运行在aws的ec2上面,由于存储硬盘比较小,只有8G左右的容量,最初刚配置好环境(按照了php、mysql、nginx等),使用的硬盘只有不到3G,运行一段后,发现硬盘已经用了5G多了,即使清除了nginx的日志,硬盘还是接近5G。决定找出是谁占用了硬盘空间。

通过命令

du -h –max-depth=1 /

查看根目录下每个文件夹所占用存储的大小,发现/var占用了快3G,进一步使用du命令,发现是存放mysql数据文件的文件夹占用了绝大部分空间,进入该文件夹,发现有很多mysql-bin.00000开头的文件,而且其中的某些达到了1G以上,google发现原来这些用户是mysql记录的日志文件,用于数据库崩溃后恢复数据和主从数据库进行数据同步的。如果没有进行主从数据库,可以通过修改配置文件让mysql关闭记录操作日志功能,关闭只需要在log-bin=mysql-bin前加上一个“#”即可,不要忘记重启mysql服务。

清理日志方法为:

PURGE MASTER LOGS TO 'mysql-bin.000013'; 
或
PURGE MASTER LOGS BEFORE '2010-10-18 00:00:00'; 

另外可以通过 RESET MASTER 来删除整个日志文件,注意,如果使用主从数据库,在操作前先确保从数据库已经完全同步了主数据库的数据。
上述命令都是登陆到mysql后执行的。

无觅相关文章插件,快速提升流量