Merhaba arkadaşlar, bugün sizlere MySQL veya MariaDB sunucularımızda sıkça ihtiyaç duyduğumuz bir konuyu, sistem değişkenlerini (variables) nasıl yöneteceğimizi anlatacağım. Performans ayarlaması yaparken, bir sorunu giderirken veya sadece mevcut konfigürasyonu kontrol ederken bu komutları bilmek çok işinize yarayacak. Hadi başlayalım!
Sistem Değişkenleri Nedir?
MySQL/MariaDB'nin çalışma şeklini kontrol eden yüzlerce ayar vardır. Bunlara sistem değişkenleri diyoruz. `max_connections`, `innodb_buffer_pool_size`, `query_cache_size` gibi kritik ayarların hepsi bu kapsamdadır. Bu değişkenlerin iki kapsamı vardır: GLOBAL (tüm sunucu ve yeni bağlantılar için geçerli) ve SESSION (sadece mevcut bağlantınız için geçerli).
Değişkenleri Görüntüleme
Hangi değişkenin ne değere sahip olduğunu görmek için `SHOW VARIABLES` komutunu kullanırız. Komutu veritabanı yönetim aracınızda (phpMyAdmin, HeidiSQL, terminal) veya doğrudan MySQL komut satırında çalıştırabilirsiniz.
Tüm değişkenleri listelemek için:
Belirli bir değişkeni aramak için `LIKE` kullanın:
Sadece global değişkenleri görmek isterseniz:
Değişkenleri Değiştirme (Geçici)
Bir değişkeni geçici olarak değiştirmek, sunucuyu yeniden başlatana kadar veya mevcut oturumunuz sonlanana kadar geçerlidir. Bunun için `SET` komutunu kullanırız.
Global bir değişkeni değiştirmek (sunucuyu yeniden başlatınca eski haline döner):
Sadece mevcut oturumunuz (SESSION) için değiştirmek:
Eğer kapsam belirtmezseniz, varsayılan olarak SESSION kabul edilir. Yani yukarıdaki komut şununla aynıdır:
Dikkat Edilmesi Gerekenler
Dinamik (Dynamic) vs Statik (Static) Değişkenler: Her değişken çalışma anında (runtime) değiştirilemez. `innodb_buffer_pool_size` gibi bazı kritik değişkenler statiktir ve değişikliğin etkili olması için sunucunun yeniden başlatılması gerekir. Bir değişkenin dinamik olup olmadığını öğrenmek için resmi dokümantasyona bakmalısınız.
Geçersiz Değerler: Yanlış bir değer verirseniz (örn: negatif sayı), MySQL genellikle sizi uyarır ve değişikliği kabul etmez.
Yetki: `SET GLOBAL` komutunu kullanabilmek için `SYSTEM_VARIABLES_ADMIN` veya eski adıyla `SUPER` yetkisine sahip olmanız gerekir.
Değişiklikleri Kalıcı Yapma
Geçici değişiklikler sunucu restart edildiğinde kaybolur. Değişikliğin kalıcı olmasını istiyorsanız, konfigürasyon dosyasını (/etc/mysql/my.cnf veya /etc/my.cnf.d/server.cnf) düzenlemeniz gerekir.
Örneğin, `max_connections` değerini kalıcı olarak 500 yapmak için ilgili dosyayı açın ve `[mysqld]` bölümü altına şu satırı ekleyin:
Değişikliği kaydettikten sonra, değiştirdiğiniz değişken dinamikse sunucuyu yeniden başlatmanıza gerek kalmayabilir. Statik bir değişkense MUTLAKA MySQL/MariaDB servisini yeniden başlatmalısınız:
Pratik İpucu
Ben sunucularda bir ayarı test etmek istediğimde önce `SET GLOBAL` ile geçici olarak uyguluyorum, performansı veya davranışı gözlemliyorum. Eğer sorun yoksa ve sonuçtan memnunsam, o zaman konfigürasyon dosyasına ekleyip kalıcı hale getiriyorum. Bu, canlı sistemlerde hata yapma riskini azaltan güvenli bir yöntem.
Umarım bu rehber işinize yaramıştır. Siz bu konfigürasyonları kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya eklemek istediğiniz bir püf noktası var mı? Aşağıya yorum olarak yazabilirsiniz. Sorularınız için çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım.
MySQL/MariaDB'nin çalışma şeklini kontrol eden yüzlerce ayar vardır. Bunlara sistem değişkenleri diyoruz. `max_connections`, `innodb_buffer_pool_size`, `query_cache_size` gibi kritik ayarların hepsi bu kapsamdadır. Bu değişkenlerin iki kapsamı vardır: GLOBAL (tüm sunucu ve yeni bağlantılar için geçerli) ve SESSION (sadece mevcut bağlantınız için geçerli).
Hangi değişkenin ne değere sahip olduğunu görmek için `SHOW VARIABLES` komutunu kullanırız. Komutu veritabanı yönetim aracınızda (phpMyAdmin, HeidiSQL, terminal) veya doğrudan MySQL komut satırında çalıştırabilirsiniz.
Tüm değişkenleri listelemek için:
SQL:
SHOW VARIABLES;
Belirli bir değişkeni aramak için `LIKE` kullanın:
SQL:
SHOW VARIABLES LIKE 'innodb_buffer%';
Sadece global değişkenleri görmek isterseniz:
SQL:
SHOW GLOBAL VARIABLES;
Bir değişkeni geçici olarak değiştirmek, sunucuyu yeniden başlatana kadar veya mevcut oturumunuz sonlanana kadar geçerlidir. Bunun için `SET` komutunu kullanırız.
Global bir değişkeni değiştirmek (sunucuyu yeniden başlatınca eski haline döner):
SQL:
SET GLOBAL max_connections = 500;
Sadece mevcut oturumunuz (SESSION) için değiştirmek:
SQL:
SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
Eğer kapsam belirtmezseniz, varsayılan olarak SESSION kabul edilir. Yani yukarıdaki komut şununla aynıdır:
SQL:
SET sql_mode = 'STRICT_TRANS_TABLES';
Dinamik (Dynamic) vs Statik (Static) Değişkenler: Her değişken çalışma anında (runtime) değiştirilemez. `innodb_buffer_pool_size` gibi bazı kritik değişkenler statiktir ve değişikliğin etkili olması için sunucunun yeniden başlatılması gerekir. Bir değişkenin dinamik olup olmadığını öğrenmek için resmi dokümantasyona bakmalısınız.
Geçersiz Değerler: Yanlış bir değer verirseniz (örn: negatif sayı), MySQL genellikle sizi uyarır ve değişikliği kabul etmez.
Yetki: `SET GLOBAL` komutunu kullanabilmek için `SYSTEM_VARIABLES_ADMIN` veya eski adıyla `SUPER` yetkisine sahip olmanız gerekir.
Geçici değişiklikler sunucu restart edildiğinde kaybolur. Değişikliğin kalıcı olmasını istiyorsanız, konfigürasyon dosyasını (/etc/mysql/my.cnf veya /etc/my.cnf.d/server.cnf) düzenlemeniz gerekir.
Örneğin, `max_connections` değerini kalıcı olarak 500 yapmak için ilgili dosyayı açın ve `[mysqld]` bölümü altına şu satırı ekleyin:
INI:
[mysqld]
max_connections = 500
Değişikliği kaydettikten sonra, değiştirdiğiniz değişken dinamikse sunucuyu yeniden başlatmanıza gerek kalmayabilir. Statik bir değişkense MUTLAKA MySQL/MariaDB servisini yeniden başlatmalısınız:
Bash:
sudo systemctl restart mariadb
# veya
sudo systemctl restart mysql
Ben sunucularda bir ayarı test etmek istediğimde önce `SET GLOBAL` ile geçici olarak uyguluyorum, performansı veya davranışı gözlemliyorum. Eğer sorun yoksa ve sonuçtan memnunsam, o zaman konfigürasyon dosyasına ekleyip kalıcı hale getiriyorum. Bu, canlı sistemlerde hata yapma riskini azaltan güvenli bir yöntem.
Umarım bu rehber işinize yaramıştır. Siz bu konfigürasyonları kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya eklemek istediğiniz bir püf noktası var mı? Aşağıya yorum olarak yazabilirsiniz. Sorularınız için çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım.