Göre MySQL 5.0 Belgelendirme Eğitim Kılavuzu , Bölüm 32 Bölüm 32.3.4, Sayfalar 456.457 tarif İkili Taşınabilirlik için şartlar dışarı şunları yanınızda:
Bir makinede yapılmış bir ikili yedekleme almak ve farklı bir mimariye sahip başka bir makinede kullanmak istiyorsanız, ikili taşınabilirlik önemlidir. Örneğin, ikili yedekleme kullanmak, veritabanlarını bir MySQL sunucusundan diğerine kopyalamanın bir yoludur.
MyISAM için, ikili taşınabilirlik, bir MyISAM tablosu için dosyaları doğrudan bir MySQL sunucusundan diğerine farklı bir makinede kopyalayabileceğiniz ve ikinci sunucunun da masaya erişebileceği anlamına gelir.
InnoDB için ikili taşınabilirlik, tablo alanı dosyalarını bir makinedeki MySQL sunucusundan başka bir makineye doğrudan başka bir sunucuya kopyalayabileceğiniz ve ikinci sunucunun tablo alanına erişebileceği anlamına gelir. Varsayılan olarak, bir sunucu tarafından yönetilen tüm InnoDB tabloları tablo alanında birlikte depolanır; bu nedenle tablo alanının taşınabilirliği, tüm bireysel InnoDB tablolarının taşınabilir olup olmadığının bir işlevidir. Bir tablo bile taşınabilir değilse, tablo alanı da değildir.
İki koşul karşılanırsa, MyISAM tabloları ve InnoDB tablo alanları, bir ana bilgisayardan diğerine ikili taşınabilir.
- Her iki makine de ikiin tamamlayıcı tamsayı aritmetiğini kullanmalıdır
- Her iki makinede de IEEE kayan nokta formatı kullanılmalı, aksi halde tablolarda kayan nokta sütunları (FLOAT veya DOUBLE) bulunmamalıdır
Uygulamada, bu iki koşul çok az kısıtlama getirmektedir. İkinin tamamlayıcı tamsayı aritmetiği ve IEEE kayan nokta formatı modern donanımdaki normlardır. InnoDB ikili taşınabilirliği için üçüncü bir koşul, tablolar ve veritabanları için küçük harfler kullanmanız gerektiğidir. Bunun nedeni InnoDB'nin bu adları dahili olarak (veri sözlüğünde) küçük harflerle Windows'ta saklamasıdır. Küçük harf adlarını kullanmak, küçük harf adlarını zorlamak için Windows ve Unix arasında ikili taşınabilirlik sağlar, bir seçenek dosyasına aşağıdaki satırları koyabilirsiniz:
[mysqld]
lower_case_table_names=1
InnoDB'yi tablo başına tablo alanı kullanacak şekilde yapılandırırsanız, ikili taşınabilirlik için koşullar InnoDB tabloları için .ibd dosyalarını içerecek şekilde genişletilir. (Paylaşılan tablo alanları için koşullar, tüm InnoDB tablolarıyla ilgili bilgileri depolayan veri sözlüğünü içerdiğinden hala geçerlidir.)
İkili taşınabilirlik için koşullar yerine getirilmezse, bazı metin formatlarını (örneğin, mysqldump ile) kullanarak ve bunları hedef sunucuya yeniden yükleyerek MyISAM veya InnoDB tablolarını bir sunucudan diğerine kopyalayabilirsiniz.
Tek tek tabloları taşımak için depolama motoruna dayanan iki ana yol vardır.
Verilen örnek için aşağıdakileri varsayalım:
- datadir / var / lib / mysql
- mydb adı verilen veritabanı
- mydb veritabanındaki tablo mytable denir .
MyISAM tabloları
Mydb.mytable, MyISAM depolama motorunu kullanıyorsa, tablo fiziksel olarak üç ayrı dosya olarak gösterilecektir.
- /var/lib/mysql/mydb/mytable.frm (.frm dosyası)
- /var/lib/mysql/mydb/mytable.MYD (.MYD dosyası)
- /var/lib/mysql/mydb/mytable.MYI (.MYI dosyası)
.Frm tablo yapısını içerir.. MYD tablo verilerini
içerir. .MYI tablo dizin sayfasını içerir
Bu dosyalar, tabloyu mysql'deki mantıksal bir noktadan temsil etmek için birbirine bağlı olarak kullanılır. Bu dosyaya başka bir mantıksal ilişkilendirme bağlanmadığından, bir tabloyu bir DB sunucusundan diğerine geçirme. Bunu bir Windows sunucusundan bir Linux Sunucusuna veya MacOS'a bile yapabilirsiniz. Tabii ki, mysql kapatma ve 3 tablo dosyalarını kopyalayabilirsiniz. Aşağıdakileri çalıştırabilirsiniz:
LOCK TABLES mydb.mytable READ;
SELECT SLEEP(86400);
UNLOCK TABLES;
Bir ssh oturumunda tabloyu salt okunur şekilde tutmak ve kilidi 24 saat boyunca tutmak için. Bir saniye sonra, kopyayı başka bir ssh oturumunda gerçekleştirin. Sonra 24 saat kilidi ile MySQL oturumu öldür. 24 saat beklemene gerek yok.
InnoDB masaları
Sertifika kitabında belirtilen alıntıya dayanarak, belirli bir InnoDB tablosunun nasıl yedekleneceğini belirleyen birçok faktör vardır. Basitlik, açıklık ve kısalık adına, tablonun tam zamanında bir dökümü için - tek işlem parametrelerini kullanarak istenen tablonun bir miktarını doldurun. Sadece bir tablo istiyorsanız, InnoDB semantics ile kendinizi cnc işlemeye gerek yok. Bu boş dosyayı, seçtiğiniz herhangi bir MySQL sunucusuna yeniden yükleyebilirsiniz.
İki soru burada birleştirildiğinden beri (jcolebrand): EDIT
Bazı yavaş DB performanslarıyla yaşamaya istekli değilseniz, mysql hala SunucuA'da çalışırken bile eski sunucudan (SunucuA) yeni sunucuya (SunucuB) bir dizi rsync gerçekleştirebilirsiniz.
Adım 01) aynı mysql sürümünü ServerA'daki ServerB'ye kurun
Adım 02) SunucuA'da, SET GLOBAL innodb_max_dirty_pages_pct = 0;
mysql ve yaklaşık 10 dakika çalıştırın (Bu, InnoDB Tampon Havuzundan kirli sayfaları temizler. Aynı zamanda mysql kapanmasını daha hızlı gerçekleştirmeye de yardımcı olur) Veritabanınız tamamen MyISAM ise, bu adımı atlayabilirsiniz.
Adım 03) rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql
Adım 04) Bir rsync 1 dakikadan az sürene kadar 03 numaralı adımı tekrarlayın.
Adım 05) service mysql stop
ServerA'da
Adım 06) Bir rsync daha yapın
Adım 07) scp ServerA:/etc/my.cnf ServerB:/etc/
Adım 08) service mysql start
SunucuB'de
Adım 08) service mysql start
ServerA'da (isteğe bağlı)
Bir şans ver !!!
UYARI
Böyle bir çoğaltma kölesi oluşturabilirsiniz. Sunucu kimliğinin master / etc/my.cnf dosyasında ve sunucu / id için de köle /etc/my.cnf dosyasında farklı bir sayı koyduğunu unutmayın.