Monthly Archives: December 2010

mysqldump迁移编码不同的数据库

来源:http://hi.baidu.com/seaweaver/blog/item/fbd9a8ec933c532562d09f5c.html

第一步,导出旧库

mysqldump --default-character-set latin1 -uroot -pXXX --database db >     /tmp/old.sql

第二步,转换编码

iconv -t utf-8 -f gb2312 -c /tmp/old.sql > /tmp/new.sql

第三步,导入新库
修改new.sql,增加一条sql语句: “SET NAMES utf8;”,保存。

mysql -hlocalhost -uroot db < new.sql

这次进行论坛迁移时,这个小blog居然一再出现乱码,实在是让小可我实在是汗顏。
进行深入分析时,发现dump出来的文件里面就已经是乱码了。用file进行分析时,发现文件已经是UTF8。
最后仔细想想新旧服务器之间的区别,可能只有mysql server字符集的区别。老服务器用的是默认的latin1,而新服务器我们改成了utf8。
在笔记本的ubuntu上装了个mysql,把sql文件导入,select了一下,发现数据居然是正常了的。
这样子问题就很明显了,马上在笔记本上执行

mysqldump  --default-character-set=latin1  -uroot -p123456 myhnet > myhnet.sql

再用cat看了一个myhnet.sql的内容,里面的中文已经是正常了。
用vi打开文件,把里面所有的latin1替换成utf8,上传到服务器,再导入,果然一切正常了~~~~

mysql的FILE权限

前天晚上把MySQL的系统数据库给重装/升级了一下,结果昨天就出了问题了

昨天整整花了两个小时调试了两个小问题,第一个是procedure的问题,第二个就是这个FILE权限的问题。

第一个问题由于前面有function与trigger的经验,很快就定位解决了。

第二个问题由于以前没有经验,弄了好久才定位到这位一段SQL上面,当然了,他原来的SQL可比这个长多了。

SELECT * INTO OUTFILE 'data.txt'
  FIELDS TERMINATED BY ','
  FROM table2;

原来要让MySQL向系统里面写文件必须要给一个FILE权限。而这个权限是一个全局权限,我们在用下面这个语句进行授权时根本就不能把这个权限授给用户。

grant ALL on db.* to user@'host' identified by 'password';

必须要单独进行授权:

grant FILE on *.* to user@'host' identified by 'password';

linux系统用户密码字符串生成命令-shadow里的密码串生成[转帖]

原文:http://hi.baidu.com/gouxiongmao/blog/item/8035ed56f1c9df55d10906c9.html

perl -e 'print crypt("88991026",q($1$aCwLBNGo)),"\n"'

其中88991026为要给用户设置的密码,$1$aCwLBNGo字符串是自定义字符串,shadow里一般用$1$后面跟8个字符这种格式。

生成的密码串样式如下:

$1$aCwLBNGo$0napSn3Qck9Sj4FqP5RFz0

中间有个$,前面算salt,后面的加密值,合在一起叫hash
crypt 本身默认用des算法
如果salt以$1$开头就使用md5算法

des算法命令如下:

perl -e 'print crypt("88991026","/g"),"\n"'

生成的密码串样式如下:

/gSr78Mzt1eYI

利用网络汇聚让思科交换机支持网络负载均衡

先介绍一下port group 的概念
(来源http://bbs.51cto.com/viewthread.php?tid=509441&page=1&authorid=395509)

port group 是配置层面上的一个物理端口组,配置到port group里面的物理端口才可以参加链路汇聚,并成为port channel里的某个成员端口。在逻辑上,port group 并不是一个端口,而是一个端口序列。加入port group 中的物理端口满足某种条件时进行端口汇聚,形成一个port channel,这个port channel 具备了逻辑端口的属性,才真正成为一个独立的逻辑端口。端口汇聚是一种逻辑上的抽象过程,将一组具备相同属性的端口序列,抽象成一个逻辑端口。port channel是一组物理端口的集合体,在逻辑上被当作一个物理端口。对用户来讲,完全可以将这个port channel 当作一个端口使用,因此不仅能增加网络的带宽,还能提供链路的备份功能。
  端口汇聚功能通常在交换机连接路由器、主机或者其他交换机时使用。
  port channel 的带宽为4 个端口带宽的总和。而s1如果有流量要经过port channel 传输到s2,s1 的portchannel 将根据流量的源mac 地址及目的mac地址的最低位进行流量分配运算,根据运算结果决定由port channel 中的某一成员端口承担该流量。当port channel 中的一个端口连接失败,原应该由该端口承担的流量将再次通过流量分配算法分配给其他连接正常的端口分担。流量分配算法由交换机的硬件决定的。
  为使port channel 正常工作,port channel 的成员端口必须具备以下相同的属性:
  1 端口均为全双工模式;
  2 端口速率相同;
  3 端口的类型必须一样,比如同为以太口或同为光纤口;
  4 端口同为access 端口并且属于同一个vlan 或同为trunk 端口;
  5 如果端口为trunk 端口,则其allowed vlan 和native vlan 属性也应该相同。

具体操作:

SW006#configure terminal
SW006(config)#interface Port-channel 1
SW006(config-if)#switchport access vlan 100
SW006(config-if)#switchport mode access
SW006(config-if)#exit
SW006(config)#interface range gigabitEthernet 0/1-4
SW006(config-if-range)#switchport access vlan 100
SW006(config-if-range)#switchport mode access
SW006(config-if-range)#channel-group 1 mode on

自己写的ubuntu下tomcat启动脚本

自己利用start-stop-daemon写的tomcat启动脚本,解决了tomcat用户使用false与nologin等非交互式shell的问题,同时也可以解决umask的问题。然后再利用文件进行锁定,防止用户启动多个tomcat进程。
start-stop-daemon的确是个比较强大的工具,有时间再去具体看看使用细则。

#!/bin/bash
### BEGIN INIT INFO
# Provides:          tomcat6
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Tomcat.
# Description:       Start the Tomcat servlet engine.
### END INIT INFO


TOMCAT_USER=tomcat
TOMCAT_GROUP=tomcat
TOMCAT_HOME=/usr/local/tomcat
TOMCAT_BIN=$TOMCAT_HOME/bin
TOMCAT_TEMP=$TOMCAT_HOME/temp
TOMCAT_LOCK=/var/run/tomcat.lock
JAVA_HOME=/usr/local/java
TOMCAT_UMASK=002


if [ `id -u` -ne 0 ]; then
        echo "You need root or sudo privileges to run this script"
        exit 1
fi


start_sams() {
        if [ -f $TOMCAT_LOCK ];then
                echo ' * SAMS has already been started or has problems'
                echo ' * Please contact Tomas'
                exit 1
        fi
        start-stop-daemon --start -u "$TOMCAT_USER" -g "$TOMCAT_GROUP" \
                -c "$TOMCAT_USER" -d "$TOMCAT_TEMP" \
                -k "$TOMCAT_UMASK" -x "$TOMCAT_BIN/startup.sh" > /dev/null && \
                echo " * SAMS starts successfully" &&  touch $TOMCAT_LOCK

}

stop_sams() {
        if [ ! -f $TOMCAT_LOCK ];then
                echo ' * SAMS has already been stopped or has problems'
                echo ' * Please contact Tomas'
                exit 1
        fi
        start-stop-daemon --stop -u "$TOMCAT_USER" -g "$TOMCAT_GROUP" \
                -c "$TOMCAT_USER" -d "$TOMCAT_TEMP" \
                -k "$TOMCAT_UMASK" "$TOMCAT_BIN/shutdown.sh" && \
                echo " * SAMS stops successfully" && rm -f $TOMCAT_LOCK
}


case "$1" in
        start)
                start_sams
        ;;
        stop)
                stop_sams
        ;;
        restart)
                stop_sams
                sleep 10
                start_sams
        ;;
        *)
                echo ' * Usage: /etc/init.d/tomcat_sams {start|stop|restart}'
                exit 1
        ;;
esac

ubuntu下进行MySQL的移植

最近一直很忙,忙着加班进行服务器升级。

服务器全部升到了Ubuntu 1004 LTS,但是在进行mysql移植的时候碰到了个大问题,直接到原来的数据文件同步过来,mysql却无论如果也启动不了。

最后那边的老大告诉我说,是AppArmor的问题,让哥关掉这个什么AppArmor,果然,数据库就起来了。
简单查了一个,这个AppArmor应该是跟SELinux差不多的东西,但级别好像并没有SELinux那么高,直接停用服务就没用了。相关资料:https://wiki.ubuntu.com/AppArmor

另外还有两个问题:

1, socket文件的如果不能写入,数据库也是起不来的,所以,还要关注一下你指定的socket文件的位置的权限
2, 从5.0升级到5.1有很多麻烦,建议最好是做逻辑备份而不是做直接物理升级

好像直接升级也有问题,等待进一步的更新。