MySQL/MariaDB veritabanlarını, InnoDB tablolarını MyISAM tablolarına toplu olarak dönüştürmek için nasıl yapılandırabilirim?

Veritabanı tablosunun depolama motoru, bir arabanın motoru gibidir; motoru değiştirmek, performansı ve özellikleri anında değiştirir. Birçok kişi veritabanının sadece veri depolamak için olduğunu düşünür, ancak InnoDB'yi MyISAM'e dönüştürmeye çalıştığınızda gizli karmaşıklıkları keşfedersiniz.

Birisi neden InnoDB'den MyISAM'e geçmek istesin ki?

Birçok senaryoda, özellikle log ve istatistik veritabanları gibi yoğun okuma ve düşük yazma gerektiren uygulamalar için MyISAM daha hızlıdır.

Tablo düzeyindeki kilitleme mekanizması, düşük eşzamanlılık koşullarında aslında çok sorunsuz çalışıyor.

Üstelik MyISAM'ın dosya depolama sistemi daha sezgisel; bir .MYD Verileri sakla, bir .MYI Dizinleri saklamak, taşıma işlemleri yapmak ve yedekleme yapmak oldukça kullanışlıdır.

Ancak, InnoDB'nin işlem ve yabancı anahtar desteği, karmaşık iş senaryolarında neredeyse bir zorunluluktur.

Bu nedenle, geçiş yapmadan önce işletmenizin bu özelliklere gerçekten ihtiyacı olup olmadığını belirlemeniz gerekir.

Temel komut: ALTER TABLE

InnoDB'den MyISAM'e tek bir tabloyu dönüştürmek için yalnızca tek bir satır kod yeterlidir:

ALTER TABLE `你的表名` ENGINE = MyISAM;

İşlem tamamlandıktan sonra, tablonun depolama motoru değiştirilecektir.

Bu oldukça açık değil mi?

Toplu dönüştürme: Otomatik komut dosyası oluşturma

Eğer onlarca hatta yüzlerce tablonuz varsa, bunları manuel olarak değiştirmek kesinlikle pratik değildir.

Bu aşamada, toplu dönüştürme ifadelerini otomatik olarak oluşturmak için tek bir sorgu kullanılabilir:

SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;') 
FROM information_schema.tables 
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';

Çalıştırıldıktan sonra bir sürü çıktı verecektir... ALTER TABLE ... İfade.

Bu ifadeleri kopyalayın ve toplu dönüştürme işlemini tek seferde tamamlamak için hepsini birden çalıştırın.

Bu, "otomatik toplu dönüştürme" olarak bilinir.

Dönüşüm öncesi risk değerlendirmesi

MySQL/MariaDB veritabanlarını, InnoDB tablolarını MyISAM tablolarına toplu olarak dönüştürmek için nasıl yapılandırabilirim?

Yabancı anahtar kısıtlamaları

InnoDB yabancı anahtarları desteklerken, MyISAM hiç desteklemiyor.

Dönüştürme işlemi tamamlandığında, yabancı anahtar kısıtlamaları kaldırılacaktır.

İşletmeniz ardışık silme veya güncelleme işlemlerine dayanıyorsa, dönüştürme işleminden sonra mantık tamamen çökecektir.

İşlem desteği

InnoDB'de işlemler bulunur ve bunlar desteklenir. COMMIT 和 ROLLBACK.

MyISAM'de işlemler (transaction) yoktur, yalnızca tablo düzeyinde kilitler (table level locks) bulunur.

Dönüştürme işleminden sonra, işlemle ilgili tüm kodlar geçersiz hale gelecek ve bir istisna durumunda geri alma işlemi mümkün olmayacaktır.

Eşzamanlılık performansı

InnoDB satır düzeyinde kilitleme kullanırken, MyISAM tablo düzeyinde kilitleme kullanır.

Yüksek eşzamanlılık gerektiren senaryolarda, MyISAM sıklıkla tabloları kilitler ve bu da performans darboğazlarına yol açar.

Dizin özellikleri

MySQL 5.6 öncesinde MyISAM'ın benzersiz bir tam metin dizini vardı.

Ancak, MySQL 5.6+ ve MariaDB 10+ sürümlerinde InnoDB zaten tam metin indekslemeyi desteklemektedir.

Bu nedenle, daha eski bir sürüm kullanmıyorsanız, tam metin indeksleme için MyISAM'e geçmenize gerek yoktur.

En İyi Uygulama Süreci

  1. 备份数据 Dönüştürmeden önce mutlaka dışa aktarın. .sql Dosyalar, istenildiği zaman geri yüklenebilmeleri için saklanır.

  2. Tablo yapısında yabancı anahtar olup olmadığını görmek için aşağıdaki komutu kullanarak tablo yapısını kontrol edin :

    SHOW CREATE TABLE `你的表名`;
    
  3. Dönüştürme işlemini gerçekleştirin 使用 ALTER TABLE Alternatif olarak, dönüştürme işlemini tamamlamak için toplu işlem komut dosyaları kullanılabilir.

  4. Sağlık durumunu kontrol edin . Dönüştürme işleminden sonra şunu çalıştırın:

    CHECK TABLE `你的表名`;
    OPTIMIZE TABLE `你的表名`;
    

    Bu, tablonun doğru şekilde çalıştığını ve parçaları serbest bıraktığını doğrular.

Ters kurtarma yöntemi

Dönüştürme işleminden sonra performans düşüşü veya iş mantığı sorunları gözlemlenirse, istediğiniz zaman InnoDB'ye geri dönebilirsiniz:

ALTER TABLE `你的表名` ENGINE = InnoDB;

Bu, "tersine çevrilebilir işlem" olarak adlandırılır ve size bir çıkış yolu sunar.

Alıntılanan yetkili görüşler

MySQL'in resmi dokümanına göre :

"Yabancı anahtar yapısı"aiYabancı anahtarlar yalnızca InnoDB tarafından desteklenir. Bir tabloyu MyISAM'e dönüştürürseniz, tüm yabancı anahtarlar göz ardı edilecektir.
—MySQL Referans Kılavuzu, Bölüm 14.6.6 Yabancı Anahtar Kısıtlamaları

Bu ifade bize MyISAM'da yabancı anahtarların tamamen geçersiz olduğunu açıkça gösteriyor.

Resmi MariaDB dokümantasyonu da şunları vurgulamaktadır:

"MyISAM işlemleri desteklemez. İşlem bütünlüğüne dayanan uygulamalar MyISAM'ı kullanmamalıdır."
—MariaDB Bilgi Bankası, Depolama Motorları

Bu yüzden değişiklik yapmadan önce iki kez düşünmelisiniz.

Benim Bakış Açım ve Sonuç

InnoDB'yi MyISAM'e dönüştürmek, lüks bir arabanın motorunu kamyon motoruyla değiştirmeye benzer.

Çalışabilir, ancak tamamen farklı bir şekilde çalışır.

İşletmeniz hafif istatistiksel sorgular içeriyorsa, MyISAM'ın hızı ve sadeliği daha uygun olabilir.

Ancak, sisteminiz işlemlere ve yabancı anahtarlara dayanıyorsa, bunları aceleyle dönüştürmek hava yastığını çıkarmaya benzer.

Dolayısıyla gerçek bilgelik, körü körüne hızın peşinden koşmakta değil, istikrar ve performansı dengelemekte yatar.

Veritabanı seçimi, sistemin ruhunu belirler.

Anahtarlamalı depolama motorlarının becerilerinde ustalaşmak, yalnızca teknik yeteneğin bir göstergesi değil, aynı zamanda mimari düşüncenin de bir üst seviyesidir.

Toplu dönüştürmeyi düşünüyorsanız, lütfen öncelikle kapsamlı bir risk değerlendirmesi yapın.

Gerçek iş senaryolarını simüle etmek için test ortamını bir kez çalıştırın.

Her şeyin doğru olduğundan emin olduktan sonra, kodu üretim ortamında çalıştırın.

Veritabanları oyuncak değil; kurumsal verilerin kalbidir.

Kalbinizin ritmini kontrol eden sizsiniz.

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

En gidin