日志存档:07, 2006

iconv 解决 MySQL 乱码问题

2006-07-27,星期四 | 分类:MySQL | 标签: | 707 Views

从 Windows 下的 MySQL 导出的 sql 文件再导入到 Linux 下的 MySQL ,所有字段的中文内容都变成了乱码。
 
$ file -i sql1.sql
sql1.sql: text/plain; charset=utf-8
 
发现 sql 文件的编码是 utf-8 ,这与 Linux 下 MySQL 数据库默认的 gbk 编码不相符。
 
$ iconv -f utf-8 -t gbk -o sql2.sql sql1.sql
生成编码为 gbk 的 sql 文件再导入就可以了。
 
不过,发现个问题:
$ file -i sql2.sql
sql2.sql: text/plain; charset=unknown
 
看来,file 不支持 gbk 编码。

LVM 实战

2006-07-21,星期五 | 分类:Linux | 标签: | 3,122 Views

备份服务器的硬盘空间不够了,添加硬盘扩容,为了今后再扩容的方便,使用 LVM 。
 
加挂一块硬盘,并用 fdisk 进行如下分区:
# fdisk -l /dev/sdb
Device Boot         Start          End          Blocks     Id     System
/dev/sdb1                 1        2433      19543041    8e  Linux LVM
/dev/sdb2            2434        4866     19543072+   8e  Linux LVM
/dev/sdb3            4867        7299     19543072+   8e  Linux LVM
/dev/sdb4            7300        9729      19518975    8e  Linux LVM
 
习惯性的分成了四个区,其实只分一个区就行。
 
初始化 LVM :
# vgscan
 
建立 PV :
# pvcreate /dev/sdb1
# pvcreate /dev/sdb2
# pvcreate /dev/sdb3
# pvcreate /dev/sdb4
查看 PV:
# pvdisplay /dev/sdb1
 
创建 VG :
# vgcreate vga /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
查看 VG :
# vgdisplay vga
 
创建 LV :
# lvcreate -l 28899 -n vga1 vga
或者,
# lvcreate -L 112890M -n vga1 vga
-l 以 PE 为单位划分大小,-L 以 MB 为单位划分大小。
查看 LV :
# lvdisplay /dev/vga/vga1
 
格式化 LV :
# mke2fs -j -L /backup /dev/vga/vga1
 
挂载:
加入 /etc/fstab ,
LABEL=/backup           /backup                 ext3    defaults        1 2
# mount -a
 
把原来用来备份的分区 (/dev/sda5) 上的数据复制到 /backup 。
 
顺便试了试 LV 改名:
# umount /backup
# lvrename /dev/vga/vga1 /dev/vga/lv1
# lvdisplay /dev/vga/lv1
# e2label /dev/vga/lv1 /backup
# mount -a
LV 上的数据不会受到影响。
 
最后,把 /dev/sda5 也加入 VG ,以扩大容量。
# fdisk /dev/sda
把 /dev/sda5 的 Id 改为 8e ,再把 /dev/sda5 也做成 PV :
# pvcreate /dev/sda5
扩充 VG :
# vgextend vga /dev/sda5
扩充 LV :
# lvextend -l +4765 /dev/vga/lv1
扩充分区大小:
# ext2online /dev/vga/lv1
从 ext2online 这个命令的名字就可以知道,扩容是不需要 umount 的。

mtop 实时监控 MySQL

2006-07-17,星期一 | 分类:MySQL | 标签: | 3,410 Views

Requires the following perl modules:
 
    Module             Available At
    ------------     --------------------------------------------------------
    Curses              http://cpan.linuxforum.net/authors/id/G/GI/GIRAFFED
    DBI                  Distributed as Bundle::DBI: http://www.cpan.org/authors/id/TIMB
    DBD::mysql        http://www.cpan.org/modules/by-module/DBD
    Getopt::Long     (Distributed with Perl 5)
    Net::Domain      Part of libnet: http://www.cpan.org/authors/id/GBARR

# perl -e 'use Curses'
# perl -e 'use DBI'
# perl -e 'use DBD::mysql'
# perl -e 'use Getopt::Long'
# perl -e 'use Net::Domain'
 
没有输出就是模块已经安装了,有错误就是相应的模块没有安装。
可以在上面给出的地址下载相应模块的最新版本。

安装所需的 Perl 模块:
# tar zxvf Curses-x.xx.tar.gz
# cd Curses*
# perl Makefile.PL
# make
# make install
 
yum 仓库里有 perl-DBI ,所以直接 yum 安装,
# yum -y install perl-DBI
 
因为是编译安装的 MySQL ,所以需要把 lib 的路径加入 ld.so.conf ,
# vi /etc/ld.so.conf
/usr/local/mysql/lib/mysql
# ldconfig
 
虽然 yum 仓库里有 perl-DBD-MySQL ,但其依赖 mysql ,所以还是编译安装,
# tar zxvf DBD-mysql-x.xxxx.tar.gz
# cd DBD-mysql*
# perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
# make
# make install
 
安装 mtop :
# tar zxvf mtop-0.6.6.tar.gz
# cd mtop-0.6.6
# perl Makefile.PL
# make
# make install
 
添加相应的 MySQL 数据库用户:
# mysql -uroot -pPASSWORD
mysql> GRANT RELOAD,PROCESS,SUPER ON *.* TO 'mtop'@'localhost' IDENTIFIED BY 'mtop';
mysql> FLUSH PRIVILEGES;
mysql> exit
 
运行:
因为自定义了 mysql.sock 的位置,所以需要做个链接 mtop 才能运行,
# ln -s /var/run/mysqld/mysql.sock /tmp/mysql.sock
 
# mtop --dbuser=mtop --password=mtop
 
参考资料:http://mtop.sourceforge.net/

CentOS 升级到 2.6 内核 CPU 温度过高的问题

2006-07-14,星期五 | 分类:Redhat/CentOS | 标签: | 3,307 Views

CentOS 升级到 2.6 的内核后,总是出现:
CPU0: Temperature above threshold
CPU0: Running in modulated clock mode
 
确认没有超频,检查了 CPU 风扇,散热没有问题,CPU 的温度较之使用 2.4 内核的时候也没有升高。
可是,只要编译东西就会说 CPU 温度过高,CPU 占用率稍微高一些也会频繁出现上面的两行警告,让人好生心烦。
 
查询资料后得知是 2.6 内核的相应阀值过低造成了这种状况。
 
vi /etc/syslog.conf
注释掉 *.emerg 这一行
/etc/init.d/syslog restart
 
就不会出现 CPU 温度过高的警告了。

内网用户通过 Linux 网关服务器向外网发布 Web 服务

2006-07-11,星期二 | 分类:Network | 标签: | 2,863 Views

环境:ADSL 动态 IP ,内网用户通过 Linux 网关服务器 NAT 上网。
 
1. 先到 3322.org 免费注册一个动态的二级域名。
 
2. 网关服务器上
# vi /etc/ppp/ip-up
在最后加入:
/usr/local/network/setup.sh
lynx -mime_header -auth=USERNAME:PASSWORD "http://www.3322.org/dyndns/update?system=dyndns&hostname=HOST.3322.org"
 
第一个是执行 iptables 做 NAT 以及 TC 流量控制等脚本的集合。
第二个是在拨号成功时向 3322.org 提交新的 IP 地址。
 
3. 安装 Apache ,configure 的时候加上 --enable-proxy=shared
在虚拟主机配置中加上:
RewriteEngine on
RewriteRule ^/(.*)$ http://192.168.0.254/$1 [P,L]
 
注:如果有注册静态域名,做 CNAME 到 HOST.3322.org 就可以实现 IP 的自动“更新”了。
    可以配置多个虚拟主机为多部内网机器提供发布到外网的 Web 服务。