web-dev-qa-db-ja.com

mysql、テーブルをmyisamからndbに変更

Gents、次の方法でテーブルをmyisamからndbに変換します。

ALTER TABLE piwik_log_profiling ENGINE NDBCLUSTER;

これは次の場合に失敗します:

BLOB column 'query' can't be used in key specification with the used table type

ここで、「query」フィールドがtextからvarcharに変更されると、次のようになります。

Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys

元のテーブル:

| log_profiling_backup | CREATE TABLE `log_profiling_backup` (
`query` text NOT NULL,
`count` int(10) unsigned DEFAULT NULL,
`sum_time_ms` float DEFAULT NULL,
UNIQUE KEY `query` (`query`(100))
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
3
Clustermagnet

たぶんあなたは以下を試すことができます:

ALTER TABLE piwik_log_profiling RENAME piwik_log_profiling_old;
CREATE TABLE piwik_log_profiling SELECT * FROM piwik_log_profiling_old WHERE 1=2;
ALTER TABLE piwik_log_profiling ADD COLUMN query100 CHAR(100) NOT NULL AFTER query;
ALTER TABLE piwik_log_profiling ADD UNIQUE INDEX (query100);
ALTER TABLE piwik_log_profiling ENGINE=NDBCLUSTER;

それが今までうまくいったら、彼らはこれをします

INSERT INTO piwik_log_profiling (query)
SELECT query,LEFT(query,100),`count`,sum_time_ms
FROM piwik_log_profiling_old;

これに基づいて、クエリはWHERE句でクエリの代わりにquery100を使用する必要があります。

これがうまくいったかどうか私たち全員に知らせてください!!!

1
RolandoMySQLDBA