Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Umbenennen einer gesperrten Tabelle

Während Rick im Allgemeinen Recht hat, die Percona-Tools zu verwenden (siehe 1 und 2 ), ist die Antwort auf die Frage wirklich, ALTER TABLE zu verwenden . Ich dachte RENAME war nur ein Alias ​​- aber das scheint nicht der Fall zu sein .

Test scheint anzuzeigen, dass dies OK funktioniert:

CREATE TABLE foo_new (...)

-- copy data to new table, might take very long
INSERT INTO foo_new (id,created_at,modified_at)
  SELECT * FROM foo WHERE id <= 3;

LOCK TABLES foo WRITE, foo_new WRITE;

-- quickly copy the tiny rest over
INSERT INTO foo_new (id,created_at,modified_at)
  SELECT * FROM foo WHERE id > 3;

-- now switch to the new table
ALTER TABLE foo RENAME TO foo_old;
ALTER TABLE foo_new RENAME TO foo;

UNLOCK TABLES;