Kami memiliki basis data yang cukup kecil yang ingin kami konversi dari MyISAM ke InnoDB. Menjadi noobs basis data, kami baru saja mengkonversi (menggunakan tabel alter) bahkan tanpa menurunkan situs.
Sekarang setelah konversi selesai, banyak baris yang terputus-putus tampaknya hilang. Apakah ini mungkin karena operasi selama konversi? Atau apakah masalahnya di tempat lain?
Jawaban:
Melakukan ALTER untuk mengubah mesin penyimpanan tidak akan membuat baris menghilang. Namun, izinkan saya menawarkan beberapa saran karena Anda mengatakan Anda 'noobs basis data' dalam pertanyaan Anda.
Saat memodifikasi skema yang ada atau melakukan apa pun yang dapat memengaruhi data, berikut adalah beberapa saran dasar:
Mungkin ada banyak lagi yang bisa saya bahas, tetapi hal di atas akan memberi Anda opsi ketika ada masalah.
Sejauh data / baris Anda hilang, tidak ada cara untuk mengetahui dengan snapshot sebelum / sesudah "untuk membandingkan. Anda dapat membandingkan dengan cadangan terbaru Anda untuk setidaknya memverifikasi sebanyak itu.
sumber
Salah satu cara terbaik untuk mengonversi MyISAM ke InnoDB tanpa banyak waktu henti hanya memiliki satu prasyarat: Gunakan Replication Slave.
Berikut ini adalah pandangan sekilas dari rencana tersebut
Kedengarannya sederhana? Ada banyak detail di balik ini.
Buat Replication Master / Slave Setup
Ada cara yang cerdik untuk membuat Budak tanpa banyak gangguan pada Master. Saya menulis dua posting:
Daripada merinci cara menggunakan rsync, harap baca dua posting itu.
Konversikan setiap tabel MyISAM pada slave ke InnoDB
Pada DB Slave, Anda dapat Pernyataan SQL berikut:
Untuk MySQL 5.5:
Versi untuk MySQL sebelum MySQL 5.5
Menggunakan output dari kueri, Anda memiliki skrip konversi untuk budak.
Anda harus meletakkan dua baris ini di bagian atas skrip:
Script pertama-tama akan menonaktifkan logging biner (jika Anda mengkonfigurasi slave untuk memiliki log biner), menghentikan replikasi, dan mengonversi setiap tabel MyISAM ke InnoDB.
Berikut ini cara membuat skrip itu dan menjalankannya:
Arahkan aplikasi Anda ke Budak
Lakukan kueri SELECT dari Slave. Jika Anda puas dengan konten data pada Slave, jangan ragu untuk mengarahkan aplikasi Anda ke slave sebagai berikut:
SHOW SLAVE STATUS\G
dan pastikan Seconds_Behind_Master adalah 0service mysql stop
(Downtime dimulai)Jika Anda sampai pada titik ini tanpa cedera, SELAMAT !!!
BONUS TAMBAHAN : Jika Anda mengatur Master / Master Replication (alias Circular Replication) alih-alih Master / Slave, Anda dapat melakukan ini sebagai gantinya:
SHOW SLAVE STATUS\G
dan pastikan Seconds_Behind_Master adalah 0STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='';
Apa yang sekarang Anda miliki adalah Master / Slave secara terbalik. Master Baru memiliki data InnoDB dan Master lama sekarang menjadi budak dengan data MyISAM. Jika Anda membagi baca dan tulis, baca dapat pergi dari Slave (membaca lebih cepat dari MyISAM daripada InnoDB) dan menulis pergi ke Master (dukungan transaksional untuk InnoDB). Seperti Hannah Montana bernyanyi, Anda mendapatkan yang terbaik dari kedua dunia (Ya, saya punya dua anak perempuan yang suka pertunjukan) !!!
BONUS TAMBAH LAIN : Karena Master sekarang InnoDB, Anda dapat melakukan mysqldump dari Master tanpa downtime dan tanpa mengganggu transaksi. Hanya kekurangannya adalah meningkatkan CPU dan disk I / O. Oleh karena itu Anda bisa ke mysqldump struktur tabel hanya pada Master (InnoDB) dan mysqldump data hanya pada slave (dump tersebut tidak akan memiliki referensi ke InnoDB atau MyISAM. Itu hanya akan menjadi data) ditambah mysqldump dari struktur tabel untuk slave memiliki tata letak MyISAM.
Kemungkinan dapat berlanjut karena pengaturan baru ini ...
UPDATE 2011-08-27 19:50 EDT
Permintaan maaf saya. Saya tidak sepenuhnya membaca pertanyaan itu. Anda sudah melakukan konversi .
Hanya jika Anda sudah mengaktifkan pencatatan biner , dan Anda memiliki cadangan sebelumnya, Anda bisa
service mysql stop
service mysql start --datadir=/var/lib/mysql2
Ini harus menangkap semua yang telah direkam dan konversi harus mulai. Sekali lagi, ini semua Anda harus sudah mengaktifkan pencatatan biner sebelum pencadangan terakhir . Kalau tidak, belasungkawa saya.
sumber