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_%';
至此导入完成!
本篇文章来自<A href='http://www.soidc.net'>IDC专家网</a> 原文链接:http://www.soidc.net/articles/1213781350028/20091028/1215945672179_1.html