Mysql数据库基本配置建议
如下是数据库安装后的基本配置规范,提取了配置中最最通用的部分,给出数据库最基本的配置要求,且给出的参数是脱离应用,不会由于参数调整引起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
老师和父母是聪明孩子的最大杀手
聪明的孩子不会循规蹈矩,所以他们注定不满足格式化的教育,比如课本上说斯大林,他们除了学习到课本上教的斯大林是苏联的伟人,他们还会去问,斯大林会不会杀人,杀了多少人?这时候大部分老师一定抓狂了,把这样的孩子认定为坏学生,故意和权威的自己以及教育制度作对。
聪明的孩子理解能力非常强,所以父母说的有道理的事情,他们一次就明白,甚至父母说了一半的他们就明白了,只不过基于强烈的个性,他们不会说:我明白了。可是当父母智商低于孩子的时候(这是普遍现象),父母就会认为孩子没明白,反复重复,反复啰嗦,就造成了孩子的反感,甚至觉得父母低估了自己的智商,最可怕的就是产生逆反心理。就这样,父母的好意换来的最坏的结果。
如果希望孩子可以变得比自己更好,最好的办法不是去控制住孩子,而是必须承认孩子的智商比自己高,可以尝试出更多的可能性,同时言传身教一流的道德水准,这样肯定能培养出优秀的孩子。
把天才培养成庸才,是中国父母和中国教育目前最可怕的现象。
RAR命令行分卷压缩
注释:-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[
s- 禁用固实压缩文件
sc
sfx[名称] 创建自解压压缩文件
st[名称] 从标准输入设备读取数据(stdin)
sl<大小> 处理小于指定大小的文件
sm<大小> 处理超过指定大小的文件
t 压缩后测试文件
ta<日期> 添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
tb<日期> 添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
tk 保留原始压缩文件时间
tl 设置压缩文件时间为最新文件时间
tn<时间> 添加 <时间> 以后的文件
to<时间> 添加 <时间> 以前的文件
ts
u 更新文件
v 自动检测创建卷的大小或者列出所有的卷
v<大小>[k,b] 创建卷大小=<大小>*1000 [*1024, *1]
vd 创建容量前清除磁盘内容
ver[n] 文件版本控制
vn 使用旧风格的卷命名方案
vp 每卷之前暂停
w<路径> 指定工作目录
x<文件> 排除指定的文件
x@ 从标准输入设备读取要排除的文件名
x@<列表> 排除指定列表文件中的文件
y 假设对全部询问都回答是
z[文件] 从文件读取压缩文件注释
D:\Program Files\WinRAR>
mysql 删除表中的重复记录
SELECT email FROM sub_new
GROUP BY email HAVING count(email) > 1
)
这种算法是最傻也是最没出息的算法,在数量在1W的时候还可以接受,到10W就要两分钟了,到50W就死在那里了,所以告诫那些跟我一样天资不算聪明的人,数据量比较大的时候千万别用这种方法,这种类似冒泡排序的算法复杂度是O(n^2),如果你有10W条记录,你自己乘一下吧
接着又想了另外一个方法,虽然机械了点,不过效率非常之高,分三步走:
GROUP BY name
DROP TABLE youtable
ALTER TABLE tmp RENAME youtable
10W条记录,在第一步处理师大约为4秒,50w条记录时为19秒左右,再往上就没测了
后面两条语句纯粹是体力活,如果你用的是phpadmin,点点鼠标就可以搞定
df和du显示空间为何不一致
造成这个现象的原因是有进程仍然打开着已经被删除的文件。因为该文件已经不存在于文件目录树上,所以du遍历整个文件系统中不会统计其所占用的空间,可是,这个文件又还不能被从磁盘上删除,所以确实还占用了一部分磁盘空间。
可以用lsof来确定究竟是哪个进程搞的鬼,比如:
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命令,查看是哪些进程占用着已删除文件,就可相机处理了。