mysql 插入大数据时,出现: ERROR 126 (HY000): Incorrect key file for table ‘/tmp/#sql_2005_0.MYI’; try to repair it
案例:
mysql> insert into t1 select * from t1; Query OK, 24576 rows affected (0.44 sec) Records: 24576 Duplicates: 0 Warnings: 0 mysql> insert into t1 select * from t1; Query OK, 49152 rows affected (1.90 sec) Records: 49152 Duplicates: 0 Warnings: 0 mysql> insert into t1 select * from t1; ERROR 126 (HY000): Incorrect key file for table ‘/tmp/#sql_1d87_0.MYI’; try to repair it
从上面的情况看,好似空间的问题,因为前几次insert都成功了,
查看磁盘空间如下:
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 5.3G 5.0G 50M 100% /
/dev/sda1 99M 12M 83M 13% /boot
tmpfs 125M 0 125M 0% /dev/shm
/dev/sdb1 7.7G 183M 7.2G 3% /data
在查看mysql数据目录情况
mysql> show variables like '%dir%'; +—————————————–+————————————+ | Variable_name | Value | +—————————————–+————————————+ | basedir | /usr/local/mysql | | binlog_direct_non_transactional_updates | OFF | | character_sets_dir | /usr/local/mysql/share/charsets/ | | datadir | /usr/local/mysql/data/ | | innodb_data_home_dir | /data/mysql/data | | innodb_log_group_home_dir | /data/mysql/data | | innodb_max_dirty_pages_pct | 75 | | lc_messages_dir | /usr/local/mysql/share/ | | plugin_dir | /usr/local/mysql/lib/mysql/plugin/ | | slave_load_tmpdir | /tmp | | tmpdir | /tmp | +—————————————–+————————————+ 11 rows in set (0.01 sec)
从上面看确实是空间满了,然后调整变量“tmpdir”和“slave_load_tmpdir”,指定一个比较大的目录,然后重启mysql服务,结果就ok了
具体方法:
vim /etc/my.cnf 添加如下:
[mysqld] ... tmpdir=/data/mysql #新添加 slave_load_tmpdir=/data/mysql #新添加
[root@localhost ~]# /etc/init.d/mysqld restart Shutting down MySQL (Percona Server)…..[ OK ] Starting MySQL (Percona Server)…[ OK ] [root@localhost ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 116 Server version: 5.5.27-ndb-7.2.8 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. mysql> use test; Database changed mysql> insert into t2 select * from t2; Query OK, 98304 rows affected (4.48 sec) Records: 98304 Duplicates: 0 Warnings: 0
OK 大功告成!