正在加载...
分页: 73/186 第一页 上页 68 69 70 71 72 73 74 75 76 77 下页 最后页 [ 显示模式: 摘要 | 列表 ]

Mysql数据库基本配置建议

[ 2009/08/04 11:44 | by selboo ]
作者:石展 来源:http://dbaview.cn 转载请注明作者和出处,且不能用于商业用途,违者必究。

如下是数据库安装后的基本配置规范,提取了配置中最最通用的部分,给出数据库最基本的配置要求,且给出的参数是脱离应用,不会由于参数调整引起crash的,请大家回贴多多拍砖!

一.mysql配置文件my.cnf参考:
#####################################################
[mysqld]
#通用配置部分
port

= 端口
socket

= mysql_path/var/mysql.sock
table_cache = 512
thread_cache = 30
max_connections = 500
back_log = 400
max_connect_errors = 1000
thread_concurrency = 8
log-error=ecomdb-err.log
log-slow-queries = ecomdb-slow.log
long_query_time =1
#mysql 4.1以上开启
#log-queries-not-using-indexes
#若是主库,则开启binlog
#log-bin=ecomdb-master-bin

#建议配置部分(若需结合应用寻求更多帮助,直接回贴问石展~~~~)
#若使用innodb请开启如下配置
#innodb_buffer_pool_size = (内存的50%-80%,建议保守设置)
#innodb_additional_mem_pool_size = 100M
#innodb_log_file_size = 100M
#innodb_log_buffer_size = 16M

#######################################################

2.重要配置选项说明:

(1) 最大连接数

Max_connections为允许的并行客户端最大连接数,为避免连接数溢出引起连接拒绝,调大此值至500:

Max_connections = 500

(2) 最大错误连接数

Max_connect_errors为最大错误连接数,默认为10,当由于密码错误等原因引起与数据库和客户端中断超过该数目,则阻塞后面的连接。建议调大为1000:

Max_connect_errors = 1000

(3) 表缓存

table_cache为所有线程打开的表数目的缓存,增大该值可以增加mysqld需要的文件描述符的数量,建议调至512:

table_cache = 512

(4) 线程缓存

thread_cache为数据库端的线程缓存。如果新连接很多,可以增加该变量以提高性能。此参数和应用对数据库的连接数关系较大,一般比数据库的正常连接数稍大即可,可以考虑设置为30:

thread_cache = 30

(5) back_log

当主MySQL线程在短时间内得到许多连接请求时发挥作用。主线程需要花一些时间(尽管很少)来检查连接并启动一个新线程。back_log值说明 MySQL临时停止响应新请求前在短时间内可以堆起多少请求,可以考虑调整为400:

back_log = 400

(6) 慢查询日志

如下配置将时间超过 long_query_time(秒) 的慢查询记录到适当命名的慢查询日志文件中,以方便进行数据库优化,超时时间建议为1秒,此项必须开启。

log-slow-queries = ecomdb-slow.log

long_query_time =1

#mysql 4.1以上开启,可记录未使用索引的sql

#log-queries-not-using-indexes

(7) 二进制日志

对于主库,需开启二进制日志,在灾难恢复及数据库同步时使用:

log-bin=sfdbwsz-master-bin

(8) 错误日志

将数据库严重错误时的信息写入指定文件名的日志文件中,数据库故障时需首先查看这些日志:

log-error=ecomdb-err.log

Tags: ,
      老师和父母是聪明孩子的最大杀手,这是昨天和一位智者在吃饭的时候聊到的。

    聪明的孩子不会循规蹈矩,所以他们注定不满足格式化的教育,比如课本上说斯大林,他们除了学习到课本上教的斯大林是苏联的伟人,他们还会去问,斯大林会不会杀人,杀了多少人?这时候大部分老师一定抓狂了,把这样的孩子认定为坏学生,故意和权威的自己以及教育制度作对。

    聪明的孩子理解能力非常强,所以父母说的有道理的事情,他们一次就明白,甚至父母说了一半的他们就明白了,只不过基于强烈的个性,他们不会说:我明白了。可是当父母智商低于孩子的时候(这是普遍现象),父母就会认为孩子没明白,反复重复,反复啰嗦,就造成了孩子的反感,甚至觉得父母低估了自己的智商,最可怕的就是产生逆反心理。就这样,父母的好意换来的最坏的结果。

    如果希望孩子可以变得比自己更好,最好的办法不是去控制住孩子,而是必须承认孩子的智商比自己高,可以尝试出更多的可能性,同时言传身教一流的道德水准,这样肯定能培养出优秀的孩子。

    把天才培养成庸才,是中国父母和中国教育目前最可怕的现象。

RAR命令行分卷压缩

[ 2009/08/03 14:15 | by selboo ]
C:\Program Files\WinRAR\Rar.exe a -ep1 -m0 -v2m E:\web\1.rar E:\web\
注释:-v2m 即分卷的大小为2m
其他同下

把E:\web\目录下的所有东西打包为1.rar放到E:\web\目录下,以便下载

C:\Program Files\WinRAR\Rar.exe a -k -r -s -m1 E:\web\1.rar E:\web\

参数说明:

a 添加文件到压缩文件中

-k 锁定压缩文件

-s产生固体存档,这样可以增大压缩比

-r包括子目录

-m1 设置压缩比
-m0 存储 添加到压缩文件时不压缩文件。
-m1 最快 使用最快方式(低压缩)
-m2 较快 使用快速压缩方式
-m3 标准 使用标准(默认)压缩方式
-m4 较好 使用较好压缩方式(较好压缩,但是慢)
-m5 最好 使用最大压缩方式(最好的压缩,但是最慢)

D:\Program Files\WinRAR>rar

RAR 3.80    版权 (C) 1993-2008 Alexander Roshal    16 九月 2008
已注册给 Federal Agency for Education

用法:     rar <命令> -<开关 1> -<开关 N> <压缩文件> <文件...>
               <@列表文件...> <解压路径\>

<命令>
  a             添加文件到压缩文件
  c             添加压缩文件注释
  cf            添加文件注释
  ch            改变压缩文件参数
  cw            写入压缩文件注释到文件
  d             删除压缩文件中的文件
  e             解压压缩文件到当前目录
  f             刷新压缩文件中的文件
  i[参数]=<串>  在压缩文件中查找字符串
  k             锁定压缩文件
  l[t,b]        列出压缩文件[技术信息,简洁]
  m[f]          移动到压缩文件[仅对文件]
  p             打印文件到标准输出设备
  r             修复压缩文件
  rc            重建丢失的卷
  rn            重命名压缩文件
  rr[N]         添加数据恢复记录
  rv[N]         创建恢复卷
  s[名字|-]     转换压缩文件为自解压格式或转换回压缩文件
  t             测试压缩文件
  u             更新压缩文件中的文件
  v[t,b]        详细列出压缩文件[技术信息,简洁]
  x             用绝对路径解压文件

<开关>
  -             停止扫描
  ac            压缩或解压后清除存档属性
  ad            添加压缩文件名到目标路径
  ag[格式]      使用当前日期生成压缩文件名
  ao            添加具有压缩属性的文件
  ap<格式>      添加路径到压缩文件中
  as            同步压缩文件内容
  av            添加用户身份校验(仅注册版本可用)
  av-           禁用用户身份校验
  c-            禁用注释显示
  cfg-          禁用读取配置
  cl            名称转换为小写
  cu            名称转换为大写
  df            压缩后删除文件
  dh            打开共享文件
  dr            删除文件到回收站
  ds            对固实压缩文件禁用名称排序
  dw            压缩后清除文件
  e[+]<属性>    设置文件排除和包括属性
  ed            不添加空目录
  en            不添加"压缩文件结束"标志
  ep            从名称中排除路径
  ep1           从名称中排除基本目录
  ep2           展开为完整路径
  ep3           扩展路径为包含盘符的完全路径
  f             刷新文件
  hp[密码]      同时加密文件数据和文件头
  id[c,d,p,q]   禁用消息
  ieml[属性]    用 E-mail 发送压缩文件
  ierr          发送所有消息到标准错误设备
  ilog[名称]    把错误写到日志文件(只有注册版本可用)
  inul          禁用所有消息
  ioff          完成一个操作后关闭 PC 电源
  isnd          启用声音
  k             锁定压缩文件
  kb            保留损坏的已解压文件
  m<0..5>       设置压缩级别(0-存储...3-默认...5-最大)
  mc<参数>      设置高级压缩参数
  md<大小>      以KB为单位的字典大小(64,128,256,512,1024,2048,4096 or A-G)
  ms[ext;ext]   指定存储的文件类型
  mt<线程>      设置线程数
  n<文件>       仅包含指定的文件
  n@            从标准输入设备读取文件名到包括
  n@<列表>      在指定的文件列表包括文件
  o[+|-]        设置覆盖模式
  oc            设置 NTFS 压缩属性
  or            自动重命名文件
  os            保存 NTFS 流
  ow            保存或恢复文件所有者和组
  p[密码]       设置密码
  p-            不询问密码
  r             递归子目录
  r0            仅递归通配符名称的子目录
  ri

[:]   设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间
  rr[N]         添加数据恢复记录
  rv[N]         创建恢复卷
  s[,v[-],e] 创建固实压缩文件
  s-            禁用固实压缩文件
  sc[obj]  指定字符集
  sfx[名称]     创建自解压压缩文件
  st[名称]      从标准输入设备读取数据(stdin)
  sl<大小>      处理小于指定大小的文件
  sm<大小>      处理超过指定大小的文件
  t             压缩后测试文件
  ta<日期>      添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
  tb<日期>      添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
  tk            保留原始压缩文件时间
  tl            设置压缩文件时间为最新文件时间
  tn<时间>      添加 <时间> 以后的文件
  to<时间>      添加 <时间> 以前的文件
  ts[N]  保存或恢复文件时间(修改,创建,访问)
  u             更新文件
  v             自动检测创建卷的大小或者列出所有的卷
  v<大小>[k,b]  创建卷大小=<大小>*1000 [*1024, *1]
  vd            创建容量前清除磁盘内容
  ver[n]        文件版本控制
  vn            使用旧风格的卷命名方案
  vp            每卷之前暂停
  w<路径>       指定工作目录
  x<文件>       排除指定的文件
  x@            从标准输入设备读取要排除的文件名
  x@<列表>      排除指定列表文件中的文件
  y             假设对全部询问都回答是
  z[文件]       从文件读取压缩文件注释

D:\Program Files\WinRAR>

mysql 删除表中的重复记录

[ 2009/07/31 20:53 | by selboo ]
      MySQL中漏掉了40%左右的数据,寻找这个错误的代价是花了三天,将所有的代码重新检查了一遍,由于代码不是我写的,看得晕头转向,上苍保佑,我还不算太笨,最终找到了原因,不过接着就碰到另外一个问题,找回的数据中存在重复,而且在无法在重复的健上建立唯一,于是我想了一个最笨的方法

SELECT * FROM sub_new   WHERE email  IN (
SELECT  email  FROM sub_new
GROUP  BY  email  HAVING  count(email) > 1
)


这种算法是最傻也是最没出息的算法,在数量在1W的时候还可以接受,到10W就要两分钟了,到50W就死在那里了,所以告诫那些跟我一样天资不算聪明的人,数据量比较大的时候千万别用这种方法,这种类似冒泡排序的算法复杂度是O(n^2),如果你有10W条记录,你自己乘一下吧  

接着又想了另外一个方法,虽然机械了点,不过效率非常之高,分三步走:

CREATE   TABLE   tmp   AS   SELECT   *   FROM   youtable
  GROUP   BY   name

DROP   TABLE   youtable
ALTER   TABLE   tmp   RENAME   youtable


10W条记录,在第一步处理师大约为4秒,50w条记录时为19秒左右,再往上就没测了

后面两条语句纯粹是体力活,如果你用的是phpadmin,点点鼠标就可以搞定

Tags:

df和du显示空间为何不一致

[ 2009/07/30 12:02 | by selboo ]
     有台机器空间老是显示满,df显示已经使用了100%,可用du命令却没见占用很多空间,后来终于在网上查到了原因所在:
造成这个现象的原因是有进程仍然打开着已经被删除的文件。因为该文件已经不存在于文件目录树上,所以du遍历整个文件系统中不会统计其所占用的空间,可是,这个文件又还不能被从磁盘上删除,所以确实还占用了一部分磁盘空间。
可以用lsof来确定究竟是哪个进程搞的鬼,比如:
# lsof | grep deleted
sendmail  31818       hsq    3uW     REG        8,5  194523136     457053 /var/spool/clientmqueue/dfm9TAh6du031818 (deleted)


上面这个例子显示tail(pid为31818)进程打开了一个已经被删除的文件(/var/spool/clientmqueue/dfm9TAh6du031818 ),这个文件大小为457053。此时,如果终止这个进程,那么这457053多字节就会正常释放,df的输出也就和du一致了。
曾经遇到过此类问题的报告,似乎杀了sendmail就好了。当时不知原由,现在想来,可能是系统长时间运行后sendmail的日志经过了rotate,而sendmail仍然打开着旧的日志文件。

以后再遇到此类情况,直接用lsof命令,查看是哪些进程占用着已删除文件,就可相机处理了。
Tags: ,
分页: 73/186 第一页 上页 68 69 70 71 72 73 74 75 76 77 下页 最后页 [ 显示模式: 摘要 | 列表 ]