errno_table_on_linux

本文详细解析了Unix系统中常见的错误码及其含义,并通过实例展示了如何在编程中正确处理这些错误码,以提高程序的健壮性和用户体验。
/**
 * asm-generic/errno-base.h
 */
#define EPERM        1  /* Operation not permitted */
#define ENOENT       2  /* No such file or directory */
#define ESRCH        3  /* No such process */
#define EINTR        4  /* Interrupted system call */
#define EIO          5  /* I/O error */
#define ENXIO        6  /* No such device or address */
#define E2BIG        7  /* Argument list too long */
#define ENOEXEC      8  /* Exec format error */
#define EBADF        9  /* Bad file number */
#define ECHILD      10  /* No child processes */
#define EAGAIN      11  /* Try again */
#define ENOMEM      12  /* Out of memory */
#define EACCES      13  /* Permission denied */
#define EFAULT      14  /* Bad address */
#define ENOTBLK     15  /* Block device required */
#define EBUSY       16  /* Device or resource busy */
#define EEXIST      17  /* File exists */
#define EXDEV       18  /* Cross-device link */
#define ENODEV      19  /* No such device */
#define ENOTDIR     20  /* Not a directory */
#define EISDIR      21  /* Is a directory */
#define EINVAL      22  /* Invalid argument */
#define ENFILE      23  /* File table overflow */
#define EMFILE      24  /* Too many open files */
#define ENOTTY      25  /* Not a typewriter */
#define ETXTBSY     26  /* Text file busy */
#define EFBIG       27  /* File too large */
#define ENOSPC      28  /* No space left on device */
#define ESPIPE      29  /* Illegal seek */
#define EROFS       30  /* Read-only file system */
#define EMLINK      31  /* Too many links */
#define EPIPE       32  /* Broken pipe */
#define EDOM        33  /* Math argument out of domain of func */
#define ERANGE      34  /* Math result not representable */

/**
 * asm-generic/errno.h
 */
#define	EDEADLK		35	/* Resource deadlock would occur */
#define	ENAMETOOLONG	36	/* File name too long */
#define	ENOLCK		37	/* No record locks available */
#define	ENOSYS		38	/* Function not implemented */
#define	ENOTEMPTY	39	/* Directory not empty */
#define	ELOOP		40	/* Too many symbolic links encountered */
#define	EWOULDBLOCK	EAGAIN	/* Operation would block */
#define	ENOMSG		42	/* No message of desired type */
#define	EIDRM		43	/* Identifier removed */
#define	ECHRNG		44	/* Channel number out of range */
#define	EL2NSYNC	45	/* Level 2 not synchronized */
#define	EL3HLT		46	/* Level 3 halted */
#define	EL3RST		47	/* Level 3 reset */
#define	ELNRNG		48	/* Link number out of range */
#define	EUNATCH		49	/* Protocol driver not attached */
#define	ENOCSI		50	/* No CSI structure available */
#define	EL2HLT		51	/* Level 2 halted */
#define	EBADE		52	/* Invalid exchange */
#define	EBADR		53	/* Invalid request descriptor */
#define	EXFULL		54	/* Exchange full */
#define	ENOANO		55	/* No anode */
#define	EBADRQC		56	/* Invalid request code */
#define	EBADSLT		57	/* Invalid slot */

#define	EDEADLOCK	EDEADLK

#define	EBFONT		59	/* Bad font file format */
#define	ENOSTR		60	/* Device not a stream */
#define	ENODATA		61	/* No data available */
#define	ETIME		62	/* Timer expired */
#define	ENOSR		63	/* Out of streams resources */
#define	ENONET		64	/* Machine is not on the network */
#define	ENOPKG		65	/* Package not installed */
#define	EREMOTE		66	/* Object is remote */
#define	ENOLINK		67	/* Link has been severed */
#define	EADV		68	/* Advertise error */
#define	ESRMNT		69	/* Srmount error */
#define	ECOMM		70	/* Communication error on send */
#define	EPROTO		71	/* Protocol error */
#define	EMULTIHOP	72	/* Multihop attempted */
#define	EDOTDOT		73	/* RFS specific error */
#define	EBADMSG		74	/* Not a data message */
#define	EOVERFLOW	75	/* Value too large for defined data type */
#define	ENOTUNIQ	76	/* Name not unique on network */
#define	EBADFD		77	/* File descriptor in bad state */
#define	EREMCHG		78	/* Remote address changed */
#define	ELIBACC		79	/* Can not access a needed shared library */
#define	ELIBBAD		80	/* Accessing a corrupted shared library */
#define	ELIBSCN		81	/* .lib section in a.out corrupted */
#define	ELIBMAX		82	/* Attempting to link in too many shared libraries */
#define	ELIBEXEC	83	/* Cannot exec a shared library directly */
#define	EILSEQ		84	/* Illegal byte sequence */
#define	ERESTART	85	/* Interrupted system call should be restarted */
#define	ESTRPIPE	86	/* Streams pipe error */
#define	EUSERS		87	/* Too many users */
#define	ENOTSOCK	88	/* Socket operation on non-socket */
#define	EDESTADDRREQ	89	/* Destination address required */
#define	EMSGSIZE	90	/* Message too long */
#define	EPROTOTYPE	91	/* Protocol wrong type for socket */
#define	ENOPROTOOPT	92	/* Protocol not available */
#define	EPROTONOSUPPORT	93	/* Protocol not supported */
#define	ESOCKTNOSUPPORT	94	/* Socket type not supported */
#define	EOPNOTSUPP	95	/* Operation not supported on transport endpoint */
#define	EPFNOSUPPORT	96	/* Protocol family not supported */
#define	EAFNOSUPPORT	97	/* Address family not supported by protocol */
#define	EADDRINUSE	98	/* Address already in use */
#define	EADDRNOTAVAIL	99	/* Cannot assign requested address */
#define	ENETDOWN	100	/* Network is down */
#define	ENETUNREACH	101	/* Network is unreachable */
#define	ENETRESET	102	/* Network dropped connection because of reset */
#define	ECONNABORTED	103	/* Software caused connection abort */
#define	ECONNRESET	104	/* Connection reset by peer */
#define	ENOBUFS		105	/* No buffer space available */
#define	EISCONN		106	/* Transport endpoint is already connected */
#define	ENOTCONN	107	/* Transport endpoint is not connected */
#define	ESHUTDOWN	108	/* Cannot send after transport endpoint shutdown */
#define	ETOOMANYREFS	109	/* Too many references: cannot splice */
#define	ETIMEDOUT	110	/* Connection timed out */
#define	ECONNREFUSED	111	/* Connection refused */
#define	EHOSTDOWN	112	/* Host is down */
#define	EHOSTUNREACH	113	/* No route to host */
#define	EALREADY	114	/* Operation already in progress */
#define	EINPROGRESS	115	/* Operation now in progress */
#define	ESTALE		116	/* Stale NFS file handle */
#define	EUCLEAN		117	/* Structure needs cleaning */
#define	ENOTNAM		118	/* Not a XENIX named type file */
#define	ENAVAIL		119	/* No XENIX semaphores available */
#define	EISNAM		120	/* Is a named type file */
#define	EREMOTEIO	121	/* Remote I/O error */
#define	EDQUOT		122	/* Quota exceeded */

#define	ENOMEDIUM	123	/* No medium found */
#define	EMEDIUMTYPE	124	/* Wrong medium type */
#define	ECANCELED	125	/* Operation Canceled */
#define	ENOKEY		126	/* Required key not available */
#define	EKEYEXPIRED	127	/* Key has expired */
#define	EKEYREVOKED	128	/* Key has been revoked */
#define	EKEYREJECTED	129	/* Key was rejected by service */

/* for robust mutexes */
#define	EOWNERDEAD	130	/* Owner died */
#define	ENOTRECOVERABLE	131	/* State not recoverable */

#define ERFKILL		132	/* Operation not possible due to RF-kill */


<think>好的,用户遇到了MySQL错误1005,无法创建表elder_temperature,错误号是28。我需要先理解这两个错误码的含义。 首先,错误1005通常和创建表时的外键约束有关,比如外键引用的表不存在或者字段不匹配。不过用户提到的errno 28是系统错误,对应的是“No space left on device”,也就是磁盘空间不足。这两个错误同时出现可能意味着在尝试创建表时,由于磁盘空间不足,导致外键约束无法正确应用,从而触发1005错误。 接下来要确认用户的磁盘空间情况。用户需要检查MySQL数据目录所在的磁盘分区是否有足够的空间。可以通过命令如`df -h`来查看磁盘使用情况。如果空间不足,需要清理不必要的文件或者扩展磁盘容量。 另外,临时文件空间不足也可能导致这个问题。MySQL在操作过程中会生成临时文件,如果/tmp分区空间不够,同样会引发错误。需要检查临时目录的空间,并确保MySQL有足够的权限写入。 还有可能是InnoDB表空间满了。InnoDB有自己的表空间配置,如果innodb_data_file_path设置的空间不足,可能需要调整配置文件,增加表空间大小。 用户权限问题也可能导致错误,但errno 28更可能指向空间问题。不过,还是需要确认用户对目标目录有写入权限,避免权限不足的情况。 综合来看,主要解决步骤应该是先检查磁盘空间,包括数据目录和临时目录,清理空间或扩容。然后检查InnoDB配置,必要时调整表空间设置。如果问题依旧,再考虑外键约束的问题,比如检查外键引用的表和字段是否正确存在,名称是否一致,引擎是否支持外键等。 最后,用户可能需要运行一些SQL命令来排查外键问题,比如`SHOW ENGINE INNODB STATUS`查看详细的错误信息,或者检查外键约束的字段类型和索引是否符合要求。</think>### 解决MySQL错误1005与errno 28的步骤分析 #### 1. **错误背景分析** - **错误1005 (ER_CANT_CREATE_TABLE)**:通常与表的外键约束相关,例如引用的表不存在、字段类型不匹配或索引缺失[^1]。 - **errno 28**:系统级错误,表示磁盘空间不足(No space left on device)[^3]。 #### 2. **优先解决磁盘空间问题(errno 28)** - **检查磁盘空间**: ```bash df -h # 查看MySQL数据目录所在分区的剩余空间(如/var/lib/mysql) df -h /tmp # 检查临时目录空间 ``` 若磁盘空间不足,需清理日志文件、备份文件或扩容磁盘。 - **清理MySQL临时文件**: 删除临时目录(如`/tmp`)中无用的文件,或调整MySQL配置指向有足够空间的分区。 - **检查InnoDB表空间**: 若使用独立表空间(`innodb_file_per_table=ON`),需确保存储表数据的目录有足够空间。若使用共享表空间(`innodb_data_file_path`),可能需要扩展表空间文件[^1]。 #### 3. **排查外键约束问题(错误1005)** - **验证外键引用的表和字段**: ```sql SHOW CREATE TABLE referenced_table; -- 确认被引用的表和字段存在 ``` 确保外键字段名称、数据类型、索引与引用表完全一致。 - **检查存储引擎兼容性**: MySQL要求外键关联的表必须使用InnoDB引擎: ```sql SHOW TABLE STATUS LIKE 'referenced_table'; -- 检查Engine字段是否为InnoDB ``` - **查看详细错误日志**: ```sql SHOW ENGINE INNODB STATUS; -- 在输出中查找"LATEST FOREIGN KEY ERROR"部分 ``` #### 4. **综合解决方案** 1. **释放磁盘空间**: - 删除无关大文件或归档旧数据。 - 扩展磁盘分区或挂载新存储设备。 2. **修复外键配置**: - 确保引用表和字段存在且定义正确。 - 显式创建外键字段的索引。 - 使用一致的大小写(因Linux系统区分大小写)。 #### 5. **操作示例** ```sql -- 创建被引用的主表(确保先执行) CREATE TABLE elder_info ( elder_id INT PRIMARY KEY, name VARCHAR(50) ) ENGINE=InnoDB; -- 创建包含外键的子表 CREATE TABLE elder_temperature ( record_id INT AUTO_INCREMENT PRIMARY KEY, elder_id INT, temperature FLOAT, record_time DATETIME, FOREIGN KEY (elder_id) REFERENCES elder_info(elder_id) ); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值