改变MySQL表给出1114表已满

时间:2015-02-11 13:49:54

标签: mysql

我正在尝试更改我的一个InnoDB表。 这是查询:

ALTER TABLE `tf5h_assets`
   ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `idx_asset_name` (`name`), ADD KEY `idx_lft_rgt` (`lft`,`rgt`), ADD KEY `idx_parent_id` (`parent_id`);

错误是:

#1114 - The table 'tf5h_assets' is full

我不会不喜欢它是如何完整的#34;当它是我从MySQL转储(结构,没有数据)文件创建的空表时。

奇怪的是,我可以这样改变它:

ALTER TABLE `tf5h_assets`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tf5h_assets`
  ADD UNIQUE KEY `idx_asset_name` (`name`);

ALTER TABLE `tf5h_assets`
  ADD KEY `idx_lft_rgt` (`lft`,`rgt`);

ALTER TABLE `tf5h_assets`
  ADD KEY `idx_parent_id` (`parent_id`);

并且它不会抛出该错误。 我究竟做错了什么? 此ALTER TABLE语句来自结构mysql转储文件。有没有办法分割em,就像我在某种程度上导出结构时所做的那样我不必手动完成它?

我googles"桌子已满#34;错误,这就是我到目前为止所做的:

1)检查磁盘空间 - 80多个可用空间

2)添加到my.cnf:

innodb_file_per_table = 1
innodb_file_format = barracuda

并重新启动mysql服务器并创建了新的db。

编辑:

我解决了我的问题,但我不知道如何为我无法从Joomla导出的数据库解决它。

事实上,phpmyadmin正在将表创建与密钥创建分开,如下所示:

CREATE TABLE IF NOT EXISTS `tf5h_assets` (
`id` int(10) unsigned NOT NULL COMMENT 'Primary Key',
`parent_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Nested set parent.',
`lft` int(11) NOT NULL DEFAULT '0' COMMENT 'Nested set lft.',
`rgt` int(11) NOT NULL DEFAULT '0' COMMENT 'Nested set rgt.',
`level` int(10) unsigned NOT NULL COMMENT 'The cached level in the nested tree.',
`name` varchar(50) NOT NULL COMMENT 'The unique name for the asset.\n',
`title` varchar(100) NOT NULL COMMENT 'The descriptive title for the asset.',
`rules` varchar(5120) NOT NULL COMMENT 'JSON encoded access control.'
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=382 ;

而不是以后:

ALTER TABLE `tf5h_assets`
  ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `idx_asset_name` (`name`), ADD KEY `idx_lft_rgt` (`lft`,`rgt`), ADD KEY `idx_parent_id` (`parent_id`);

以及后来:

ALTER TABLE `tf5h_assets`
  MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',AUTO_INCREMENT=382;

我设法通过使用Joomla的备份/恢复组件(它的Joomla站点)启动并运行我的数据库。我打开了组件创建的MySQL转储,这就是我在那里找到的:

CREATE TABLE `#__assets` 
(`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',   
  `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Nested set parent.',   
  `lft` int(11) NOT NULL DEFAULT '0' COMMENT 'Nested set lft.',   
  `rgt` int(11) NOT NULL DEFAULT '0' COMMENT 'Nested set rgt.',   
  `level` int(10) unsigned NOT NULL COMMENT 'The cached level in the nested tree.',   
  `name` varchar(50) NOT NULL COMMENT 'The unique name for the asset.\n',   
  `title` varchar(100) NOT NULL COMMENT 'The descriptive title for the asset.',  
   `rules` varchar(5120) NOT NULL COMMENT 'JSON encoded access control.',   
   PRIMARY KEY (`id`),   
   UNIQUE KEY `idx_asset_name` (`name`),   
   KEY `idx_lft_rgt` (`lft`,`rgt`),   
   KEY `idx_parent_id` (`parent_id`) ) 
ENGINE=InnoDB AUTO_INCREMENT=382 DEFAULT CHARSET=utf8;

整个过程在一次运行中执行,并且工作正常。

现在,我很幸运,它是Joomla数据库。但是,当数据库不是Joomla的时候我会怎么做?我不知道。有没有办法改变phpmyadmin存储转储的方式?终端访问mysql会创建不同的mysql转储,它会一次创建数据库,而不是使用" ALTER"?

1 个答案:

答案 0 :(得分:0)

好的,所以我仍然不知道是什么造成了这个问题,除了它与phpmyadmin如何导出数据库并再次重新导入数据有关。

正如我在原帖中所假设的那样,我迟早会遇到无法通过Joomla组件导出的数据库遇到这个问题,它发生了......好吧......早点。

无论如何,如果你有对mysql服务器的控制台访问权限,你可以通过简单的mysql转储处理这个: mysqldump -p NameOfDatabase> NameOfDumpFile.sql

从服务器下载转储文件,您可以通过phpmyadmin导入它。它就像一个魅力。 mysqldump在一个查询中创建数据库,因此分配密钥等没有问题。