Birçok insan için, MySQL Achilles'in topuğu gizlidir.
Kitabın 3. Fıkrası uyarınca
Aşağıdaki komutlar bir işlemi kırabilir ve kırabilir
ALTER TABLE
BEGIN
CREATE INDEX
DROP DATABASE
DROP INDEX
DROP TABLE
RENAME TABLE
TRUNCATE TABLE
LOCK TABLES
UNLOCK TABLES
SET AUTOCOMMIT = 1
START TRANSACTION
ÖNERİ
MySQL söz konusu olduğunda, inşa ettiğiniz herhangi bir ContinuousIntegration (CI) / SelfService işinde her zaman İşlemsel işler ve DDL komut dosyaları birbirini dışlar.
Bu size olacak paradigmalar yaratma fırsatı verir
START TRANSACTION/COMMIT
bloklarla uygun şekilde yalıtılmış işlemleri destekleyin
- DDL'yi kendiniz yazarak, DDL'yi yapıcı veya yıkıcı olarak çalıştırarak kontrol etme
- Yapıcı: DDL Yeni Bir Tasarımla Tablolar Yapacak
- Yıkıcı: Masaları Önceki Tasarıma Geri Döndüren DDL
- bu işlemleri asla bir iş altında birleştirmeyin
UYARI: Bunun için MyISAM kullanıyorsanız, MyISAM'ı bir işlemi kırabilecek şeyler listesine nazikçe ekleyebilirsiniz (un) 'i kesin bir şekilde yerine getirin; gerekli.
Neden LVM değil?
LVM anlık görüntüleri mükemmeldir ve ağır SQL işlemesi yapmak zorunda kalmadan tüm veritabanı örneklerini geri yüklemek idealdir. Ancak, MySQL söz konusu olduğunda, iki depolama motorunu hesaba katmanız gerekir: InnoDB ve MyISAM.
All-InnoDB Veritabanı
InnoDB's Architecture'a bakın (Resim Percona CTO Vadim Tkachenko'nun izniyle)
InnoDB birçok hareketli parçaya sahiptir.
- Sistem Tablo Alanı
- Bilgi sözlüğü
- Çift Yazma Arabelleği (veri tutarlılığını destekler; Crash Recovery için kullanılır)
- Tampon Tak (İkincil Eşsiz Dizinlerde Arabellek Değişiklikleri)
- Geri Alma Segmentleri
- Boşluğu Geri Al (en kontrolsüz büyümenin olabileceği yer)
- InnoDB Tampon Havuzu
- Kirli Veri Sayfaları
- Kirli Dizin Sayfaları
- Benzersiz Olmayan Dizinlerde Değişiklikler
- Diğer Önemli Bellek Önbellekleri
Arabellek Havuzu ve Bellek önbelleklerinde kayıtsız değişikliklerle all-InnoDB veritabanının LVM görüntüsünü almak, LUN geri yüklenip mysqld başladıktan sonra InnoDB kilitlenme kurtarması gerektiren bir veri kümesi verir.
TÜM-InnoDB İÇİN ÖNERİ
Anlık Görüntü Almadan Önce MySQL'i Kapatabilirseniz
- Koşmak
SET GLOBAL innodb_fast_shutdown = 0;
- Koşmak
SET GLOBAL innodb_max_dirty_pages_pct = 0;
- Koşmak
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
- Innodb_buffer_pool_pages_dirty 0 veya olabildiğince 0'a yakın olana kadar 3. Adımı tekrarlayın
service mysql stop
- LVM anlık görüntüsünü alın
service mysql stop
Kapatamazsanız Ama MySQL Live İle Anlık Görüntü Yakalayın
- Koşmak
SET GLOBAL innodb_max_dirty_pages_pct = 0;
- Koşmak
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
- Innodb_buffer_pool_pages_dirty 0 veya olabildiğince 0'a yakın olana kadar 2. Adımı tekrarlayın
- LVM anlık görüntüsünü alın
- Koşmak
SET GLOBAL innodb_max_dirty_pages_pct = 75;
All-MyISAM Veri Tabanı veya InnoDB / MyISAM Mix
MyISAM, erişildiğinde, ona karşı açık dosya tanıtıcısı sayısını korur. MySQL çökerse, açık dosya tanıtıcısı sayısı> 0 olan herhangi bir MyISAM tablosu çökme ve onarım ihtiyacı olarak işaretlenir (verilerde yanlış bir şey olmasa bile).
Kullanımda olan MyISAM tablolarını içeren bir veritabanının LVM anlık görüntüsünü almak, anlık görüntü geri yüklendiğinde ve mysqld başlatıldığında onarılması gereken bir veya daha fazla MyISAM tablosuna sahip olacaktır.
All-MyISAM veya InnoDB / MyISAM Mix Önerileri
Anlık Görüntü Almadan Önce MySQL'i Kapatabilirseniz
- Koşmak
SET GLOBAL innodb_fast_shutdown = 0;
- Koşmak
SET GLOBAL innodb_max_dirty_pages_pct = 0;
- Koşmak
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
- Innodb_buffer_pool_pages_dirty 0 veya olabildiğince 0'a yakın olana kadar 3. Adımı tekrarlayın
service mysql stop
- LVM anlık görüntüsünü alın
service mysql stop
Kapatamazsanız Ama MySQL Live İle Anlık Görüntü Yakalayın
Bazı InnoDB masalarının temizlenmesini zorlayabilirsiniz
- Koşmak
SET GLOBAL innodb_max_dirty_pages_pct = 0;
- Koşmak
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
- Innodb_buffer_pool_pages_dirty 0 veya olabildiğince 0'a yakın olana kadar 2. Adımı tekrarlayın
FLUSH TABLES innodb_tbl1,... FOR EXPORT;
Kritik InnoDB masalarında çalıştırın
- Koşmak
FLUSH TABLES WITH READ LOCK;
- LVM anlık görüntüsünü alın
- Koşmak
UNLOCK TABLES;
- Koşmak
SET GLOBAL innodb_max_dirty_pages_pct = 75;
MySQL Replication Yardım Edebilir mi?
Bir LVM anlık görüntüsünü iki sunucuya geri yükleyebilir ve MySQL Master / Slave Replication'ı kurarken, anlık görüntüleri geri yüklerken ekstra bir ev temizliği kaynağı olur.
Bir Master'da CI işleri yürütüyorsanız ve bu işler küçükse, çoğaltma belirli koşullar altında zaman kazandırabilir. Sadece STOP SLAVE;
Slave'de koşabilir , Master'daki CI işlerini START SLAVE;
başlatabilir ve Master'ın verileri onaylandığında Slave'de koşabilirsiniz .
CI işleri çok fazla veri uyarıyorsa, LVM anlık görüntüsünü geri yükleyebilir ve çoğaltmayı sıfırdan başlatabilirsiniz. Bunu sık sık yaparken kendinizi bulursanız, muhtemelen MySQL Replication'ı ayarlayarak yapabilirsiniz.
SON DÜŞÜNCELER
- Geri yükleme ve regresyon testleri yapmak için birden çok DB Sunucusu (3 veya daha fazla) kullanmak en iyisidir.
- Bu tabloların MyISAM kalması gerekmiyorsa, kalan MyISAM tablolarını InnoDB'ye dönüştürün.
- Veri içeriğiniz hassassa, herhangi bir sınamaya başlamadan önce anlık görüntüyü geri yükledikten sonra verileri silmek için bir CI işi yürütmelisiniz. Alternatif olarak, önceden silinmiş verilerle MySQL'in anlık görüntülerini almak isteyebilirsiniz.