Bagaimana saya bisa memindahkan tabel MySQL dari satu server fisik ke yang lain?
Seperti skenario persis ini: Saya memiliki server MySQL yang menggunakan tabel innodb dan berukuran sekitar 20GB.
Saya ingin memindahkannya ke server baru, apa cara paling efisien untuk melakukan ini?
Jawaban:
Cara favorit saya adalah menyalurkan perintah sqldump ke perintah sql. Anda dapat melakukan semua database atau yang spesifik. Jadi, misalnya,
Anda dapat melakukan semua database dengan
Satu-satunya masalah adalah ketika database terlalu besar dan pipa runtuh. Dalam hal ini, Anda dapat melakukan table by table atau metode lain yang disebutkan di bawah ini.
sumber
netcat
.Baru-baru ini saya memindahkan database 30GB dengan stragegy berikut:
Server Lama
~/mysqldata/*
)tar -czvf mysqldata.tar.gz ~/mysqldata
)Server Baru
tar -xzvf mysqldata.tar.gz
)sumber
Menurut Panduan Studi Sertifikasi MySQL 5.0 , Bab 32 Bagian 32.3.4, Halaman 456.457 menguraikan Ketentuan untuk Portabilitas Biner yang menghasilkan hal-hal berikut:
Ada dua cara utama berdasarkan mesin penyimpanan untuk memindahkan masing-masing tabel.
Untuk contoh yang diberikan, kita akan mengira sebagai berikut:
Tabel MyISAM
Jika mydb.mytable menggunakan mesin penyimpanan MyISAM, tabel secara fisik akan dimanifestasikan sebagai tiga file terpisah
.Frm berisi struktur tabel .MYD berisi data tabel
.MYI berisi halaman indeks tabel
File-file ini digunakan secara interdependen untuk mewakili tabel dari sudut pandang logis di mysql. Karena file ini tidak memiliki kaitan logis lebih lanjut melampirkan ke dalamnya, migrasi tabel dari satu server DB ke yang lain. Anda bahkan dapat melakukan ini dari server Windows ke Linux Server atau MacOS. Tentu saja, Anda bisa mematikan mysql dan menyalin 3 file tabel. Anda dapat menjalankan yang berikut ini:
dalam satu sesi ssh untuk menahan meja sebagai hanya baca dan tahan kunci selama 24 jam. Satu detik kemudian, lakukan copy di sesi ssh lain. Kemudian bunuh sesi mysql dengan kunci 24 jam. Anda tidak perlu menunggu 24 jam.
Tabel InnoDB
Berdasarkan kutipan di atas dari buku Sertifikasi, ada banyak faktor yang mengatur cara membuat cadangan tabel InnoDB tertentu. Demi kesederhanaan, kejelasan, dan singkatnya, cukup lakukan mysqldump dari tabel yang diinginkan dengan menggunakan parameter --satu-transaksi transaksi untuk mendapatkan titik titik-waktu pembuangan yang sempurna dari tabel. Tidak perlu membuat sendiri dengan semantik InnoDB jika Anda hanya ingin satu meja. Anda dapat memuat ulang dumpfile itu ke server MySQL mana pun yang Anda pilih.
Karena dua pertanyaan digabung di sini (jcolebrand): EDIT
Jika Anda lebih dari bersedia untuk hidup dengan kinerja DB yang lambat, Anda dapat melakukan serangkaian rsyncs dari server lama (ServerA) ke server baru (ServerB) bahkan ketika mysql masih berjalan di ServerA.
Langkah 01) instal versi mysql yang sama di ServerB yang dimiliki ServerA
Langkah 02) Pada ServerA, jalankan
SET GLOBAL innodb_max_dirty_pages_pct = 0;
dari mysql dan sekitar 10 menit (Ini membersihkan halaman kotor dari Pool Buffer InnoDB. Ini juga membantu melakukan shutdown mysql lebih cepat) Jika database Anda adalah semua MyISAM, Anda dapat melewati langkah ini.Langkah 03)
rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql
Langkah 04) Ulangi Langkah 03 sampai rsync membutuhkan waktu kurang dari 1 menit
Langkah 05)
service mysql stop
di ServerALangkah 06) Lakukan satu lagi rsync
Langkah 07)
scp ServerA:/etc/my.cnf ServerB:/etc/
Langkah 08)
service mysql start
di ServerBLangkah 08)
service mysql start
di ServerA (opsional)Cobalah !!!
CAVEAT
Anda dapat membuat budak replikasi seperti ini. Hanya ingat untuk menetapkan server-id secara eksplisit di master /etc/my.cnf dan nomor yang berbeda untuk server-id di slave /etc/my.cnf
sumber
Anda bahkan tidak memerlukan mysqldump jika Anda memindahkan seluruh skema basis data, dan Anda bersedia menghentikan basis data pertama (jadi konsisten ketika dipindahkan)
Saya tidak ingat apakah mysqldump menangani pengguna dan izin, atau hanya data ... tetapi meskipun demikian, ini jauh lebih cepat daripada melakukan dump & menjalankannya. Saya hanya akan menggunakannya jika saya perlu membuang database mysql untuk kemudian memasukkan kembali ke RDBMS lain, jika saya perlu mengubah opsi penyimpanan (innodb vs myisam), atau mungkin jika saya mengubah versins mysql utama (tetapi Saya pikir saya sudah melakukan ini antara 4 & 5, meskipun)
sumber
--all-databases
dump skema mysql. Memulai mysql di mesin berikutnya memunculkan izin asalkan Anda mentransfer folder data ke mesin lain dengan rilis utama MySQL yang sama. (MySQL 5.5.x ke MySQL 5.5.x, MySQL 5.1.x ke MySQL 5.1.x, MySQL 5.0.x ke MySQL 5.0.x)mysqldump
menangani pengguna dan izin, karena ini disimpan dalammysql
skema.Jika Anda hanya ingin memindahkan tabel tertentu, cobalah:
mysqldump -u username -ppassword databasename tablename > databasename.tablename.sql
Anda bisa menentukan lebih banyak nama tabel di atas, dalam perintah yang sama. Setelah perintah selesai, pindahkan file databasename.tablename.sql ke server lain dan kemudian kembalikan menggunakan:
Perhatikan bahwa file .sql kembali dibuat menggunakan program mysqldump , dan pemulihan dilakukan langsung ke mysql .
sumber
Mungkin ada kemungkinan ini di mana Anda memindahkan file-file database aktual (untuk instal saya file-file tersebut terletak di / var / lib / mysql), tapi saya tidak benar-benar tahu bagaimana ia akan bertindak / bekerja.
sumber
Anda harus beristirahat. Ini akan memakan waktu cukup lama tergantung pada kecepatan jaringan Anda. Saya akan menganggap Anda menjalankan MySQL di Linux / Unix. Inilah proses yang saya gunakan:
Kemudian lanjutkan seperti biasa mengatur MySQL lokal.
* Catatan: Anda juga dapat menggunakan parameter -c dengan rsync untuk menambahkan checksum ke transfer, namun ini akan menjadi sloooow tergantung pada kecepatan CPU.
sumber
Saya dapat mengonfirmasi bahwa metode DTest juga berfungsi untuk menyalin antara ubuntu dan osx.
Untuk menyalin semua basis data tanpa harus melakukan dumping atau yang serupa:
Pastikan Anda memiliki mysql bersih dari mysql (instal dmg yang diunduh dari mysql http://cdn.mysql.com/Downloads/MySQL-5.1/mysql-5.1.63-osx10.6-x86_64.dmg ), itu (SANGAT SANGAT PENTING) belum pernah dijalankan.
Salin isi / var / lib / mysql / folder dari mesin ubuntu di atas / usr / local / mysql / data / content pada mac. Untuk mendapatkan akses untuk mendapatkan folder di mesin ubuntu saya harus menggunakan sudo yaitu:
Saya menyalin folder menggunakan scp.
Sebelum Anda mulai mengambil salinan folder mysql di mac untuk memastikan Anda tidak mengacaukan apa pun.
Setelah menyalin folder, lakukan hal berikut pada mesin mac:
Mulai server mysql untuk pertama kalinya (dari panel preferensi di bawah System Preferences-> mysql). Semua pengguna dan basis data sekarang harus diatur dengan benar.
Ini bekerja dengan mysql 5.1.61 di ubuntu 64 bit 11.10 dan mysql 5.1.63 di osx lion (macbook pro).
sumber
Saya pikir semua jawaban sebelumnya mungkin bekerja dengan baik, tetapi jangan benar-benar mengatasi masalah pengaturan nama database selama transfer.
Beginilah cara saya melakukannya dengan bash:
Anda mungkin lebih baik menggunakan
rsync
daripadascp
, dan tidak memampatkan file jika Anda sering melakukannya.Di server sumber saya:
Di server tujuan saya:
Di kedua mesin untuk melihat kemajuan:
Ini semua menganggap Anda memiliki file konfigurasi MySQL di direktori home Anda di kedua mesin dan mengatur izin:
sumber
apakah Anda memindahkannya ke server mysql db lain? jika demikian gunakan, lakukan ekspor di atasnya
sumber
Metode linux umum:
edit datadir (dan soket) untuk mysqld dan mysqld_safe (jika ada) untuk menunjuk ke lokasi baru, lalu
Saya memposting ini karena sepertinya tidak ada yang hanya daftar langkah paling sedikit untuk melakukan ini dan saya merasa ini adalah cara paling sederhana secara pribadi.
sumber
Mungkin ini cara yang lebih baik untuk melakukannya:
Versi 1 : menyalin file data (hanya MYISAM)
Versi 2 : mysqldump
Versi 3 : master / slave + mysqldump / file-copy
naskah:
PS:
untuk menyalin tabel kecil gunakan:
sumber
Saya akan menyarankan dua langkah sederhana untuk mentransfer seluruh database dari satu server ke yang lain.
Langkah 1 : Lakukan pencadangan penuh database di server sumber menggunakan mysqldump .
Langkah 2 : Anda dapat menggunakan perintah rsync untuk mentransfer seluruh database ke server tujuan.
sumber