mysql 的 Load data infile 之曲折路

10/28/2009来源:SQL安全人气:19497

MySQL 的 Load data infile 之曲折路

前因:
开发一个数据统计系统,需要分析Apache日志,在把日志Load data infile到mysql表的时候,
才发现Ubuntu所在分区的磁盘空间不足...

一,增加磁盘容量

因对PartitionMagic这款软件的比较熟悉,于是切换到WinXP下,安装了该软件,在启动PartitionMagic时提示:

----------------------------------

Init failed :Error 117
Partiton's drive latter cannot be identified

----------------------------------

这个错误在粗略的分析一下后,未果,决定放弃使用PartitionMagic

切换到 ubuntu,系统提示:

----------------------------------
grub loading stage1.5
error 17
----------------------------------

Shit!ubuntu无法启动!

还好修复得比较顺利,方法如下:

切换到 ubuntu(LiveCD)

$sudo grub
$find /boot/grub/stage1
(hd0,4)
$root (hd0,4)
$setup (hd0)

reboot即可。

期间切换到WinXP下准备删除一个分区,重启后发现WinXP居然也无法启动,可能是引导区被破坏的原因,提示大致如下:

----------------------------------
hal.dll文件丢失或损坏
----------------------------------

于是进入XP的故障恢复控制台,执行:

c:\windows> bootcfg /rebuild
os标识符输入:任意
os加载项输入:/noexecute=optin /fastdetect

exit即可。

格式化并resize分区容量

切换到 ubuntu(LiveCD)

$fdisk -l

//format sda8
$mkfs.ext2 /dev/sda8

//ext2 to ext3
$tune2fs -j /dev/sda8

// set sda8 size
$parted
(parted)PRint
resize 8 120G 140G

切换到 ubuntu

添加reboot自动挂载
$vi /etc/fstab
/dev/sda8 /mnt/d ext2 defaults 0 0
// reload mount
$mount -a
// view mounted file systems
$mount -l

二,修改mysql的datadir

$vi /etc/mysql/my.cnf
// change datadir
datadir = /mnt/d/mysql
// copy mysql datadir to new dir
$cp -R -p /var/lib/mysql /mnt/d/
$chown mysql:mysql /mnt/d/mysql

$vi /etc/apparmor.d/usr.sbin.mysqld
// 做如下修改
#/var/lib/mysql/ r,
/mnt/d/mysql/  r,
#/var/lib/mysql/** rwk,
/mnt/d/mysql/** rwk,

$/etc/init.d/apparmor restart
// initialize mysql db files
$mysql_install_db
$/etc/init.d/mysql restart


三,执行导入(Load data infile)

考虑到查询效率,我把apache的 LogFormat 改成了方便mysql导入的格式,这里就不描述了。

导入过程如下:

mysql > set global KEY_BUFFER_SIZE=256217728;
mysql > set session BULK_INSERT_BUFFER_SIZE=256217728;
mysql > alter table apache_log disable keys;

// 以上语句为优化导入速度

mysql > load data local infile '/Data/apps/apache/logs/analytics.mysite.com-access_log' into table apache_log fields terminated by ',' (fields1,fields2,fields3...);

最好是在用phpmyadmin建库时保证 MySQL connection collation(MySQL 连接校对) & 数据库编码 与数据源保持一致


如出现占用系统资源严重或是入库后乱码的情况,执行如下语句检测编码信息:

mysql>show variables like 'character\_set\_%';

至此导入完成!