2015-02-11 119 views
1

我正在嘗試更改我的InnoDB表中的一個。 這是查詢:更改MySQL表給出1114表已滿

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 

我不undesrtand是怎麼回事「滿」時,它的空表我從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轉儲文件。有沒有辦法像我以某種方式分裂時,結構導出,所以我不必手動做呢?

我谷歌「表已滿」的錯誤,這是我做了什麼至今:檢查磁盤空間

1) - 自由空間80+演出

2)添加到my.cnf文件:

innodb_file_per_table = 1 
innodb_file_format = barracuda 

並重新啓動mysql服務器並創建新的數據庫。

編輯:

我解決我的問題,但我不知道如何解決它的數據庫,我將無法從的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

我並不在意,但是你寫得很好,我不得不贊成:P – vivoconunxino 2015-02-11 15:00:31

回答

0

好的,我還是不知道是什麼造成了這個問題,除了它與phpmyadmin如何導出數據庫並重新導入它們有關。

而且正如我在我原來的文章中所說的那樣,我會遇到這個問題,數據庫無法通過Joomla組件遲早導出,它發生了......很快......很快。

無論如何,如果你有你的MySQL服務器控制檯訪問,您可以通過簡單的MySQL傾銷應對這樣的:從服務器 的mysqldump -p NameOfDatabase> NameOfDumpFile.sql

下載轉儲文件,您可以將其導入槽的phpmyadmin 。它像一個魅力。 mysqldump在一個查詢中創建數據庫,因此分配密鑰等沒有問題。