Rootop 服务器运维与web架构

2013-09-04
发表者 Venus
暂无评论

DOS/Windows和Linux/Unix文件格式的区别

      DOS/Windows和Linux/Unix的文件换行回车格式不同,基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只有一个换行。linux文件放到windows下查看没有换行。

     虽然很多程序不在乎 DOS/Windows 格式的 CR/LF 文本文件,但是有几个程序却在乎, 最著名的是 bash,只要一遇到回车,就会报错。

     比如我有一个windows下的文件,叫做mysql官网账户.txt。传到linux下显示乱码:

[root@svn ~]# file mysql▒▒▒▒▒˻▒.txt
mysql▒▒▒▒▒˻▒.txt: ASCII text, with CRLF line terminators

看到是dos格式文件。

先利用convmv解决文件名称乱码问题:


[root@svn CentOS]# convmv -f GBK -t UTF-8 --notest ~/mysql▒▒▒▒▒˻▒.txt
mv "/root/mysql▒▒▒▒▒˻▒.txt"     "/root/mysql官网账户.txt"
Ready!

[root@svn CentOS]#ll
-rw-r--r-- 1 root root   27 09-04 10:10 mysql官网账户.txt

开始编码格式转换:

[root@svn ~]# dos2unix mysql官网账户.txt
dos2unix: converting file mysql官网账户.txt to UNIX format …
[root@svn ~]# file mysql官网账户.txt
mysql官网账户.txt: ASCII text

反过来unix2dos格式就用unix2dos命令转换:
[root@svn ~]# unix2dos mysql官网账户.txt
unix2dos: converting file mysql官网账户.txt to DOS format …
[root@svn ~]# file mysql官网账户.txt
mysql官网账户.txt: ASCII text, with CRLF line terminators

2013-09-03
发表者 Venus
暂无评论

mysql开启查询缓存

文章内容不完善,部分内容讲解不到位,仅供参考:

mysql> show variables like ‘%cache%’;
+——————————+————+
| Variable_name                | Value      |
+——————————+————+
| binlog_cache_size            | 32768      |
| have_query_cache             | YES        |
| key_cache_age_threshold      | 300        |
| key_cache_block_size         | 1024       |
| key_cache_division_limit     | 100        |
| max_binlog_cache_size        | 4294963200 |
| query_cache_limit            | 1048576    |
| query_cache_min_res_unit     | 4096       |
| query_cache_size             | 0          |
| query_cache_type             | ON         |
| query_cache_wlock_invalidate | OFF        |
| table_definition_cache       | 256        |
| table_open_cache             | 64         |
| thread_cache_size            | 0          |
+——————————+————+
14 rows in set (0.00 sec)

have_query_cache 部分为yes

利用mysql数据库中的user表做测试:

mysql> select * from user\G;

查看是否缓存:
mysql> show status like ‘%Qcache%’;
+————————-+——-+
| Variable_name           | Value |
+————————-+——-+
| Qcache_free_blocks      | 0     |
| Qcache_free_memory      | 0     |
| Qcache_hits             | 0     |
| Qcache_inserts          | 0     |
| Qcache_lowmem_prunes    | 0     |
| Qcache_not_cached       | 0     |
| Qcache_queries_in_cache | 0     |
| Qcache_total_blocks     | 0     |
+————————-+——-+
8 rows in set (0.00 sec)

看到所有项目为0,表示缓存功能并没有运行起来。

修改my.cnf配置文件,添加:

query_cache_type = 1     
#0 -– 不启用查询缓存;
 1 -– 启用查询缓存,只要符合查询缓存的要求,客户端的查询语句和记录集斗可以缓存起来,共其他客户端使用;
 2 -– 启用查询缓存,只要查询语句中添加了参数:SQL_CACHE,且符合查询缓存的要求,客户端的查询语句和记录集,则可以缓存起来,共其他客户端使用;
query_cache_limit = 1M    //限制查询缓存大小
query_cache_size = 32M    //设置缓存占用内存大小

重启mysql,测试。
mysql> select * from user\G;
mysql> show status like ‘%Qcache%’;
+————————-+———-+
| Variable_name           | Value    |
+————————-+———-+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 33545600 |
| Qcache_hits             | 0        |
| Qcache_inserts          | 0        |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 6        |
| Qcache_queries_in_cache | 0        |
| Qcache_total_blocks     | 1        |
+————————-+———-+
8 rows in set (0.00 sec)

Query cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。当我们打开了 Query Cache 功能,MySQL在接受到一条select语句的请求后,如果该语句满足Query Cache的要求(未显式说明不允许使用Query Cache,或者已经显式申明需要使用Query Cache),MySQL 会直接根据预先设定好的HASH算法将接受到的select语句以字符串方式进行hash,然后到Query Cache 中直接查找是否已经缓存。也就是说,如果已经在缓存中,该select请求就会直接将数据返回,从而省略了后面所有的步骤(如 SQL语句的解析,优化器优化以及向存储引擎请求数据等),极大的提高性能。

当然,Query Cache 也有一个致命的缺陷,那就是当某个表的数据有任何任何变化,都会导致所有引用了该表的select语句在Query Cache 中的缓存数据失效。所以,当我们的数据变化非常频繁的情况下,使用Query Cache 可能会得不偿失。

Query Cache的使用需要多个参数配合,其中最为关键的是 query_cache_size 和 query_cache_type ,前者设置用于缓存 ResultSet 的内存大小,后者设置在何场景下使用 Query Cache。在以往的经验来看,如果不是用来缓存基本不变的数据的MySQL数据库,query_cache_size 一般 256MB 是一个比较合适的大小。当然,这可以通过计算Query Cache的命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100))来进行调整。 query_cache_type可以设置为0(OFF),1(ON)或者2(DEMOND),分别表示完全不使用query cache,除显式要求不使用query cache(使用sql_no_cache)之外的所有的select都使用query cache,只有显示要求才使用query cache(使用sql_cache)。

2013-09-02
发表者 Venus
暂无评论

利用iconv实现文件编码转换

项目有一个编码为GBK的源码,放到linux下,编辑配置文件中文乱码。利用iconv实现编码转换。

root@mail core]# iconv -f GBK -t UTF-8 safe.inc.php -o safe2.inc.php
实现了单文件从GBK转换为utf-8 编码的转换
如果文件众多,比如将所有源码进行转换,从网上找了个shell解决:

#!/bin/bash
exts=( php tpl )

for ext in ${exts[*]}
do
  for i in `find /tmp/website -name *.$ext`
    do
      echo -e “$i-$ext”
      iconv -c -f GBK -t UTF-8 $i -o /tmp/iconv.tmp
      mv /tmp/iconv.tmp $i
    done
done

将拓展名为php和tpl的文件实现了批量转换。 /tmp/website为源码文件夹的路径。
文件转换好了,其中还有些文件名称为乱码。


[root@mail xxx]# convmv -f GBK -t UTF-8 --notest *.rar    //使用通配符解决不同文件名

这样实现了文件名的转换。


-r 递归处理子文件夹
–notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。
–list 显示所有支持的编码
–unescap 可以做一下转义,比如把%20变成空格

2013-09-01
发表者 Venus
暂无评论

Windows Server 2012 添加桌面图标

本地方式
如果是在 Windows Server 2012 本地控制台下,直接按Win徽标键+R,输入:
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0

回车后,勾选所需要的桌面图标的名称,确定即可。

远程方式
打开Windows PowerShell,在Windows PowerShell内输入cmd回车,当返回如下信息:
Microsoft Windows [版本 6.2.9200]
(c) 2012 Microsoft Corporation。保留所有权利。
则表示已成功进入命令行环境,然后再输入:
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
回车后,勾选所需要的桌面图标的名称,确定即可。