Tôi có một cơ sở dữ liệu MySQL được gọi camera_main_live
, mà tôi quản trị bằng Adminer . Đó là, tất cả sự xuất hiện, trống rỗng. Vì vậy, khi tôi muốn thêm một số nội dung, tôi bắt đầu bằng cách chạy tập lệnh này (với Quản trị viên được đặt thành dừng do lỗi):
DROP TABLE IF EXISTS `Addresses`;
CREATE TABLE `Addresses` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`UserId` int(10) unsigned NOT NULL,
`FirstName` char(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`LastName` char(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`Address` char(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`Street` char(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`Town` char(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`State` char(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`Code` char(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`Country` char(50) COLLATE utf8_unicode_ci DEFAULT 'Ireland',
`Billing` tinyint(3) unsigned DEFAULT '0',
`Shipping` tinyint(3) unsigned DEFAULT '0',
PRIMARY KEY (`Id`),
KEY `IndexUserId` (`UserId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=FIXED;
Lỗi trong truy vấn (1813): Không gian bảng cho bảng '`camera_main_live`.`Addresses`' tồn tại. Vui lòng KHÁM PHÁ không gian bảng trước khi nhập.
Được rồi, chúng ta hãy cố gắng để làm rõ điều đó.
ALTER TABLE `Addresses` DROP TABLESPACE;
Lỗi trong truy vấn (1146): Bảng 'camera_main_live.Addresses' không tồn tại
Chúng tôi sẽ xuất hiện ở một bế tắc.
Tại thời điểm này, chúng tôi từ bỏ các lệnh SQL và thử một cái gì đó khác nhau:
root@Web-Dev-HP-ProDesk:/var/lib/mysql/camera_main_live# ll
total 76
drwx------ 2 mysql mysql 4096 Jun 23 14:44 ./
drwx------ 13 mysql mysql 4096 Jun 23 11:12 ../
-rw-rw---- 1 mysql mysql 65536 Jun 10 14:09 Addresses.ibd
-rw-rw---- 1 mysql mysql 61 Jun 16 12:43 db.opt
À, vậy là có vấn đề!
root@Web-Dev-HP-ProDesk:/var/lib/mysql/camera_main_live# rm Addresses.ibd
root@Web-Dev-HP-ProDesk:/var/lib/mysql/camera_main_live# ll
total 12
drwx------ 2 mysql mysql 4096 Jun 23 14:48 ./
drwx------ 13 mysql mysql 4096 Jun 23 11:12 ../
-rw-rw---- 1 mysql mysql 61 Jun 16 12:43 db.opt
Nhưng không! Các CREATE TABLE
lệnh ném một lỗi giống hệt nhau. Và Addresses.ibd
được tái tạo. Hãy thử một cái gì đó quyết liệt hơn.
root@Web-Dev-HP-ProDesk:/var/lib/mysql/camera_main_live# cd ..
root@Web-Dev-HP-ProDesk:/var/lib/mysql# rm -r camera_main_live/
Và sau đó,
CREATE DATABASE `camera_main_live` COLLATE 'utf8_unicode_ci';
Cơ sở dữ liệu hoàn toàn mới. Nó phải sạch sẽ và trống rỗng, phải không? Không. Không. Tôi lại gặp lỗi tương tự: không gian bảng vẫn tồn tại. Nó nằm ở đâu, và làm thế nào tôi có thể thoát khỏi nó?
# mysql --version
mysql Ver 14.14 Distrib 5.6.24, for debian-linux-gnu (x86_64) using EditLine wrapper
# uname --all
Linux Web-Dev-HP-ProDesk 3.19.0-21-generic #21-Ubuntu SMP Sun Jun 14 18:31:11 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 15.04
Release: 15.04
Codename: vivid
Tôi đã thấy điều này trên một vài cơ sở dữ liệu cục bộ khác nhau: mỗi bảng khác nhau. Cho đến hôm nay, camera_main_live
dường như đã tự sửa, điều này thậm chí còn khó hiểu hơn. Nhưng vấn đề vẫn tồn tại ở nơi khác. Trên cơ sở dữ liệu test
, ví dụ,
CREATE TABLE `ProductsRelatedTypes` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Position` int(11) NOT NULL,
`Title` char(100) COLLATE utf8_unicode_ci NOT NULL,
`Alert` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Lỗi trong truy vấn (1813): Không gian bảng cho bảng '`test`.` ProductsRelatedTypes`' tồn tại. Vui lòng KHÁM PHÁ không gian bảng trước khi nhập.
DESC `ProductsRelatedTypes`
Lỗi trong truy vấn (1146): Bảng 'test. ProductsRelatedTypes' không tồn tại
SELECT * FROM `ProductsRelatedTypes`
Lỗi trong truy vấn (1146): Bảng 'test. ProductsRelatedTypes' không tồn tại
SHOW TABLES LIKE "ProductsRelatedTypes"
Không có hàng.
root@Web-Dev-HP-ProDesk:/var/lib/mysql/test# ll | grep Related
-rw-rw---- 1 mysql mysql 8610 Jun 29 15:06 ProductsRelated.frm
-rw-rw---- 1 mysql mysql 0 Jun 29 15:06 ProductsRelated.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 29 15:06 ProductsRelated.MYI
-rw-rw---- 1 mysql mysql 65536 Jun 29 11:12 ProductsRelatedTypes.ibd
root@Web-Dev-HP-ProDesk:/var/lib/mysql/test# rm ProductsRelatedTypes.ibd
CREATE TABLE `ProductsRelatedTypes` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Position` int(11) NOT NULL,
`Title` char(100) COLLATE utf8_unicode_ci NOT NULL,
`Alert` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Lỗi trong truy vấn (1050): Bảng '`test`.` ProductsRelatedTypes`' đã tồn tại
Huh?
DESC `ProductsRelatedTypes`
Lỗi trong truy vấn (1146): Bảng 'test. ProductsRelatedTypes' không tồn tại
SELECT * FROM `ProductsRelatedTypes`
Lỗi trong truy vấn (1146): Bảng 'test. ProductsRelatedTypes' không tồn tại
SHOW TABLES LIKE "ProductsRelatedTypes"
Không có hàng.
root@Web-Dev-HP-ProDesk:/var/lib/mysql/test# ll | grep Related
-rw-rw---- 1 mysql mysql 8610 Jun 29 15:06 ProductsRelated.frm
-rw-rw---- 1 mysql mysql 0 Jun 29 15:06 ProductsRelated.MYD
-rw-rw---- 1 mysql mysql 1024 Jun 29 15:06 ProductsRelated.MYI
-rw-rw---- 1 mysql mysql 65536 Jun 29 15:13 ProductsRelatedTypes.ibd
Vì vậy, khi .ibd
tệp tồn tại, tôi được bảo rằng không gian bảng đã tồn tại. Khi tôi loại bỏ điều đó, tôi được thông báo rằng bảng đã tồn tại, mặc dù rõ ràng là không có. Màu tôi bối rối.
Truy vấn information_schema
, tôi nhận được thông tin này:
mysql> SELECT * FROM `INNODB_SYS_TABLES` WHERE `Name` LIKE "%Address%";
+----------+--------------------------------------+------+--------+-------+-------------+------------+---------------+
| TABLE_ID | NAME | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE |
+----------+--------------------------------------+------+--------+-------+-------------+------------+---------------+
| 2826 | camera_main_live2/Addresses | 1 | 15 | 2812 | Antelope | Compact | 0 |
| 3789 | ronayne_mytools_main_live2/Addresses | 1 | 16 | 3775 | Antelope | Compact | 0 |
| 1312 | test/Addresses | 1 | 15 | 1298 | Antelope | Compact | 0 |
+----------+--------------------------------------+------+--------+-------+-------------+------------+---------------+
3 rows in set (0.01 sec)
mysql> SELECT * FROM `INNODB_SYS_TABLESPACES` WHERE `Name` LIKE "%Address%";
+-------+--------------------------------------+------+-------------+----------------------+-----------+---------------+
| SPACE | NAME | FLAG | FILE_FORMAT | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE |
+-------+--------------------------------------+------+-------------+----------------------+-----------+---------------+
| 1298 | test/Addresses | 0 | Antelope | Compact or Redundant | 16384 | 0 |
| 2812 | camera_main_live2/Addresses | 0 | Antelope | Compact or Redundant | 16384 | 0 |
| 3775 | ronayne_mytools_main_live2/Addresses | 0 | Antelope | Compact or Redundant | 16384 | 0 |
+-------+--------------------------------------+------+-------------+----------------------+-----------+---------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM `TABLESPACES`;
Empty set (0.00 sec)
Không ai trong số này có bất kỳ dấu hiệu nào camera_main_live.Addresses
tồn tại. Bất kỳ truy vấn nào đều information_schema.TABLES
thất bại:
Lỗi trong truy vấn (1018): Không thể đọc thư mục của '.' (errno: 24 - Quá nhiều tệp đang mở)
Bây giờ, sau khi khởi động lại máy tính của tôi,
mysql> SHOW STATUS LIKE 'open_%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Open_files | 61 |
| Open_streams | 0 |
| Open_table_definitions | 90 |
| Open_tables | 84 |
| Opened_files | 191 |
| Opened_table_definitions | 0 |
| Opened_tables | 0 |
+--------------------------+-------+
7 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE "table_open_cache";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| table_open_cache | 431 |
+------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE "innodb_open_files";
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| innodb_open_files | 431 |
+-------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE "open_files_limit";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 1024 |
+------------------+-------+
1 row in set (0.01 sec)
Đang cố gắng tạo bảng từ dấu nhắc lệnh:
mysql> CREATE TABLE `Addresses` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `UserId` int(10) unsigned NOT NULL, `FirstName` char(30) COLLATE utf8_unicode_ci DEFAULT NULL, `LastName` char(30) COLLATE utf8_unicode_ci DEFAULT NULL, `Address` char(30) COLLATE utf8_unicode_ci DEFAULT NULL, `Street` char(30) COLLATE utf8_unicode_ci DEFAULT NULL, `Town` char(30) COLLATE utf8_unicode_ci DEFAULT NULL, `State` char(30) COLLATE utf8_unicode_ci DEFAULT NULL, `Code` char(30) COLLATE utf8_unicode_ci DEFAULT NULL, `Country` char(50) COLLATE utf8_unicode_ci DEFAULT 'Ireland', `Billing` tinyint(3) unsigned DEFAULT '0', `Shipping` tinyint(3) unsigned DEFAULT '0', PRIMARY KEY (`Id`), KEY `IndexUserId` (`UserId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=FIXED;
ERROR 1813 (HY000): Tablespace for table '`test`.`Addresses`' exists. Please DISCARD the tablespace before IMPORT.
mysql> SHOW WARNINGS; +---------+------+------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------------------------+
| Warning | 1478 | InnoDB: assuming ROW_FORMAT=COMPACT. |
| Error | 1813 | Tablespace for table '`test`.`Addresses`' exists. Please DISCARD the tablespace before IMPORT. |
| Error | 1030 | Got error 184 from storage engine |
+---------+------+------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
information_schema
cơ sở dữ liệu ... bạn có thể đăng kết quả ở đây không? Đối với các bảng Ví dụ INNODB_SYS_TABLES
, TABLES
,TABLESPACES
camera_main_live
đã tự sửa. Tuy nhiên, khi tôi thử chạy lại truy vấn ban đầu đó, nó đã bỏ bảng, như mong đợi, nhưng không thể tạo lại nó. Vì vậy, rõ ràng camera_main_live
đã phá vỡ một lần nữa. Trời ạ! Dù sao, thông tin bạn yêu cầu information_schema
hiện đang được đưa ra.
ibd
tệp hoặc thư mục, quy trình mysql vẫn mở, vì vậy không có gì thay đổi ... khi sau đó mysql đóng tệp xử lý đó, nó sẽ "tự sửa" vì lần mở tiếp theo, tệp / dir không có ở đó.