我正在尝试更改我的一个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"?
答案 0 :(得分:0)
好的,所以我仍然不知道是什么造成了这个问题,除了它与phpmyadmin如何导出数据库并再次重新导入数据有关。
正如我在原帖中所假设的那样,我迟早会遇到无法通过Joomla组件导出的数据库遇到这个问题,它发生了......好吧......早点。
无论如何,如果你有对mysql服务器的控制台访问权限,你可以通过简单的mysql转储处理这个: mysqldump -p NameOfDatabase> NameOfDumpFile.sql
从服务器下载转储文件,您可以通过phpmyadmin导入它。它就像一个魅力。 mysqldump在一个查询中创建数据库,因此分配密钥等没有问题。