Veritabanı yönetimi, modern yazılım geliştirme ve sunucu operasyonlarının temel taşlarından biridir. CentOS gibi güçlü bir işletim sistemi üzerinde MySQL kurulumu, web uygulamalarınız, veri analizi projeleriniz veya kurumsal çözümleriniz için sağlam bir temel oluşturur. Bu kapsamlı rehberde, CentOS sunucunuza MySQL’i nasıl kuracağınızı, temel güvenlik ayarlarını nasıl yapacağınızı ve veritabanınızı nasıl yöneteceğinizi adım adım öğreneceksiniz.
CentOS Üzerine MySQL Kurulumu Neden Önemli ve Nereden Başlamalıyız?
Günümüzün dijital dünyasında, veri her şeyin merkezinde yer almaktadır. Web siteleri, mobil uygulamalar, e-ticaret platformları ve kurumsal yazılımlar, bilgiyi depolamak, işlemek ve sunmak için güçlü veritabanı sistemlerine ihtiyaç duyar. İşte tam bu noktada MySQL devreye girer. MySQL, açık kaynaklı ve dünyanın en popüler ilişkisel veritabanı yönetim sistemlerinden (RDBMS) biridir. Performansı, güvenilirliği ve kullanım kolaylığı sayesinde geniş bir kullanıcı kitlesine sahiptir. Peki, neden özellikle CentOS üzerinde MySQL kurulumunu tercih etmelisiniz?
CentOS, Red Hat Enterprise Linux (RHEL) tabanlı, kurumsal düzeyde bir işletim sistemidir. Sağlamlığı, güvenliği ve uzun süreli destek döngüleri ile bilinir. Bu özellikler, MySQL gibi kritik bir veritabanı sunucusunu barındırmak için ideal bir platform olmasını sağlar. CentOS üzerinde MySQL çalıştırmak, uygulamalarınız için stabil ve güvenli bir veri altyapısı sunar. Ayrıca, geniş topluluk desteği ve zengin paket yöneticisi (DNF/Yum) sayesinde kurulum ve yönetim süreçleri oldukça kolaylaşır.
Bu rehberde, veritabanı dünyasına yeni adım atanlardan deneyimli sistem yöneticilerine kadar herkesin faydalanabileceği bir yol haritası sunacağız. Öncelikle, MySQL’in temel kavramlarına kısaca değinecek, ardından kurulum öncesi hazırlıkları ele alacağız. İlişkisel veritabanları, verileri tablolar halinde düzenleyen, bu tablolar arasında ilişkiler kurarak veri bütünlüğünü sağlayan sistemlerdir. MySQL de bu prensiplerle çalışır. SQL (Structured Query Language), veritabanları ile etkileşim kurmak için kullanılan standart dildir. Veri ekleme, güncelleme, silme ve sorgulama gibi tüm işlemler SQL komutları aracılığıyla gerçekleştirilir. Bu temel anlayış, kurulum sonrası veritabanınızı daha etkili bir şekilde yönetmenize yardımcı olacaktır.
CentOS sisteminizde MySQL kurulumuna başlamadan önce, sunucunuzun temel işletim sistemi güncellemelerinin yapılmış olması, internet bağlantısının aktif olması ve root veya sudo yetkilerine sahip bir kullanıcı ile oturum açmış olmanız gerekmektedir. Bu ön hazırlıklar, kurulum sürecinde karşılaşabileceğiniz olası sorunları minimize edecektir. Ayrıca, güvenlik duvarı ayarları gibi konuları da kurulum öncesinde gözden geçirmek, ileriye dönük olası erişim problemlerinin önüne geçecektir. Tüm bu adımları titizlikle takip ederek, CentOS üzerinde güvenli ve performanslı bir MySQL sunucusu çalıştırmaya hazır olacaksınız.
MySQL Kurulumuna Başlamadan Önce Bilmeniz Gerekenler Nelerdir?
Herhangi bir yazılım kurulumuna başlamadan önce, sistemin doğru şekilde hazırlandığından emin olmak kritik öneme sahiptir. MySQL gibi bir veritabanı sunucusu söz konusu olduğunda, bu hazırlıklar daha da önem kazanır. Doğru bir ön hazırlık, kurulum sürecini sorunsuz hale getirecek ve gelecekteki olası performans veya güvenlik sorunlarının önüne geçecektir. İşte CentOS üzerine MySQL kurulumuna başlamadan önce dikkat etmeniz gereken temel noktalar:
-
Sistem Güncellemeleri: Her zaman olduğu gibi, bir sisteme yeni bir yazılım kurmadan önce mevcut paketleri güncellemek iyi bir uygulamadır. Bu, güvenlik açıklarını kapatır, bağımlılık sorunlarını giderir ve en son kararlı sürümleri kullanmanızı sağlar. CentOS 8 ve üzeri için DNF paket yöneticisini, CentOS 7 için ise Yum paket yöneticisini kullanabilirsiniz.
sudo dnf update -y # CentOS 8+ için # sudo yum update -y # CentOS 7 içinBu komut, sisteminizdeki tüm paketleri güncelleyecektir.
-
Güvenlik Duvarı Ayarları: CentOS sistemleri varsayılan olarak Firewalld ile birlikte gelir. MySQL, varsayılan olarak 3306 numaralı portu kullanır. Eğer veritabanınıza dışarıdan (başka bir sunucudan veya istemci uygulamasından) erişim sağlamayı planlıyorsanız, bu portu güvenlik duvarınızda açmanız gerekecektir. Aksi takdirde, yalnızca yerel uygulamalarınız MySQL’e bağlanabilir.
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reloadBu komutlar, 3306 portunu kalıcı olarak açar ve güvenlik duvarı ayarlarını yeniden yükler. Eğer sadece yerel erişim planlıyorsanız bu adımı atlayabilirsiniz.
- Depolama Alanı ve Bellek: MySQL, verileri diske yazar ve işlemleri gerçekleştirmek için belleği yoğun bir şekilde kullanır. Kurulumdan önce yeterli depolama alanına sahip olduğunuzdan emin olun. Özellikle büyük ölçekli veritabanları için SSD depolama birimleri, performans açısından büyük avantaj sağlar. Ayrıca, sunucunuzda yeterli RAM bulunması, MySQL’in önbellekleme mekanizmalarını daha verimli kullanmasına olanak tanır ve genel performansı artırır. Minimum 2GB RAM genellikle küçük ve orta ölçekli uygulamalar için yeterli kabul edilir, ancak bu, uygulamanızın yüküne göre değişir.
-
Mevcut Veritabanı Yazılımlarını Kontrol Etme: Sisteminizde daha önce kurulu MariaDB veya PostgreSQL gibi başka bir veritabanı sunucusu olup olmadığını kontrol edin. Çakışmaları önlemek için, eğer varsa ve kullanmıyorsanız bunları kaldırmak iyi bir fikir olabilir. Özellikle MariaDB, CentOS’un varsayılan olarak kullandığı bir MySQL çatalıdır ve MySQL ile aynı portu kullanabilir.
sudo dnf list installed | grep -i mysql sudo dnf list installed | grep -i mariadbEğer mevcut bir MariaDB kurulumu varsa ve MySQL’i kurmak istiyorsanız, MariaDB’yi kaldırmanız gerekebilir:
sudo dnf remove mariadb-server mariadb -y
Bu ön hazırlık adımlarını tamamladıktan sonra, CentOS sisteminiz MySQL kurulumuna hazırdır. Bu sayede, kurulum sırasında veya sonrasında karşılaşabileceğiniz birçok yaygın sorunun önüne geçmiş olursunuz. Unutmayın, sağlam bir temel, güvenli ve performanslı bir veritabanı altyapısının anahtarıdır.
CentOS Repolarını Kullanarak MySQL Nasıl Kurulur? (Resmi Yöntem)
CentOS üzerine MySQL kurmanın en güvenilir ve önerilen yolu, MySQL’in resmi Community Repository’sini kullanmaktır. Bu yöntem, size en güncel MySQL sürümlerine erişim sağlar ve sisteminizin paket yöneticisi (DNF veya Yum) aracılığıyla kolayca güncellemeler yapmanıza olanak tanır. İşte adım adım kurulum süreci:
-
MySQL Community Repository’sini Ekleme:
MySQL’in resmi deposunu sisteminize eklemek için, öncelikle depo paketini indirip kurmanız gerekmektedir. Bu paket, MySQL’in yazılım kaynaklarını sisteminize tanıtır.CentOS 8 ve üzeri için:
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm -yCentOS 7 için:
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -yBu komut, MySQL 8.0 sürümünü işaret eden depoyu ekleyecektir. Eğer farklı bir MySQL sürümü kurmak isterseniz (örneğin MySQL 5.7), depo dosyasını kurduktan sonra
mysql-communitymodülünü etkinleştirmeden önce ilgili sürümü devreye almanız gerekir. Ancak genellikle en güncel kararlı sürüm önerilir. -
Depo Ayarlarını Kontrol Etme (İsteğe Bağlı):
Depoyu ekledikten sonra, DNF veya Yum’un MySQL depolarını başarıyla tanıdığından emin olmak için kontrol edebilirsiniz.dnf repolist | grep mysql # CentOS 8+ için # yum repolist | grep mysql # CentOS 7 içinBu komut, MySQL depolarının listesini gösterecektir.
Uzman İpucu: Eğer birden fazla MySQL sürümü (örneğin 5.7 ve 8.0) depoda mevcutsa, istediğiniz sürümü etkinleştirmek için aşağıdaki komutu kullanabilirsiniz:sudo dnf module disable mysql # Tüm MySQL modüllerini devre dışı bırak sudo dnf module enable mysql:8.0 # MySQL 8.0'ı etkinleştir (veya mysql:5.7)Bu, DNF’nin hangi MySQL sürümünü kuracağını belirlemenizi sağlar.
-
MySQL Sunucusunu Kurma:
Depo başarıyla eklendikten ve doğru sürüm etkinleştirildikten sonra, MySQL sunucu paketini DNF/Yum aracılığıyla kurabilirsiniz.sudo dnf install mysql-community-server -y # CentOS 8+ için # sudo yum install mysql-community-server -y # CentOS 7 içinBu komut, MySQL sunucusunu ve gerekli tüm bağımlılıkları sisteminize kuracaktır. Kurulum süresi internet bağlantınızın hızına ve sunucunuzun performansına bağlı olarak değişebilir.
-
MySQL Servisini Başlatma ve Etkinleştirme:
Kurulum tamamlandıktan sonra, MySQL servisini başlatmanız ve sistem başlangıcında otomatik olarak başlaması için etkinleştirmeniz gerekir.sudo systemctl start mysqld sudo systemctl enable mysqld sudo systemctl status mysqldsystemctl start mysqldkomutu MySQL servisini başlatır.systemctl enable mysqldkomutu, sunucu yeniden başlatıldığında MySQL’in otomatik olarak başlamasını sağlar.systemctl status mysqldkomutu ise servisin durumunu kontrol etmenize yardımcı olur. Durum “active (running)” olarak görünmelidir.
Bu adımları başarıyla tamamladığınızda, CentOS sunucunuzda çalışan bir MySQL veritabanı sunucunuz olacaktır. Ancak kurulum, işin sadece başlangıcıdır. Bir sonraki adım, veritabanınızı güvence altına almak ve varsayılan ayarlarını yapılandırmaktır. MySQL 8.0 ile birlikte, kurulum sonrası root kullanıcısı için geçici bir şifre otomatik olarak oluşturulur ve bu şifreyi log dosyasında bulmanız gerekir. Bu, güvenlik açısından atılması gereken ilk önemli adımdır.
MySQL Güvenlik Ayarları Nasıl Yapılır ve İlk Adımlar Nelerdir?
MySQL sunucunuzu kurduktan sonra yapmanız gereken en önemli adımlardan biri, güvenlik ayarlarını yapılandırmaktır. Varsayılan kurulumlar genellikle güvenlik açısından zayıf olabilir ve kötü niyetli saldırılara açık kapı bırakabilir. MySQL, bu süreci kolaylaştırmak için mysql_secure_installation adlı bir betik sunar. Bu betik, bir dizi güvenlik ayarını otomatik olarak yapmanıza yardımcı olur. İşte adım adım güvenlik yapılandırması:
-
Geçici Root Şifresini Bulma:
MySQL 8.0 ve sonraki sürümlerde, kurulumdan sonrarootkullanıcısı için rastgele bir geçici şifre oluşturulur. Bu şifreyi MySQL hata günlüğü dosyasında bulmanız gerekir.sudo grep 'temporary password' /var/log/mysqld.logBu komut, şifreyi içeren bir satır döndürecektir. Şifreyi bir yere not alın, çünkü bir sonraki adımda ihtiyacınız olacak.
-
Güvenlik Betiğini Çalıştırma:
Şimdimysql_secure_installationbetiğini çalıştırarak güvenlik ayarlarını yapılandırmaya başlayabilirsiniz.sudo mysql_secure_installationBetik başladığında, sizden ilk olarak MySQL root kullanıcısının şifresini girmeniz istenecektir. Burada yukarıda bulduğunuz geçici şifreyi kullanın.
-
Şifre Doğrulama Bileşeni (Validate Password Component):
Betik size “VALIDATE PASSWORD COMPONENT” kurmak isteyip istemediğinizi soracaktır. Bu bileşen, şifrelerinizin karmaşıklığını kontrol eder ve zayıf şifrelerin kullanılmasını engeller. Genellikle bunu kurmanız önerilir. Y (Evet) yazıp Enter’a basın. Ardından şifre politikası seviyesini seçmeniz istenecektir:- LOW: Şifre uzunluğu 8 karakterden az olamaz.
- MEDIUM: Şifre uzunluğu 8 karakterden az olamaz ve sayı, karışık büyük/küçük harf ve özel karakter içermelidir.
- STRONG: MEDIUM gereksinimlerine ek olarak, yaygın kelimelerden oluşmadığını kontrol eder.
Genellikle “MEDIUM” veya “STRONG” seviyesi önerilir. Bir seviye seçin (örneğin 1 for MEDIUM) ve Enter’a basın.
-
Root Şifresini Değiştirme:
Şimdi sizden root kullanıcısı için yeni bir şifre belirlemeniz istenecektir. Güçlü ve tahmin edilmesi zor bir şifre belirlediğinizden emin olun. Bu şifreyi güvenli bir yerde saklayın.Uzman İpucu: Şifrenizi belirlerken büyük harf, küçük harf, rakam ve özel karakterlerin bir kombinasyonunu kullanın. En az 12-16 karakter uzunluğunda olması güvenlik seviyesini artırır. -
Anonim Kullanıcıları Kaldırma:
MySQL varsayılan olarak anonim kullanıcılar oluşturur. Bu kullanıcılar, herhangi bir şifreye ihtiyaç duymadan veritabanına erişebilirler ve ciddi bir güvenlik riski oluştururlar. Betik size bunları kaldırmak isteyip istemediğinizi soracaktır. “Y” yazıp Enter’a basın. -
Uzak Root Girişini Devre Dışı Bırakma:
Varsayılan olarak, root kullanıcısı yalnızca yerel makineden (localhost) erişebilir. Betik, root kullanıcısının uzaktan giriş yapmasına izin verilip verilmeyeceğini sorar. Güvenlik nedeniyle, root kullanıcısının uzaktan erişimini devre dışı bırakmanız şiddetle tavsiye edilir. “Y” yazıp Enter’a basın. Eğer belirli bir senaryoda uzaktan root erişimi gerekiyorsa, bunun yerine farklı bir kullanıcı oluşturup ona belirli yetkiler vermeniz daha güvenlidir. -
Test Veritabanını Kaldırma:
MySQL, varsayılan olarak “test” adında bir veritabanı ve buna erişim yetkisi olan bir kullanıcı ile gelir. Bu veritabanı genellikle test amaçlı kullanılır ve üretim ortamlarında bir güvenlik riski oluşturur. Betik size bu veritabanını kaldırmak isteyip istemediğinizi soracaktır. “Y” yazıp Enter’a basın. -
Yetki Tablolarını Yeniden Yükleme:
Son olarak, betik sizden yetki tablolarını yeniden yüklemenizi isteyecektir. Bu, yaptığınız tüm değişikliklerin hemen etkili olmasını sağlar. “Y” yazıp Enter’a basın.
Bu adımları tamamladıktan sonra, MySQL sunucunuzun temel güvenlik ayarları yapılmış ve çok daha güvenli bir duruma getirilmiş olacaktır. Artık veritabanınızı oluşturmaya ve kullanıcılarınızı yönetmeye hazırsınız. Unutmayın, güvenlik sürekli bir süreçtir ve sunucunuzu düzenli olarak kontrol etmeniz ve güncel tutmanız önemlidir.
MySQL Veritabanı Yönetimi İçin Temel Komutlar ve Kullanıcı Oluşturma
MySQL sunucunuzu kurup güvenlik ayarlarını yaptıktan sonra, artık veritabanı oluşturma, kullanıcı tanımlama ve bu kullanıcılara yetki verme gibi temel yönetim işlemlerini gerçekleştirmeye hazırsınız. Bu bölüm, MySQL komut satırı arayüzünü (CLI) kullanarak bu işlemleri nasıl yapacağınızı adım adım göstermektedir. Bu komutlar, hem yeni başlayanlar hem de deneyimli kullanıcılar için veritabanı yönetiminin temelini oluşturur.
-
MySQL Komut Satırına Bağlanma:
MySQL sunucusuna bağlanmak içinmysqlistemcisini kullanırız. Güvenlik betiğinde belirlediğiniz root şifresini kullanarak bağlanabilirsiniz:mysql -u root -pBu komutu çalıştırdıktan sonra sizden root şifrenizi girmeniz istenecektir. Şifreyi doğru girdiğinizde, MySQL komut istemine düşeceksiniz (
mysql>). -
Yeni Bir Veritabanı Oluşturma:
Web uygulamanız veya projeniz için yeni bir veritabanı oluşturmanız gerekecektir. Veritabanı isimleri genellikle küçük harfle ve alt çizgi ile ayrılmış olarak verilir (snake_case).CREATE DATABASE my_webapp_db;Bu komut,
my_webapp_dbadında yeni bir veritabanı oluşturur. Komutların sonunda noktalı virgül (;) kullanmayı unutmayın.
Mevcut veritabanlarını görmek için:SHOW DATABASES; -
Yeni Bir Kullanıcı Oluşturma:
Uygulamalarınızın veya diğer kullanıcılarınızın doğrudan root kullanıcısı ile bağlanması güvenlik açısından önerilmez. Her uygulama veya kullanıcı için özel bir veritabanı kullanıcısı oluşturmak en iyi uygulamadır.CREATE USER 'webapp_user'@'localhost' IDENTIFIED BY 'GucluSifreBuraya!';Bu komut,
webapp_useradında, yalnızcalocalhost‘tan bağlanabilen veGucluSifreBuraya!şifresine sahip bir kullanıcı oluşturur.'webapp_user': Oluşturulacak kullanıcının adı.'@'localhost': Kullanıcının bağlanabileceği host.'%'kullanırsanız, kullanıcı herhangi bir hosttan bağlanabilir (daha az güvenli). Belirli bir IP adresi (örn.'192.168.1.100') de belirtebilirsiniz.IDENTIFIED BY 'GucluSifreBuraya!': Kullanıcının şifresi. Güçlü bir şifre seçtiğinizden emin olun.
-
Kullanıcıya Yetki Verme:
Yeni oluşturduğunuz kullanıcının, oluşturduğunuz veritabanı üzerinde işlem yapabilmesi için yetkilendirilmesi gerekir.GRANT ALL PRIVILEGES ON my_webapp_db.* TO 'webapp_user'@'localhost';Bu komut,
webapp_userkullanıcısınamy_webapp_dbveritabanı üzerindeki tüm yetkileri (tablo oluşturma, veri ekleme, güncelleme, silme vb.) verir.ALL PRIVILEGES: Tüm yetkiler. Belirli yetkiler vermek isterseniz (örn.SELECT, INSERT, UPDATE, DELETE), bunları virgülle ayırarak listeleyebilirsiniz.ON my_webapp_db.*: Yetkilerin hangi veritabanı ve tablolara uygulanacağını belirtir.*.*kullanırsanız, tüm veritabanları ve tablolara yetki vermiş olursunuz (genellikle önerilmez).
Yetkileri uyguladıktan sonra, yetki tablolarını yeniden yüklemeniz gerekir:
FLUSH PRIVILEGES; -
Mevcut Kullanıcı Şifresini Değiştirme:
Bir kullanıcının şifresini değiştirmek için aşağıdaki komutu kullanabilirsiniz:ALTER USER 'webapp_user'@'localhost' IDENTIFIED BY 'YeniGucluSifre!'; -
Bir Kullanıcıyı Silme:
Bir kullanıcıyı sistemden kaldırmak için:DROP USER 'webapp_user'@'localhost';
Bu temel komutlar, MySQL veritabanı sunucunuzu etkin bir şekilde yönetmeniz için size gerekli araçları sağlar. Her zaman en az yetki prensibini uygulayın; yani bir kullanıcıya veya uygulamaya yalnızca işini yapması için kesinlikle gerekli olan yetkileri verin. Bu, güvenlik risklerini önemli ölçüde azaltacaktır. Ayrıca, şifrelerinizi düzenli olarak değiştirmeyi ve güçlü şifre politikaları kullanmayı ihmal etmeyin.
Gerçek Dünya Senaryosu: Bir Web Uygulaması İçin MySQL Veritabanı Kurulumu ve Optimizasyonu
Şimdiye kadar MySQL’i CentOS üzerine kurmayı ve temel güvenlik ayarlarını yapmayı öğrendik. Ancak gerçek dünyada, bir veritabanı sunucusu sadece kurulmakla kalmaz, aynı zamanda bir amaca hizmet eder. Bu bölümde, bir e-ticaret web uygulaması için MySQL veritabanı kurulumunu ve optimizasyonunu içeren bir vaka analizini ele alacağız. Bu senaryo, uygulamanızın performansını ve güvenliğini nasıl artırabileceğinize dair pratik bilgiler sunacaktır.
Vaka Analizi: E-ticaret Platformu Veritabanı
Diyelim ki, aylık ortalama 100.000 ziyaretçi alan, ürün katalogları, müşteri bilgileri, sipariş geçmişleri ve ödeme işlemleri gibi büyük miktarda veri barındıran bir e-ticaret platformu geliştiriyorsunuz. Bu platformun sorunsuz çalışması için hızlı ve güvenilir bir MySQL altyapısına ihtiyacı var.
-
Veritabanı ve Kullanıcı Oluşturma:
İlk adım, e-ticaret uygulamanız için özel bir veritabanı ve kullanıcı oluşturmaktır.mysql -u root -p CREATE DATABASE ecommerce_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'ecommerce_user'@'localhost' IDENTIFIED BY 'eCommerceSifre#2024'; GRANT ALL PRIVILEGES ON ecommerce_db.* TO 'ecommerce_user'@'localhost'; FLUSH PRIVILEGES; EXIT;Burada
utf8mb4karakter setini veutf8mb4_unicode_cikarşılaştırma düzenini kullandık. Bu, emoji ve çeşitli dillerdeki karakterleri desteklemek için modern web uygulamaları için en iyi uygulamadır. -
Performans Optimizasyonu (
my.cnfAyarları):
MySQL’in varsayılan ayarları genellikle genel amaçlıdır ve yoğun yüklü bir e-ticaret sitesi için yeterli olmayabilir. Performansı artırmak içinmy.cnf(veya/etc/my.cnf) dosyasında bazı ince ayarlar yapmanız gerekebilir. Bu dosya, MySQL sunucusunun davranışını kontrol eden yapılandırma ayarlarını içerir.sudo vim /etc/my.cnfAşağıdaki gibi önemli ayarları
[mysqld]bölümüne ekleyebilirsiniz:[mysqld] # Genel Ayarlar port = 3306 datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock log-error = /var/log/mysqld.log pid-file = /var/run/mysqld/mysqld.pid # InnoDB Ayarları (Çoğu web uygulaması için önerilen depolama motoru) innodb_buffer_pool_size = 2G # Sunucunuzun RAM'inin %50-70'i innodb_log_file_size = 256M innodb_flush_log_at_trx_commit = 1 # Veri güvenliği için 1, performans için 2 innodb_file_per_table = 1 # Her tablo için ayrı .ibd dosyası # Bağlantı Ayarları max_connections = 200 # Uygulamanızın eş zamanlı bağlantı ihtiyacına göre wait_timeout = 60 # Bağlantıların ne kadar süre aktif kalacağı # Sorgu Önbelleği (MySQL 8.0'da kaldırılmıştır, daha eski sürümler için) # query_cache_size = 0 # MySQL 8.0 için bu satırı kullanmayın # query_cache_type = 0 # MySQL 8.0 için bu satırı kullanmayın # Log Ayarları (Performans izleme ve hata ayıklama için) slow_query_log = 1 slow_query_log_file = /var/log/mysql-slow.log long_query_time = 1 # 1 saniyeden uzun süren sorguları loglaBu ayarları yaptıktan sonra MySQL servisini yeniden başlatmayı unutmayın:
sudo systemctl restart mysqldUzman İpucu:innodb_buffer_pool_size, MySQL’in en kritik performans ayarlarından biridir. Bu, veritabanı verilerinin ve indekslerinin bellekte önbelleklendiği alandır. Genellikle sunucunuzun toplam RAM’inin %50 ila %70’ini bu parametreye atamak iyi bir başlangıç noktasıdır. Ancak, bu değeri diğer servislerin (web sunucusu, PHP-FPM vb.) RAM ihtiyacını göz önünde bulundurarak belirlemelisiniz. -
İndeksleme Stratejileri:
Büyük tablolarda hızlı sorgu performansı için indeksleme hayati öneme sahiptir. E-ticaret platformunda, ürün ID’leri, müşteri ID’leri, sipariş ID’leri, ürün kategorileri ve arama terimleri gibi sıkça sorgulanan sütunlara indeks eklemelisiniz.ALTER TABLE products ADD INDEX idx_product_category (category_id); ALTER TABLE orders ADD INDEX idx_order_customer (customer_id);Doğru indeksleme, sorgu sürelerini katlanarak azaltabilir. Ancak çok fazla indeks de yazma (INSERT, UPDATE) işlemlerini yavaşlatabilir, bu yüzden dengeli bir yaklaşım önemlidir.
-
Yedekleme Stratejileri:
Veri kaybı, bir e-ticaret platformu için felaket anlamına gelir. Düzenli yedekleme stratejileri oluşturmak zorunludur.# Tam veritabanı yedeklemesi sudo mysqldump -u ecommerce_user -p ecommerce_db > /var/backups/ecommerce_db_$(date +%Y%m%d%H%M%S).sql # Sadece belirli tabloların yedeklemesi sudo mysqldump -u ecommerce_user -p ecommerce_db products customers > /var/backups/ecommerce_products_customers_$(date +%Y%m%d%H%M%S).sqlBu yedekleri otomatik hale getirmek için
cronişleri kullanabilir ve yedekleri farklı bir sunucuya veya bulut depolama alanına aktarabilirsiniz. -
Mobil Uyumlu Yönetim ve İzleme:
MySQL sunucunuzu yönetmek için phpMyAdmin gibi web tabanlı araçları kullanabilirsiniz. Bu araçlar genellikle mobil cihazlardan erişilebilir arayüzler sunar. Ayrıca, sunucu ve veritabanı performansını izlemek için Prometheus/Grafana gibi araçlar kurarak mobil cihazlardan da anlık durum takibi yapabilirsiniz. Uygulamanızın kendisinin de mobil uyumlu bir arayüze sahip olması, kullanıcı deneyimi açısından kritik öneme sahiptir.Mobil Uyumlu Tasarım İpucu: Web uygulamaları ve yönetim panelleri için CSS Media Query’ler kullanarak farklı ekran boyutlarına uyum sağlayın. Örneğin, küçük ekranlarda menüleri gizleyip hamburger menü ikonuyla açma, sütunları alt alta sıralama gibi teknikler uygulayın. Aşağıdaki HTML yapısı, CSS ile mobil uyumlu hale getirilebilir:
<div class="container"> <div class="header">...</div> <div class="main-content">...</div> <div class="sidebar">...</div> </div>Bu yapıyı hedefleyen bir CSS dosyasında,
@media (max-width: 768px) { ... }gibi kurallar tanımlayarak tablet ve telefonlar için farklı stiller uygulayabilirsiniz.
Bu vaka analizi, sadece kurulumdan öteye geçerek, bir web uygulamasının gerçek ihtiyaçlarına yönelik MySQL yapılandırması ve optimizasyonunun nasıl yapılacağına dair bir çerçeve sunmaktadır. Unutmayın ki her uygulamanın kendine özgü ihtiyaçları vardır ve bu ayarlar, uygulamanızın özel gereksinimlerine göre ayarlanmalıdır.
MySQL Performansını Artırmak ve Sorun Giderme İpuçları Nelerdir?
MySQL, doğru yapılandırılmadığında veya optimize edilmediğinde yavaşlayabilir ve web uygulamalarınızın genel performansını olumsuz etkileyebilir. Bu bölümde, MySQL performansını artırmak için kullanabileceğiniz ileri düzey ipuçlarını ve yaygın sorun giderme tekniklerini ele alacağız. Bu bilgiler, veritabanınızın her zaman en iyi şekilde çalışmasını sağlamanıza yardımcı olacaktır.
-
Sorgu Optimizasyonu ve
EXPLAINKullanımı:
Yavaş çalışan sorgular, performans sorunlarının en yaygın nedenidir. MySQL’inEXPLAINkomutu, bir sorgunun nasıl yürütüldüğünü ve hangi indeksleri kullandığını analiz etmenizi sağlar.EXPLAIN SELECT * FROM products WHERE category_id = 5 AND price > 100 ORDER BY created_at DESC;EXPLAINçıktısı, sorgunun ne kadar süreceği, hangi tablolara erişildiği, hangi indekslerin kullanıldığı veya kullanılmadığı hakkında değerli bilgiler sunar. EğerEXPLAINçıktısında “Using filesort” veya “Using temporary” gibi ifadeler görüyorsanız, bu genellikle bir indeks eksikliği veya sorgunun yeniden yazılması gerektiği anlamına gelir. -
İndekslerin Doğru Kullanımı:
İndeksler, veritabanı sorgularını hızlandırmanın en etkili yollarından biridir. Ancak yanlış veya aşırı indeksleme, yazma işlemlerini yavaşlatabilir.- Sıkça sorgulanan sütunlara indeks ekleyin (
WHERE,ORDER BY,GROUP BYyan tümcelerinde kullanılanlar). - JOIN işlemlerinde kullanılan sütunlara indeks ekleyin.
- Küçük tablolar için indeksler genellikle gereksizdir.
- Çok fazla benzersiz değeri olmayan sütunlarda indeksler (örn. cinsiyet gibi) daha az etkilidir.
- Birleşik indeksler (composite indexes) birden fazla sütunu içeren sorgular için faydalıdır.
- Sıkça sorgulanan sütunlara indeks ekleyin (
-
InnoDB Buffer Pool Optimizasyonu:
Daha önce de belirtildiği gibi,innodb_buffer_pool_size, InnoDB depolama motorunun en kritik ayarıdır. Bu, sıkça erişilen verilerin ve indekslerin bellekte tutulmasını sağlar. Yetersiz boyutlandırıldığında, MySQL diske daha fazla yazma/okuma yapmak zorunda kalır, bu da performansı düşürür. Sunucunuzun özel kullanımına göre bu değeri optimize etmek, performansı önemli ölçüde artırabilir. -
Yavaş Sorgu Günlüğü (Slow Query Log) Analizi:
my.cnfdosyasındaslow_query_log‘u etkinleştirerek velong_query_time‘ı belirleyerek, belirli bir süreden daha uzun süren sorguları loglayabilirsiniz.slow_query_log = 1 slow_query_log_file = /var/log/mysql-slow.log long_query_time = 1Bu log dosyasını düzenli olarak incelemek, hangi sorguların optimize edilmesi gerektiğini belirlemenize yardımcı olur.
mysqldumpslowgibi araçlar bu logları analiz etmenizi kolaylaştırır. -
Bağlantı Havuzları (Connection Pooling):
Özellikle yüksek trafikli web uygulamalarında, her yeni bağlantı için bir MySQL bağlantısı açmak ve kapatmak ek yük oluşturur. Uygulama tarafında bağlantı havuzları kullanmak, mevcut bağlantıları yeniden kullanarak bu yükü azaltır ve performansı artırır. Bu, PHP-FPM, Node.js veya Java gibi uygulama sunucularında yapılandırılabilir. -
Donanım Yükseltmeleri:
Yazılımsal optimizasyonlar bir yere kadar etkilidir. Eğer veritabanınız sürekli olarak yüksek CPU kullanımı, I/O beklemesi veya bellek yetersizliği yaşıyorsa, daha hızlı CPU, daha fazla RAM veya SSD depolama birimlerine yatırım yapmak en etkili çözüm olabilir.
Yaygın Sorunlar ve Çözümleri:
| Sorun | Olası Neden | Çözüm |
|---|---|---|
| MySQL servisi başlamıyor. | Yapılandırma hatası (my.cnf), port çakışması, yetersiz bellek/depolama, bozuk veritabanı dosyaları. | /var/log/mysqld.log dosyasını kontrol edin. my.cnf dosyasındaki hataları düzeltin. Yeterli kaynak olduğundan emin olun. |
| Uygulama MySQL’e bağlanamıyor. | Güvenlik duvarı engeli, yanlış kullanıcı/şifre, yanlış host (örn. localhost yerine IP), MySQL servisi çalışmıyor. | Güvenlik duvarı (3306 portu) ayarlarını kontrol edin. Kullanıcı adı ve şifrenin doğru olduğundan emin olun. mysql_secure_installation sırasında uzaktan erişim kapatılmış olabilir. |
| Sorgular çok yavaş çalışıyor. | İndeks eksikliği, kötü yazılmış sorgular, yetersiz innodb_buffer_pool_size, donanım yetersizliği. |
EXPLAIN kullanarak sorguları analiz edin. Gerekli indeksleri ekleyin. my.cnf ayarlarını optimize edin. Donanım yükseltmeyi düşünün. |
| Disk alanı hızla tükeniyor. | Büyük log dosyaları (binlog, slow query log), çok büyük tablolar, gereksiz yedekler. | Log rotasyonu ayarlayın. Gereksiz logları temizleyin. Büyük tabloları optimize edin veya arşivleyin. Yedekleme stratejinizi gözden geçirin. |
Bu ipuçları ve sorun giderme yaklaşımları, MySQL veritabanınızın hem performanslı hem de sorunsuz çalışmasını sağlamak için size kapsamlı bir bakış açısı sunar. Düzenli izleme, analiz ve optimizasyon, sağlıklı bir veritabanı ortamının anahtarıdır.
Sonuç: CentOS Üzerine MySQL Kurulumu Hakkında Sıkça Sorulan Sorular
Bu kapsamlı rehber boyunca, CentOS işletim sistemi üzerine MySQL veritabanı sunucusunun adım adım nasıl kurulacağını, temel güvenlik ayarlarının nasıl yapılacağını ve veritabanı yönetiminin temel prensiplerini detaylı bir şekilde inceledik. Ayrıca, gerçek dünya senaryolarıyla performans optimizasyonu ve sorun giderme ipuçlarına değinerek, MySQL’i sadece kurmakla kalmayıp, onu verimli ve güvenli bir şekilde nasıl işleteceğinize dair pratik bilgiler sunduk. CentOS’un kararlı yapısı ve MySQL’in güçlü özelliklerinin birleşimi, her türlü uygulama için sağlam bir veri altyapısı oluşturmanızı sağlar.
Doğru kurulum, titiz güvenlik önlemleri ve sürekli optimizasyon ile MySQL sunucunuzun uygulamalarınız için güvenilir ve yüksek performanslı bir omurga görevi görmesini sağlayabilirsiniz. Unutmayın ki veritabanı yönetimi sürekli öğrenme ve adapte olma gerektiren bir alandır. Bu rehberdeki bilgileri temel alarak, kendi özel ihtiyaçlarınıza göre derinlemesine araştırmalar yapmaya ve sisteminizi daha da geliştirmeye devam edebilirsiniz.
Sıkça Sorulan Sorular
-
CentOS’ta MySQL yerine MariaDB kullanmak daha mı iyi?
MariaDB, MySQL’in topluluk tarafından geliştirilen bir çatalıdır ve birçok yönden MySQL ile uyumludur. CentOS 7 ve sonraki sürümlerinde varsayılan olarak MariaDB gelmektedir. Performans, özellikler ve kararlılık açısından her ikisi de güçlüdür. Seçiminiz, projenizin özel gereksinimlerine, alışkanlıklarınıza ve topluluk desteğine bağlı olabilir. Bu rehberde MySQL’in resmi deposu kullanılarak kurulum anlatılmıştır, ancak MariaDB de CentOS üzerinde popüler ve güçlü bir alternatiftir.
-
MySQL root şifremi unuttum, nasıl sıfırlayabilirim?
MySQL root şifresini unuttuysanız, sunucuyu güvenli modda (
--skip-grant-tablesile) başlatarak şifreyi sıfırlayabilirsiniz. İşlem adımları genellikle şunları içerir: MySQL servisini durdurma,my.cnfdosyasını düzenleyerek güvenli modda başlatma, MySQL’e şifresiz bağlanma, şifreyi sıfırlama,my.cnfdosyasını eski haline getirme ve servisi normal modda yeniden başlatma. Bu işlem dikkatli yapılmalıdır. -
MySQL veritabanımı uzaktan erişime nasıl açabilirim?
MySQL’e uzaktan erişim sağlamak için iki ana adım vardır:
- Güvenlik Duvarı: CentOS sunucunuzun güvenlik duvarında (Firewalld) 3306 portunu açmanız gerekir:
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload. - MySQL Kullanıcısı: MySQL içinde, uzaktan bağlanabilecek bir kullanıcı oluşturmanız veya mevcut bir kullanıcının host ayarını
'%'veya belirli bir IP adresi olarak değiştirmeniz gerekir:CREATE USER 'myuser'@'%' IDENTIFIED BY 'password';veyaALTER USER 'myuser'@'localhost' IDENTIFIED BY 'password';ardındanGRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'%';veFLUSH PRIVILEGES;. Ayrıca,my.cnfdosyasındabind-addressayarının sunucunuzun IP adresine veya0.0.0.0‘a ayarlandığından emin olun (varsayılan olarak127.0.0.1olabilir, bu da sadece yerel erişim demektir).
- Güvenlik Duvarı: CentOS sunucunuzun güvenlik duvarında (Firewalld) 3306 portunu açmanız gerekir:
-
MySQL veritabanı yedeklemesi için hangi araçları kullanmalıyım?
MySQL veritabanı yedeklemesi için en yaygın ve etkili araçlar şunlardır:
mysqldump: Komut satırı tabanlı, veritabanını SQL formatında yedeklemek için kullanılır. Küçük ve orta ölçekli veritabanları için idealdir.mysqlpump: MySQL 5.7 ve sonraki sürümlerde gelen,mysqldump‘a göre daha hızlı ve paralel yedekleme yetenekleri sunan bir araçtır.Percona XtraBackup: Büyük, yoğun yüklü InnoDB veritabanları için fiziksel (hot) yedeklemeler yapabilen açık kaynaklı bir araçtır. Servisi durdurmadan yedekleme yapabilir.
Bu araçları
cronişleriyle otomatikleştirerek düzenli yedeklemeler yapmanız şiddetle tavsiye edilir.
