Ubah MySQL DB dari MyISAM ke InnoDB

4

Jadi saya pikir saya mengalami masalah dengan komponen Joomla karena saya tidak memiliki pengaturan db untuk menggunakan mesin InnoDB. Saya pikir ini karena saya belum mengubah apa pun dalam menjalankan MySQL dan percaya MyISAM sebagai defualt. Apakah ada cara untuk memeriksa ini terlebih dahulu?

Kedua, jika apa yang saya yakini benar, apakah ada yang tahu sumber daya yang bagus / panduan untuk mengubah DB dari satu mesin ke yang lain? Saya telah menemukan beberapa tetapi cepat-cepat menunjukkan bahwa saya adalah seorang pemula SQL besar dan ini terbukti menjadi semacam baptisan api. Panduan yang saya lihat sejauh ini semuanya agak bervariasi dalam pendekatan mereka dan banyak perintah dipompa bersama sehingga agak sulit untuk mengetahui apa yang sedang terjadi. Keuntungannya adalah server ini virtual dan saya sudah mengambil banyak snapshot sehingga kesalahan tidak terlalu besar.

Saya menggunakan tumpukan Lampu dengan Ubuntu 9,10 x64, Apache 2.2.12, MySQL 5.1.37 dan PHP versi 5.2.10-2

Tim Alexander
sumber

Jawaban:

2

percaya MyISAM sebagai defualt. Apakah ada cara untuk memeriksa ini terlebih dahulu?

Ya, benar, lihat saja my.ini (atau my.cnf) dan cari myisam atau innodb atau engine. Jika tidak ada yang ditentukan, periksa di situs mysql default untuk versi mysql Anda. Anda dapat mengetahui bagaimana tabel dibuat dengan SHOW TABLE STATUSperintah, dan mencari mesin di output.

apakah ada yang tahu sumber daya / panduan yang baik untuk mengkonversi DB dari satu mesin ke yang lain?

Cara paling sederhana yang saya tahu, hanyalah mysqldump database saat ini, daripada membuka file yang dibuang dan mengganti semua myisam dengan innodb. Lalu jatuhkan database lama, buat yang baru, dan impor dari dump yang dimodifikasi.

PS: mesin berada di level tabel bukan di level database!

Patkos Csaba
sumber
membuang db dan kemudian menciptakan kembali tidak sesederhana itu. banyak intervensi mungkin diperlukan, terutama jika pengguna memiliki banyak pandangan, karena urutan rekreasi adalah faktor. saya tidak akan merekomendasikan ini sebagai solusi paling sederhana, meskipun ini adalah solusi.
tony gil
Anda juga tidak akan mendapatkan kendala dan kunci asing kembali (jika ada), karena MyISAM tidak mendukungnya.
Luka Ramishvili
6

Sebagai jawaban untuk bagian pertama dari pertanyaan Anda. Cara tercepat untuk menentukan mesin penyimpanan whoch adalah default adalah dengan mengeluarkan hal-hal berikut;

$mysql -h localhost -u user -p -e "SHOW ENGINES"

Ini akan menghasilkan daftar mesin yang didukung dengan server db yang terhubung dengan Anda diaktifkan. Yang standar akan memiliki "Dukungan DEFAULT" yang menunjukkan mesin mana yang dikonfigurasi sebagai layanan standar.

Sehubungan dengan bagian kedua dari pertanyaan Anda. Ada beberapa cara untuk melakukan ini. Cara pertama adalah menggunakan SQL, jadi Anda bisa mengeluarkan;

ALTER TABLE mytable ENGINE = InnoDB;

Ini dapat memiliki sejumlah kelemahan. Mungkin butuh beberapa saat jika meja Anda besar juga. Lihat http://dev.mysql.com/doc/refman/5.1/en/alter-table.html untuk info lebih lanjut. Tetapi jika ini metode yang cepat dan kotor, itu akan baik-baik saja.

Opsi lainnya adalah menggunakan mysqldump untuk membuang semua basis data MyISAM Anda. Anda kemudian dapat mengubah dump SQL yang dihasilkan menggunakan find find;

sed -i 's/MyISAM/INNODB/g' file.sql

Namun, seperti yang disarankan Patkos, saya hanya akan membuang sintaks buat dan kemudian membuat db baru tetapi mengatur mesin default untuk skema itu menjadi Innodb dan mengimpor kembali data

AJM
sumber