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:
Portabilitas biner adalah penting jika Anda ingin mengambil cadangan biner yang dibuat pada satu mesin dan menggunakannya pada mesin lain yang memiliki arsitektur yang berbeda. Misalnya, menggunakan cadangan biner adalah salah satu cara untuk menyalin basis data dari satu server MySQL ke yang lain.
Untuk MyISAM, portabilitas biner berarti Anda dapat langsung menyalin file untuk tabel MyISAM dari satu server MySQL ke komputer lain dan server kedua akan dapat mengakses tabel tersebut.
Untuk InnoDB, portabilitas biner berarti Anda dapat langsung menyalin file tablespace dari server MySQL di satu mesin ke server lain di mesin yang berbeda dan server kedua akan dapat mengakses tablespace. Secara default, semua tabel InnoDB yang dikelola oleh server disimpan bersama dalam tablespace, sehingga portabilitas tablespace adalah fungsi apakah semua tabel InnoDB individu bersifat portabel. Jika bahkan satu tabel tidak portabel, tidak juga tablespace.
Tabel MyISAM dan tablespace InnoDB adalah biner portable dari satu host ke host lain jika dua kondisi terpenuhi:
- Kedua mesin harus menggunakan aritmatika integer dua pelengkap
- Kedua mesin harus menggunakan format titik-mengambang IEEE atau tabel tidak boleh mengandung kolom titik-mengambang (FLOAT atau DOUBLE)
Dalam praktiknya, kedua kondisi tersebut menimbulkan sedikit pembatasan. Aritmatika integer dua pelengkap dan format titik-mengambang IEEE adalah norma pada perangkat keras modern. Kondisi ketiga untuk portabilitas biner InnoDB adalah Anda harus menggunakan nama huruf kecil untuk tabel dan database. Ini karena InnoDB menyimpan nama-nama ini secara internal (dalam kamus datanya) dalam huruf kecil pada Windows. Menggunakan nama huruf kecil memungkinkan portabilitas biner antara Windows dan Unix, untuk memaksa penggunaan nama huruf kecil, Anda dapat meletakkan baris berikut dalam file opsi:
[mysqld]
lower_case_table_names=1
Jika Anda mengkonfigurasi InnoDB untuk menggunakan tabel tablespace per-tabel, kondisi untuk portabilitas biner diperluas untuk menyertakan file .ibd untuk tabel InnoDB juga. (Kondisi untuk tablespace bersama masih appli karena berisi kamus data yang menyimpan informasi tentang semua tabel InnoDB.)
Jika kondisi portabilitas biner tidak terpenuhi, Anda dapat menyalin tabel MyISAM atau InnoDB dari satu server ke server lain dengan membuangnya menggunakan beberapa format teks (misalnya, dengan mysqldump) dan memuatnya kembali ke server tujuan.
Ada dua cara utama berdasarkan mesin penyimpanan untuk memindahkan masing-masing tabel.
Untuk contoh yang diberikan, kita akan mengira sebagai berikut:
- datadir adalah / var / lib / mysql
- database yang disebut mydb
- tabel dalam database mydb disebut mytable .
Tabel MyISAM
Jika mydb.mytable menggunakan mesin penyimpanan MyISAM, tabel secara fisik akan dimanifestasikan sebagai tiga file terpisah
- /var/lib/mysql/mydb/mytable.frm (file .frm)
- /var/lib/mysql/mydb/mytable.MYD (file .MYD)
- /var/lib/mysql/mydb/mytable.MYI (file .MYI)
.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:
LOCK TABLES mydb.mytable READ;
SELECT SLEEP(86400);
UNLOCK TABLES;
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 ServerA
Langkah 06) Lakukan satu lagi rsync
Langkah 07) scp ServerA:/etc/my.cnf ServerB:/etc/
Langkah 08) service mysql start
di ServerB
Langkah 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