修改MySQL表会导致1114表已满

修改MySQL表会导致1114表已满,mysql,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 当它是我

我正在尝试更改我的一个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
当它是我从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`);
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语句来自结构mysql转储文件。有没有一种方法可以像我在导出结构时那样拆分em,这样我就不必手动拆分了

我发现谷歌的表格完全错误,这就是我目前所做的:

1已检查磁盘空间-80多Gig的可用空间

2添加到my.cnf:

innodb_file_per_table = 1
innodb_file_format = barracuda
重新启动mysql服务器并创建新的数据库

编辑:

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

事实是,phpmyadmin将表创建与键创建分开,如下所示:

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`);
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;
后来:

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?

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

正如我在最初的帖子中假设的那样,我迟早会遇到无法通过Joomla组件导出的数据库的问题,它发生了……嗯……更早

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


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

我真的不在乎,但你写得太好了,我不得不向上投票:p