Saya perlu mengubah tipe data dari INT ke BIGINT dalam tabel MySQL 600GB. Kolom memiliki indeks unik. Saya mungkin baik dengan INT yang tidak ditandatangani, tetapi saya menganggap mengubah itu atau BIGINT akan menjadi rasa sakit yang sama. Mesin meja adalah InnoDB. Apa yang akan lebih mudah:
- ALTER TABEL
- Struktur penyalinan dan
INSERT INTO (SELECT *)
- Tabel dumping dan mengubah definisi tabel file dump
- Ada yang lain?
UPDATE: Seperti yang diminta, MySQL ver 5.5.15, tidak ada kunci asing dan buat tabel:
CREATE TABLE `tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`tid` bigint(20) NOT NULL,
`t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`f` tinyint(1) NOT NULL,
`i_id` bigint(20) NOT NULL,
`ir_id` int(11) NOT NULL,
`r_c` int(11) NOT NULL,
`r` tinyint(1) NOT NULL,
`e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`t` varchar(5) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user` (`user_id`,`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=1657146169 DEFAULT CHARSET=utf8
ALTER TABLE ONLINE
. Apakah Anda memiliki kunci asing yang merujuk pada kolom ini? Akan membantu jika Anda menunjukkanSHOW CREATE TABLE tablename;
hasilnya.Jawaban:
Dengan asumsi meja Anda tidak memiliki pemicu di dalamnya, Anda harus mempertimbangkan menggunakan
pt-online-schema-change
karena akan memungkinkan Anda untuk mengubah tabel tanpa menguncinya.Masih akan memakan waktu yang cukup lama mengingat ukuran meja.
Juga, dengan metode ini atau dengan
ALTER TABLE
Anda akan perlu memastikan Anda memiliki 600 GB ruang disk tambahan untuk mendukung dua salinan tabel saat sedang dibangun kembali.sumber
ALTER TABLE
akan membutuhkan waktu 24 - 96 jam untuk beroperasi. Anda bisa mendapatkan perkiraan yang lebih baik dengan menjalankan ALTER TABLE di lingkungan pengujian.Menggunakan perkona toolkit
pt-online-schema-change
akan menjadi pilihan saya pada produksi tanpa mempengaruhi penggunaannya. Ini akan menambahkan beberapa pemicu untuk mendapatkan delta dan tabel temporal yang akan berganti nama setelah ini selesai.contoh:
sumber