drupal学习东西挺多的

最近想搞一个个人运维的Blog,觉的wordpress运行有点慢。自已写一个更不靠谱。最终选择了drupal。真是折腾数周才能发个东东。先坚持用着,不在折腾上花时间了。希望以后有更多的时间,能给大家分享一点知识。

有Drupal高手了,如有时间了帮我设制一下。非常感激。

memcache内部key的需取出

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

memcache 查看状态支持的命令:
[code]

1. stats
2. stats reset
3. stats malloc
4. stats maps
5. stats sizes
6. stats slabs
7. stats items
8. stats cachedump slab_id limit_num
9. stats detail [onoffdump]

[/code]

执行stats cachedump 3 0命令。这里的3表示上面图中items后面的数字,0标示显示全部的数据,如果是1就标示只显示1条。

一个例程:
[code]


1.
2. $host=’192.168.15.225′;
3. $port=11211;
4. $mem=new Memcache();
5. $mem->connect($host,$port);
6. $items=$mem->getExtendedStats (‘items’);
7. $items=$items[“$host:$port”][‘items’];
8. for($i=0,$len=count($items);$i<$len;$i++){
9. $number=$items[$i][‘number’];
10. $str=$mem->getExtendedStats (“cachedump”,$number,0);
11. $line=$str[“$host:$port”];
12. if( is_array($line) && count($line)>0){
13. foreach($line as $key=>$value){
14. echo $key.’=>’;
15. print_r($mem->get($key));
16. echo “\r\n”;
17. }
18. }
19. }
20. ?>
[/code]

 

Solaris10 安装vim

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

Solais 默认的编辑器是vi,对于我从linux过来的操作者,对于那个vi还是有点不习惯的。所以想换成vim

开始行动:
我用的x86系列的,练手用的。

下载软件的地方:ftp://ftp.sunfreeware.com/pub/freeware/intel/10/

vim-7.2-sol10-x86-local.gz
相依赖的包:
ncurses-5.6-sol10-x86-local.gz
gtk+-1.2.10-sol10-intel-local.gz
glib-1.2.10-sol10-x86-local.gz

这几个包都可以在上面的网址上下载。

安装:
#gzip -d vim-7.2-sol10-x86-local.gz
#pkgadd -d vim-7.2-sol10-x86-local

Solaris手工安装软件不会检查,软件的依赖问题。所以直接安装vim那个包也是安装上的,但就是不能用。提示:libgtk-1.2.so.0 文件不存在。
所以继续安装:
#gzip -d ncurses-5.6-sol10-x86-local.gz
#pkgadd -d ncurses-5.6-sol10-x86-local

#gzip -d glib-1.2.10-sol10-x86-local.gz
#pkgadd -d glib-1.2.10-sol10-x86-local

添加环境变量:
vi /etc/profile找到export PATH前面添加:

PATH=$PATH:/usr/local/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/locla/lib #这个也可以不用写的。

存盘退出。

#source /etc/profile

已经安装完毕。

这样输入vim 就可以看到自已熟悉的界面了。

注意:MySQL用户密码中的“!”

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

Tips
  禁止用户终端进入的一个方法。

mysql> grant all privileges on wubx.* to ‘wubx’@’172.16.100.185’ identified by ‘fd52!wubx&,’;
Query OK, 0 rows affected (0.00 sec)
mysql>quit;
#mysql -h 172.16.100.185 -u wubx -pfd52!wubx&,
-bash: !wubx@,: event not found

仔细看一下,原来他把!后面的字符串做为命令执行了。又试了一个Navicat的管理端,也一样存在密码不正常的问题。
在测一下程序方面是不是可以用,写一个PHP测一下。

$link = mysql_connect(‘172.16.100.185′,’wubx’,’fd52!wubx&,’);
if (!link){
die(‘Could not connect:’.mysql_error());
}
echo ‘Connected successfully’;mysql_close($link);
?>
#php testdb.php
Connected successfully
还看程序中能正常识别。
PHP还是可以OK通过的。
 

分享:我下载Mysql的地方

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

第一个:
http://mirror.provenscaling.com/

特点:
有社区版和企业版两种,基本上比较全。上面的每个版本基本都没问题。

第二个:

http://www.percona.com/mysql/

特点:
国际Mysql牛人Peter(仅次于国内牛人叶大师yejr)的公司研究的分支及官方的代码patch都能找到的地方。

第三个:

http://www.mysql.com

特点:
Mysql的官方网站。不用多说了。

第四个:

http://code.google.com/p/google-mysql-tools/

特点:

Google的东西,绝对货真假实。

===============================================

最后在推一个学习Mysql的最佳Blog(对中国Mysqler来说的)

http://imysql.cn

大量unauthenticated user出现

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

首先查出来有那些IP连接mysql
mysql -e “show processlist”|awk ‘{print $3}’|sed -e ‘s/:.*$//’ |sort |uniq -c

记录一下这些IP

再收次一下那些IP出现 unauthenticated user
mysql -e “show processlist”|sed -s “/unauthenticated/”|awk ‘{print $3}’|sed -e ‘s/:.*$//’ |sort |uniq -c

多次执行,比较结果。
最终在/etc/hosts 里添加相应的IP及对应的名称。

参考建义(来自CU):
1、skip-name-resolve 已经添加之后; 最好在改用IP连接。
2、max_allowed_packet 参数可以适当调整。
3、MySQL 客户端库文件版本太低也有可能出现这个问题。
4、如php、java等应用端服务压力大,线程异常中断也会导致连接MySQL异常断开。

unsiged 数值运算 记录

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。


mysql> CREATE TABLE IF NOT EXISTS `ab`
`id` int(11) NOT NULL,
`id1` tinyint(3) unsigned DEFAULT NULL,
`id2` tinyint(3) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into ab values(1,1,2);
Query OK, 1 row affected (0.00 sec)

mysql> select id1-id2 from ab;
+———————-+
| id1-id2 |
+———————-+
| 18446744073709551615 |
+———————-+
1 row in set (0.00 sec)

分析原因:

18446744073709551615
这个值是bigint unsigned 的最大值。

MySQL内部的运算是按地址运算的。

二进制减法运算的原理:减去一个正数相当于加上一个负数A-B=A+(-B),对(-B)求补码,然后进行加法运算。 符号也进用相应的位表示了。
补码:补码或是反码的最高位为符号位,正数为0,负数为1
   当二进制数为负数时,将原码的数值位逐位求反,然后在最低位加1得到补码。
   当二进制数为正数时,其补码,反码与原码相。

(补了一下二进制)





1-2
过程: 0000 00001 – 0000 0010 = 0000 0001 +(-0000 0010)
#在这个求补码的过程中,按整数最大值来求了。用8个字节表示了。
=0000 00001 + (11111111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1101 + 1 )
=11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

mysql> select hex(18446744073709551615);
+—————————+
| hex(18446744073709551615) |
+—————————+
| FFFFFFFFFFFFFFFF |
+—————————+
1 row in set (0.00 sec)

参考:
http://zhidao.baidu.com/question/36780022.html
http://www.mysqlsupport.cn/2009/04/mysql-4int-unsigned.html

Mysql 4 和5的int unsigned 区别

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。
mysql4:
mysql> create table wubx(a TINYINT unsigned not null default ‘0’);
Query OK, 0 rows affected (0.04 sec)
mysql> select * from wubx;
Empty set (0.00 sec)
mysql> insert wubx values(0);
Query OK, 1 row affected (0.00 sec)
mysql> select * from wubx;
+——+
| a |
+——+
| 0 |
+——+
1 row in set (0.00 sec)
mysql> update wubx set a=a-1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1
mysql> select * from wubx;
+——+
| a |
+——+
| 0 |
+——+
1 row in set (0.00 sec)

mysql5:

(root@localhost) [test]> create table wubx(a int(11) unsigned not null default ‘0’);
Query OK, 0 rows affected (18.44 sec)
(root@localhost) [test]> select * from wubx;
Empty set (0.00 sec)
(root@localhost) [test]> insert into wubx values(0);
Query OK, 1 row affected (0.00 sec)
(root@localhost) [test]> update wubx set a=a-1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
(root@localhost) [test]> select * from wubx;
+————+
| a |
+————+
| 4294967295 |
+————+
1 row in set (0.00 sec)
mysql> show warnings;
+———+——+—————————————————–+
| Level | Code | Message |
+———+——+—————————————————–+
| Warning | 1264 | Out of range value adjusted for column ‘a’ at row 1 |
+———+——+—————————————————–+

查了一下:
在对于数值处理时:

MySQL4 会在不合规定的值插入表前自动修改为 0
Mysql5 为了速度,只存放数二进制数据,而且在加减运算中,也是二进制的运算.

所以在使用unsigned 是小心0-1 的操作.尽量在这类操作前先做一个判断.

MySQL Innodb 引擎优化(二)

机器篇

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。
背景:
Innodb 是什么的介绍请参考 MySQL Innodb 引擎优化(一)我有时在讲选择机器上时,好多朋友会觉的MySQL嘛,随便弄一个机器就行了。又不象Oracle之类的安装要求内存必须超过512M什么之类的。但要想让机器跑出一秒中上千Query的效果,机器选择方面还是要待认真对待一下。另一方面做为数据库,到真正的生产中大家绝对要求是稳定高性能了,怎么达到这些要求呢?当然基本建设上一定要跟上,弄一个稳定的高性能的机器是首要条件。当然这里有一个并发力度和数据量总大小和单表大小有很大的关系。例如:并发不大,数量小或是总量比较大,但最大的表没超过1G,一般的类CMS网站,那对于机器的选择要求真的是不大了;另一方面,如果能预见自已的数据量增长较快,并发强度大,数据增长也快的情况下,选择Innodb引擎是一个明智的选择;或是现在的业务已经出现了性能瓶颈进行优化时,也可以比较一下各个引擎的特点。
机器选择包括:
1、硬盘选择
2、内存选择
3、cpu选择
4、系统选择
5、整架构的规划和调整 
 
1、硬盘选择:
空间的大小:这个根据自已数据量,增长情况,项目预算到那个阶段来决定。Raid级别:根据业务情况选择Raid10,Raid5推荐用Raid10对数据库系统Raid10绝对有优势,Raid5适合读比较多的业务系统。不过在在充许的情况,还是Raid10是最佳的选择以空间换时间,从而加快速度。在Raid的选择上,一定要选择好的Raid卡,大牌子还是可信的。免的出现很多莫名其妙的问题。Raid卡没电,加电过程机器性能下降严重,数据文件损坏等现象。让项目受到损失。推荐Raid卡缓存在256K-1M的。一定要用烂牌了Raid卡。成本可能的情况:选择市场上最快的磁盘,根据业务考虑自已的业务的读写比例有所取舍,必竟现在出来了一个SSD硬盘,在硬盘的选择上又多了一个选择。最其码建义也是单块的SAS硬盘。
2、内存选择:
根据数据量来决定。现在数据库机器内存最少也4个G了,其码要不要低于这个吧。便于你的机器能在项目中抗一段吧。建义用8G内存以上。
3、CPU选择:
选择64位的CPU,缓存要大的。Innodb对CPU的利用比较高。不用担心CPU浪费。
4、系统选择:
这个也是比较重要的。一定要选择64位的系统,64位的MySQL。另一方面确认系统的IO模式,DIRECT模式是一个不错的IO模式。线程库支持情况。MySQL是一个多线程的DB,所以对线程库要求比较高,基于这点Linux,Solaris都是一个不错的选择。Linux要选择kernel 2.6.X的内核。再可能的情况下可以禁用DB服务器的Swap分区,从而必免系统瞬时不稳定的现象。MySQL大量的查询都是短查询,所以可以禁掉Swap。如果是线下数据分悉,还是起用Swap吧。不同系统的分区性能也是不一样的。对于Linux来说推荐用XFS,在数据量大的情况下可以提高性能1.5倍以上。
5、整架构的规划和调整 
另外在选择机器上时,还要考虑到我一次能用多少机器呢?如只有一台,那就尽配置的最强,如果可以上多台,那就可以根据是主库或是从库,读写多少这类来配置不同的机器。如果机器的并发严重,写入量也大的情况下,可以适高的考虑用强的机器做Slave,从而从使Slave能追上Master。
总结:
在机器上的选择上,特别是对DB应用,一定要选择可靠的机器。在上线使用前一定要深入测试,上线测试,多观查,根据自已的业务情况来选择合适的机器。同样也要本着最低成本投入,最大收益的原则来做。

Mysql Innodb 引擎优化(-)

参数篇

作/译者:吴炳锡,来源:http://imysql.cn/ & http://www.mysqlsupport.cn 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

介绍: 
  InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。 Innodb 的创始人:Heikki Tuuri Heikki Tuuri在Innodb的Bug社区里也是很活跃的,如果遇到Bug也可以直接提到社区,得到作者的解答。

为什么要学习Innodb的调优:  
      目前来说:InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。  另一方面,在数据库的复制操作中Innodb也是能保证master和slave数据一致有一定的作用。

参数调优内容:
  1. 内存利用方面
  2. 日值控制方面
  3.文件IO分配,空间占用方面
  4. 其它相关参数

1.内存利用方面:
        首先介绍一个Innodb最重要的参数:innodb_buffer_pool_size  这个参数和MyISAM的key_buffer_size有相似之处,但也是有差别的。这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲。为Innodb加速优化首要参数。  该参数分配内存的原则:这个参数默认分配只有8M,可以说是非常小的一个值。如果是一个专用DB服务器,那么他可以占到内存的70%-80%。这个参数不能动态更改,所以分配需多考虑。分配过大,会使Swap占用过多,致使Mysql的查询特慢。如果你的数据比较小,那么可分配是你的数据大小+10%左右做为这个参数的值。
例如:数据大小为50M,那么给这个值分配innodb_buffer_pool_size=64M
设置方法:innodb_buffer_pool_size=4G这个参数分配值的使用情况可以根据show innodb status\G;中的
———————-BUFFER POOL AND MEMORY———————-
Total memory allocated 4668764894;

去确认使用情况。

第二个:innodb_additional_mem_pool
 作用:用来存放Innodb的内部目录这个值不用分配太大,系统可以自动调。不用设置太高。
   通常比较大数据设置16M够用了,如果表比较多,可以适当的增大。如果这个值自动增加,会在error log有中显示的。

分配原则:用show innodb status\G;去查看运行中的DB是什么状态
(参考BUFFER POOL AND MEMORY段中),然后可以调整到适当的值。

———————-BUFFER POOL AND MEMORY———————-
Total memory allocated 4668764894; in additional pool allocated 16777216
参考:in additional pool allocated 16777216根据你的参数情况,可以适当的调整。

设置方法:innodb_additional_mem_pool=16M

2.关于日值方面:innodb_log_file_size作用:
      指定日值的大小分配原则:几个日值成员大小加起来差不多和你的innodb_buffer_pool_size相等。上限为每个日值上限大小为4G.一般控制在几个LOG文件相加大小在2G以内为佳。具体情况还需要看你的事务大小,数据大小为依据。说明:这个值分配的大小和数据库的写入速度,事务大小,异常重启后的恢复有很大的关系。设置方法:innodb_log_file_size=256M

innodb_log_files_in_group作用:
指定你有几个日值组。
分配原则: 一般我们可以用2-3个日值组。默认为两个。
设置方法:innodb_log_files_in_group=3

innodb_log_buffer_size:

作用:事务在内存中的缓冲。分配原则:控制在2-8M.这个值不用太多的。他里面的内存一般一秒钟写到磁盘一次。具体写入方式和你的事务提交方式有关。在Oracle等数据库了解这个,一般最大指定为3M比较合适。
参考:Innodb_os_log_written(show global status 可以拿到)如果这个值增长过快,可以适当的增加innodb_log_buffer_size另外如果你需要处理大理的TEXT,或是BLOB字段,可以考虑增加这个参数的值。

设置方法:innodb_log_buffer_size=3M

innodb_flush_logs_at_trx_commit
作用:控制事务的提交方式分配原则:这个参数只有3个值,0,1,2请确认一下自已能接受的级别。默认为1,主库请不要更改了。性能更高的可以设置为0或是2,但会丢失一秒钟的事务。说明:这个参数的设置对Innodb的性能有很大的影响,所以在这里给多说明一下。当这个值为1时:innodb 的事务LOG在每次提交后写入日值文件,并对日值做刷新到磁盘。这个可以做到不丢任何一个事务。当这个值为2时:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新,在对日志文件的刷新在值为2的情况也每秒发生一次。但需要注意的是,由于进程调用方面的问题,并不能保证每秒100%的发生。从而在性能上是最快的。但操作系统崩溃或掉电才会删除最后一秒的事务。当这个值为0时:日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。mysqld进程的崩溃会删除崩溃前最后一秒的事务。
从以上分析,当这个值不为1时,可以取得较好的性能,但遇到异常会有损失,所以需要根据自已的情况去衡量。
设置方法:innodb_flush_logs_at_trx_commit=1

3. 文件IO分配,空间占用方面innodb_file_per_table

作用:使每个Innodb的表,有自已独立的表空间。如删除文件后可以回收那部分空间。分配原则:只有使用不使用。但DB还需要有一个公共的表空间。设置方法:innodb_file_per_table=1
innodb_file_io_threads作用:文件读写IO数,这个参数只在Windows上起作用。在LINUX上只会等于4设置方法:innodb_file_io_threads=4
innodb_open_files作用:限制Innodb能打开的表的数据。分配原则:如果库里的表特别多的情况,请增加这个。这个值默认是300。设置方法:innodb_open_files=800 请适当的增加table_cache

4. 其它相关参数这里说明一个比较重要的参数:innodb_flush_method

作用:Innodb和系统打交道的一个IO模型分配原则:Windows不用设置。Unix可以设置:fsync() or O_SYNC/O_DSYNC如果系统可以禁止系统的Cache那就把他禁了。Linux可以选择:O_DIRECT 直接写入磁盘,禁止系统Cache了设置方法:innodb_flush_method=O_DIRECT
innodb_max_dirty_pages_pct 作用:控制Innodb的脏页在缓冲中在那个百分比之下,值在范围1-100,默认为90.这个参数的另一个用处:当Innodb的内存分配过大,致使Swap占用严重时,可以适当的减小调整这个值,使达到Swap空间释放出来。建义:这个值最大在90%,最小在15%。太大,缓存中每次更新需要致换数据页太多,太小,放的数据页太小,更新操作太慢。设置方法:innodb_max_dirty_pages_pct=90动态更改需要有Super权限:set global innodb_max_dirty_pages_pct=50;

总结:  

这里只算是列出了Innodb部分的重要参数,不能认为是对Mysql的整体调优。Mysql的参数一般分为:全局参数,具体引擎的参数。全局参数方面请参考http://imysql.cn/2007_12_08_optimize_mysql_under_linux yejr的那个Mysql调优的PPT。