mysql 的 Load data infile 之曲折路
2024-07-24 12:58:33
供稿:網友
 
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/_%';
至此導入完成!