最近想搞一个个人运维的Blog,觉的wordpress运行有点慢。自已写一个更不靠谱。最终选择了drupal。真是折腾数周才能发个东东。先坚持用着,不在折腾上花时间了。希望以后有更多的时间,能给大家分享一点知识。
有Drupal高手了,如有时间了帮我设制一下。非常感激。
最近想搞一个个人运维的Blog,觉的wordpress运行有点慢。自已写一个更不靠谱。最终选择了drupal。真是折腾数周才能发个东东。先坚持用着,不在折腾上花时间了。希望以后有更多的时间,能给大家分享一点知识。
有Drupal高手了,如有时间了帮我设制一下。非常感激。
memcache 查看状态支持的命令:
[code]
[/code]
执行stats cachedump 3 0命令。这里的3表示上面图中items后面的数字,0标示显示全部的数据,如果是1就标示只显示1条。
一个例程:
[code]
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 就可以看到自已熟悉的界面了。
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通过的。
第一个:
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
首先查出来有那些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异常断开。
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)
分析原因:
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
所有整数类型可以有一个可选(非标准)属性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 的操作.尽量在这类操作前先做一个判断.
介绍:
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段中),然后可以调整到适当的值。
设置方法: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
4. 其它相关参数这里说明一个比较重要的参数:innodb_flush_method
总结: