ERROR 126 HY000 Incorrect key file for table '/tmp/ sql 1

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

author:skate
time:2012/06/25

 

ERROR 126 (HY000): Incorrect key file for table '/tmp/#sql_1d87_0.MYI'; try to repair it

 

案例:

mysql> insert into t1 select * from t1;
^[[AQuery 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了

[mysqld]
...
tmpdir=/data/mysql
slave_load_tmpdir=/data/mysql
...

[root@localhost mysql]#  support-files/mysql.server  restart
Shutting down MySQL (Percona Server).....[  OK  ]
Starting MySQL (Percona Server)...[  OK  ]


[root@localhost mysql]# bin/mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.24-log 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> insert into t2 select * from t2;
ERROR 1046 (3D000): No database selected
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

 

这个就是我在改数据的目录时,忘记改这个变量值了。


 

----end----

 

 

 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误是由于将一个空字符串赋值给 `status` 列的整数类型字段导致的。根据错误信息和错误码,错误 1366 (HY000) 表示 "Incorrect integer value",意味着在插入或更新操作中,将无效的整数值赋值给了整数类型的列。 要解决这个问题,你可以考虑以下几个方面: 1. 检查数据源:确保数据源中的值是有效的整数值。空字符串不能直接转换为整数,你可以使用合适的条件检查或转换函数来处理空值。 2. 检查表结构:确认表结构中 `status` 列的数据类型是整数类型(如 INT、BIGINT)而非字符串类型(如 VARCHAR)。如果列的数据类型是字符串类型,那么可以将空字符串直接存储到该列中。 3. 处理空值:如果你希望将空字符串转换为整数类型的零值存储到数据库中,你可以在赋值之前进行判断和处理。例如,在赋值之前检查字符串是否为空,如果为空则将整数字段设置为零值。 下面是一个示例代码,展示了如何处理空字符串并将其转换为整数类型的零值: ```go package main import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" ) type User struct { ID int Name string Status int } func main() { db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/database") if err != nil { log.Fatal(err) } defer db.Close() user := User{ ID: 1, Name: "John", Status: 0, } // 处理空字符串 if user.Status == 0 { user.Status = 0 // 设置为零值 } // 插入数据到数据库 insertQuery := "INSERT INTO users (id, name, status) VALUES (?, ?, ?)" _, err = db.Exec(insertQuery, user.ID, user.Name, user.Status) if err != nil { log.Fatal(err) } fmt.Println("数据插入成功") } ``` 在上面的示例中,我们创建了一个 `User` 结构体,并将 `status` 字段设置为零值。在插入数据到数据库之前,我们检查 `status` 字段的值,如果为零,则将其设置为零值。然后,我们使用 `db.Exec()` 执行插入操作将数据存储到数据库中。 请根据你的实际需求和数据源来调整代码,并确保你的数据源中的值是有效的整数或为空字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值