Yanıtlar:
Kopyalama MyISAM için çok basit ve InnoDB ile% 100 riskli (intihar yakınında).
Sorunuzdan, büyüdünüz
cp /db1/mytable.frm /db2/mytable.frm
Bunu yapmak için sorun yok. Ancak, sadece .frm'yi taşıyamazsınız. Tüm bileşenleri taşımanız gerekir. Sorunuzdan db1.mytable adlı bir tablo alalım. Normal kurulumda, tablo / var / lib / mysql / db1 dizininde bulunur. Masayı oluşturan üç dosya olurdu.
Bir tabloyu taşımak için her üç dosyayı da taşımalısınız. Tüm tablolarınız MyISAM depolama motorunu kullanıyorsa, mysql'yi kapatabilir ve kopyalayabilirsiniz. Tablonun bir kopyasını oluşturup başka bir veritabanına yerleştiriyorsanız, bunu SQL kullanarak yapmalısınız.
Örneğin, db1.mytable dosyasını db2 veritabanına kopyalamak istiyorsanız, bunu yapın:
CREATE TABLE db2.mytable LIKE db1.mytable;
ALTER TABLE db2.mytable DISABLE KEYS;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
ALTER TABLE db2.mytable ENABLE KEYS;
Şimdi tabloyu db1'den db2'ye taşıyorsanız, bunu yapabilirsiniz:
ALTER TABLE db1.mytable RENAME db2.mytable;
InnoDB'nin altında çalıştığı altyapı nedeniyle kopyalama çok tehlikelidir. İki temel altyapı vardır: 1) innodb_file_per_table devre dışı ve 2) innodb_file_per_table etkin
Aşil Topuğu InnoDB, ibdata1 (normalde / var / lib / mysql içinde bulunur) olarak bilinen sistem tablo alanı dosyasıdır. Bu dosyada ne var ?
İnnodb_file_per_table devre dışı bırakıldığında, tüm bu InnoDB bilgileri ibdata1 içinde yaşar. İbdata1 dışındaki herhangi bir InnoDB tablosunun tek belirtisi, InnoDB tablosunun .frm dosyasıdır. Tüm InnoDB verilerinin aynı anda kopyalanması / var / lib / mysql dosyasının tümünü kopyalamayı gerektirir.
Tek bir InnoDB tablosunun kopyalanması tamamen imkansızdır. Verilerin ve karşılık gelen dizin tanımlarının mantıksal bir temsili olarak tablonun dökümünü almak için mysqldump komutunu kullanmalısınız. Daha sonra bu dökümü aynı sunucudaki veya başka bir sunucudaki başka bir veritabanına yüklersiniz.
İnnodb_file_per_table etkinken, tablo verileri ve dizinleri .frm dosyasının yanındaki veritabanı klasöründe yaşar. Örneğin, db1.mytable tablosu için, bu InnoDB tablosunun ibdata1 dışındaki tezahürü:
Db1.mytable için tüm meta veriler hala ibdata1'de yer alır ve bunun hiçbir yolu yoktur . Günlükleri ve MVCC verilerini yine de ibdata1 ile yayınlayın.
Sadece .frm ve .ibd dosyasını kopyalamayı düşünüyorsanız, acı dünyasına hazırsınız demektir. InnoDB tablosunun .frm ve .ibd dosyasını kopyalamak, yalnızca .ibd dosyasının tablo alanı kimliğinin, ibdata1 dosyasının met verisindeki tablo alanı kimliği girdisiyle tam olarak eşleştiğini garanti ederseniz iyi olur.
Bu tablo alanı kimliği kavramı hakkında DBA StackExchange iki mesaj yazdım
Eşleşmeyen tablo alanı kimlikleri durumunda .ibd dosyasını ibdata1'e nasıl yeniden bağlayacağınız konusunda mükemmel bir bağlantı: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file . Bunu okuduktan sonra neden intihar ettiğimi söylediğimi görebilmelisin.
InnoDB için sadece buna ihtiyacınız var
CREATE TABLE db2.mytable LIKE db1.mytable;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
InnoDB tablosunun bir kopyasını oluşturmak için. Başka bir DB sunucusuna geçiriyorsanız, mysqldump kullanın.
.frm
, .MYD
ve .MYI
.
Tüm MySQL veri dizinini kopyalamak, MySQL hizmetinin durdurulduğunu ve tüm veritabanı sunucusunun kopyalanmasını istediğinizi varsayarak pratik bir tekniktir.
Bu, büyük dizinleri olan veritabanlarını kaydırmak için kullanışlı bir tekniktir ve mysql dökümü, içe aktarma sırasında yeniden oluşturulması gereken dizinleri içermez. MySQL köleleri kurarken bu tekniği faydalı buldum.
Tek bir dosyayı kopyalamak, kullanılan tablo şemasına bağlıdır, ancak çoğu durumda uygun bir çözüm değildir.
Kullanım xtrabackup / akış s / y innobackupex sarma ağırlık ve myisam ve innodb veritabanlarının ince olacaktır. Innodb veritabanlarını geri yüklemenin, xtrabackup kullansanız bile dosyaları geri kopyalamakla kalmayacağını unutmayın. Daha fazla bilgiye ihtiyacınız olup olmadığını söyleyin
Hayır, mysqdump ile yedekleme yapmalı ve mysql cli yardımcı programı ile geri yüklemelisiniz, sadece tablo yapısını kopyaladığınız frm dosyasını kopyalayıp içerideki verileri kopyalamalısınız ve innodb kopyasındaysanız doğrudan dosya mümkün değildir.
En iyi yol dökümü ve tabloyu geri yüklemektir.