Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Percona Toolkit Araçları ile MySQL/MariaDB Canlı Veritabanı Bakım ve Optimizasyon İşlemleri

codrix

Üye
Katılım
14 Mart 2026
Mesajlar
34
Merhaba arkadaşlar, bugün sizlere sunucu yönetiminde en kritik bileşenlerden biri olan MySQL veya MariaDB veritabanlarınızı, hizmeti durdurmadan veya kullanıcıları etkilemeden nasıl bakım ve optimizasyondan geçirebileceğinizi anlatacağım. Özellikle büyük tablolar, sürekli yazma/okuma yapan canlı sistemlerde bu araçlar hayat kurtarıcıdır. Ben de kendi sunucu parkurumda sıklıkla kullandığım için tecrübelerimi paylaşmak istiyorum.

🔧 Percona Toolkit Nedir ve Kurulumu

Percona Toolkit, MySQL, MariaDB ve MongoDB sistemleri için geliştirilmiş, komut satırından çalışan profesyonel bir araç setidir. Tablo onarımı, veri senkronizasyonu, sorgu analizi, sistem izleme gibi onlarca farklı işi yapabilen araçlar içerir. İlk adım olarak bu araçları sunucumuza kurmalıyız.

Debian/Ubuntu tabanlı sistemler için kurulum şu şekilde:

Bash:
sudo apt-get update
sudo apt-get install percona-toolkit

RHEL/CentOS tabanlı sistemler için ise öncelikle EPEL reposunu etkinleştirip sonra yükleyebilirsiniz:

Bash:
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install percona-toolkit

Kurulum bittikten sonra versiyon kontrolü yaparak her şeyin yolunda olduğundan emin olalım.

Bash:
pt-query-digest --version

📊 Canlı Sistemde Sorgu Analizi: pt-query-digest

Optimizasyona nereden başlayacağımızı bilmek için önce sorunlu noktaları tespit etmeliyiz. `pt-query-digest` aracı, yavaş sorgu loglarınızı veya genel sorgu loglarınızı analiz edip size detaylı bir rapor sunar. Bu rapor, hangi sorguların en çok zaman aldığını, en sık çalıştığını gösterir ve optimizasyon önceliğinizi belirlemenizi sağlar.

Genel sorgu log'unuzu analiz etmek için (log'un açık olduğundan emin olun):

Bash:
pt-query-digest /var/log/mysql/mysql-slow.log > slow_query_analysis_$(date +%Y%m%d).txt

Eğer canlı trafiği anlık analiz etmek isterseniz, `tcpdump` ile yakalayıp analiz edebilirsiniz. Bu yöntem sunucuya ek yük bindirebileceği için yoğun olmayan saatlerde yapmanızı öneririm.

🔄 Tablo Yapısını Optimize Etme: pt-online-schema-change

Bu araç, benim en sevdiğim ve en sık kullandığım araçlardan biri. Büyük bir tabloya ALTER komutu (INDEX ekleme, kolon tipi değiştirme, kolon silme/ekleme) çalıştırdığınızda tablo kilitlenir ve bu canlı sistemlerde dakikalarca süren kesintilere yol açabilir. `pt-online-schema-change` ise bu işlemi, orijinal tabloyu kitlemeden, arka planda yeni bir tablo oluşturup verileri kopyalayarak yapar.

Örneğin, `forum_posts` tablosuna yeni bir index eklemek istiyoruz:

Bash:
pt-online-schema-change --alter "ADD INDEX idx_user_created (user_id, created_at)" D=forumdb,t=forum_posts --execute

Bu komut çalışırken, kullanıcılarınız tabloya yazmaya ve okumaya devam edebilir. Araç, değişiklikleri anlık olarak yeni tabloya da taşır. İşlem bittiğinde orijinal tablo ile yeni tablonun yerini değiştirir ve eski tabloyu siler. Şu ayara çok dikkat etmelisiniz: `--chunk-size` parametresi ile her seferde taşınacak veri miktarını ayarlayabilir, sunucu yükünü kontrol altında tutabilirsiniz.

⚠️ Kritik Tablo Bakımı: pt-table-checksum & pt-table-sync

Master-Slave replikasyon ortamınız varsa, zamanla veri tutarsızlıkları (drift) oluşabilir. Bu iki araç, tutarsızlıkları tespit etmek ve düzeltmek için birebirdir.

Öncelikle, master ve slave'ler arasında checksum karşılaştırması yapalım:

Bash:
pt-table-checksum --replicate=forumdb.checksums h=localhost,u=admin,p=sifre

Bu komut, her tablo için bir checksum hesaplar ve sonuçları `forumdb.checksums` tablosuna yazar. Slave'ler de bu tabloyu replike eder. Daha sonra slave'lerde bu tablo kontrol edilerek farklılıklar tespit edilir.

Eğer bir tutarsızlık bulunursa, düzeltmek için `pt-table-sync` kullanılır. Ancak bu araç DOĞRUDAN veriyi değiştirir. Bu nedenle önce ne yapacağını `--print` parametresi ile görmek şarttır!

Bash:
pt-table-sync --replicate=forumdb.checksums h=master_host,u=admin,p=sifre h=slave_host --print

Çıktıyı kontrol ettikten ve emin olduktan sonra, `--execute` parametresi ile değişiklikleri uygulayabilirsiniz. Bu işlemleri yaparken mutlaka bir yedeğinizin alınmış olduğundan emin olun.

💡 Pratik İpuçları ve Güvenlik

Test Ortamı: Bu araçları ilk defa kullanacaksanız, mutlaka önce üretim ortamına benzeyen bir test/staging sunucusunda deneyin.
Kullanıcı Hakları: Araçları çalıştıracağınız MySQL kullanıcısının (`--user` ile belirtilen) yeterli yetkilere (SELECT, INSERT, ALTER, SUPER vs.) sahip olduğundan emin olun.
Yoğun Saatler: `pt-online-schema-change` gibi işlemleri, trafiğin nispeten düşük olduğu saatlerde planlayın.
Config Dosyası: Sık kullandığınız kullanıcı, host ve port bilgilerini ~/.my.cnf dosyasına yazarak her seferinde parametre girmekten kurtulabilirsiniz. Dosya izinlerinin 600 olmasına dikkat edin!
Monitoring: Uzun süren işlemler sırasında sunucunuzun CPU, RAM ve IO istatistiklerini (`top`, `iotop`, `vmstat`) takip etmeyi unutmayın.

Umarım bu rehber, veritabanı sunucularınızı daha sorunsuz yönetmenize yardımcı olur. Percona Toolkit, içinde daha keşfedilecek çok araç barındırıyor. Benim en çok kullandıklarım bunlardı.

Peki siz bu araçları veya başka yöntemleri kendi sunucularınızda nasıl kullanıyorsunuz? Özellikle çok büyük tablalar (50GB+) için ekstra taktikleriniz var mı? Tecrübelerinizi paylaşırsanız hepimiz faydalanırız. Sorularınız ve eklemek istedikleriniz için aşağıya yazmaktan çekinmeyin. Kolay gelsin!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri