MariaDB'nin yapılandırma dosyalarına resmî belgelerde "option file" denir; Linux ve Unix'te varsayılan dosyanın adı my.cnf, Windows'ta my.ini'dir. Sunucu da istemciler de birden fazla konumdaki dosyaları belirli bir sırayla okur, her dosyada yalnızca kendilerini ilgilendiren [grup] bölümlerini dikkate alır ve aynı seçenek birden fazla yerde tanımlıysa en son okunan değer geçerli olur. Bir programın hangi dosyaları okuduğunu --help --verbose, hangi değerlerle başlayacağını --print-defaults ile görürsünüz.
Bu yazıda dosyaların okunma sırasını, sözdizimini, sunucu, istemci ve araç gruplarını, !include ve !includedir yönergelerini, loose ve skip gibi önekleri, tire ile alt çizgi farkını ve "bu değer hangi dosyadan geliyor?" sorusunun cevabını belgelere dayanarak anlatıyoruz. Belirli ayarların kendisi (bellek, günlükler, ağ) serinin ilgili yazılarında ele alınıyor.
Dosyalar hangi sırayla okunur?

Linux ve Unix'te arama listesi, MariaDB derlenirken DEFAULT_SYSCONFDIR cmake seçeneğinin tanımlanıp tanımlanmadığına göre değişir. Belgelere göre bu seçenek RPM paketleri derlenirken genellikle /etc olarak tanımlanır; DEB paketlerinde ve ikili tar arşivlerinde ise genellikle tanımlanmaz.
| Sıra | DEFAULT_SYSCONFDIR tanımsızsa | DEFAULT_SYSCONFDIR tanımlıysa | Kapsam |
|---|---|---|---|
| 1 | /etc/my.cnf | DEFAULT_SYSCONFDIR/my.cnf | Genel |
| 2 | /etc/mysql/my.cnf | (yok) | Genel |
| 3 | $MARIADB_HOME/my.cnf | $MARIADB_HOME/my.cnf | Sunucu (MariaDB 10.6 ve sonrası) |
| 4 | $MYSQL_HOME/my.cnf | $MYSQL_HOME/my.cnf | Sunucu (10.6 öncesi) |
| 5 | --defaults-extra-file ile verilen dosya | --defaults-extra-file ile verilen dosya | Varsa |
| 6 | ~/.my.cnf | ~/.my.cnf | Kullanıcı |
MariaDB bir dosya bulsa bile bu konumların hepsine sırayla bakar; birden fazla dosyanın bulunması normaldir. Örneğin /etc/my.cnf bütün sunucular için genel ayarları, ev dizininizdeki ~/.my.cnf ise yalnızca sizin kullanıcınıza ait ek ya da ezici ayarları tutabilir. MARIADB_HOME tanımlıysa MYSQL_HOME tanımlı olsa bile kullanılmaz. Dosyalar genellikle isteğe bağlıdır; ancak --defaults-file ile verilen dosya yoksa MariaDB hata verir ve bu seçenek verildiğinde yalnızca o dosya okunur.
Kendi sisteminizdeki kesin listeyi görmenin yolu programı --help --verbose ile çalıştırmaktır. Çıktıdaki "Default options are read from the following files in the given order" satırı dosyaları, "The following groups are read" satırı da okunacak grupları listeler:
mariadbd --help --verboseBelgeler, dosyaların her birinin bu sırayla bir kez tarandığını ve etkinin, seçenekler bulundukları sırayla komut satırında verilmiş gibi olduğunu belirtir. Belirli bir seçenek açıkça ayarlanmamışsa varsayılan değerini alır.
Ek dosya ile geçici ayar: --defaults-extra-file
Bazen genel dosyalara dokunmadan bir programı ek ayarlarla çalıştırmak istersiniz; örneğin bir bakım betiğinin farklı bir kullanıcıyla bağlanması gibi. --defaults-extra-file=yol verilen dosyayı genel dosyalardan sonra ek olarak okutur; konum tablosunda bu dosya kullanıcıya ait ~/.my.cnf dosyasından hemen önce yer alır. --defaults-file ise bütün varsayılan konumları devre dışı bırakır ve yalnızca verilen dosyayı okur. İkisi arasındaki fark önemlidir: ilki ekler, ikincisi yerine geçer. Her iki seçenek de komut satırında ilk argüman olmalıdır. Windows'ta arama listesi farklıdır; belgeler sistem Windows dizini, C:\ kökü, kurulum dizini ve veri dizini gibi konumları my.ini ve my.cnf adlarıyla sırayla sayar.
Sözdizimi kuralları
#ile başlayan satırlar yorumdur; boş satırlar yok sayılır.- Gruplar
[grup-adi]biçiminde açılır ve aynı grup dosyada birden fazla kez geçebilir. - Seçenekler komut satırındaki adıyla ama baştaki
--olmadan yazılır: komut satırındaki--log-bindosyadalog-binolur. - Seçenek adlarında tire ve alt çizgi birbirinin yerine kullanılabilir.
- Değerler çift tırnak içine alınabilir;
\n,\t,\s(boşluk),\\gibi kaçış dizileri tanınır. !includebaşka bir dosyayı,!includedirbir dizindeki bütün.cnfdosyalarını dahil eder.- Belgelere göre seçenek adları büyük-küçük harfe duyarlıdır.
Minimal bir sunucu dosyası şöyle görünebilir. Değerler örnektir; her ayarın anlamını ilgili yazılarda bulabilirsiniz:
[client-server]
port=3306
[client]
default-character-set=utf8mb4
[mariadb]
bind-address=127.0.0.1
log-basename=db1
slow_query_log
long_query_time=2[client-server] grubundaki port hem sunucu hem istemciler tarafından okunur; böylece ikisinin aynı portu kullandığından emin olursunuz. Belgeler bu grubun socket ve port gibi ortak ayarlar için uygun olduğunu söyler. Ağ ayarları için bind-address yazısına, günlükler için error log ve slow query log yazısına, karakter seti için utf8mb4 yazısına bakın.
Gruplar: hangi program hangi bölümü okur?
Her program yalnızca kendisi için tanımlı grupları okur; bu sayede tek bir dosyada sunucu, istemci ve araç ayarlarını bir arada tutabilirsiniz.
| Grup | Okuyan |
|---|---|
| [client-server] | Bütün MariaDB istemcileri ve sunucu |
| [server] | MariaDB Server |
| [mysqld] | MariaDB Server ve MySQL Server |
| [mysqld-X.Y] | Belirli bir sürümdeki mysqld |
| [mariadb], [mariadbd] | MariaDB Server |
| [mariadb-X.Y], [mariadbd-X.Y] | Belirli bir ana.alt sürümdeki MariaDB Server |
| [galera] | Galera desteğiyle derlenmiş sunucu (Linux derlemelerinin tamamı) |
| [client] | Bütün MariaDB ve MySQL istemcileri, örneğin mariadb-dump |
| [client-mariadb] | Bütün MariaDB istemcileri |
| [mariadb-client], [mysql] | mariadb komut satırı istemcisi |
| [mariadb-dump], [mariadb-backup], [mariadb-admin] ... | İlgili araç |
Sürüme özel gruplarda X.Y ana ve alt sürümü ifade eder; belgelere göre MariaDB 11.4, [mariadb-11.4] grubunu okur. Aynı kurala göre 12.3 sunucusu [mariadb-12.3] grubunu okur. Bu, MySQL ile ortak kullanılan bir dosyada yalnızca MariaDB'nin anladığı seçenekleri [mariadb] grubuna koyarak dosyanın iki ürünle de çalışmasını sağlar. [galera] grubu ise Galera işlevi etkin olmasa bile Linux derlemelerinde okunur.
Araçların kendi grupları da vardır: mariadb-dump [mariadb-dump] ve [mysqldump], mariadb-backup [mariadb-backup] ve [xtrabackup], mariadb-admin [mariadb-admin] ve [mysqladmin] gruplarını okur. Örneğin yedekleme aracına özel ayarları yalnızca onun grubuna yazabilirsiniz. Belgelerin örnek dosyasında şu bölüm vardır:
[mysqldump]
quick
max_allowed_packet=16M!include ve !includedir
Bir dosyadan başka bir dosyayı ya da bütün bir dizini dahil edebilirsiniz:
[mariadb]
!include /etc/mysql/dbserver1.cnf
!includedir /etc/my.cnf.d/Dizindeki dosyalar sözlük sırasıyla değil, dosya adlarının bayt sırasıyla okunur: rakamlar harflerden, büyük harfler küçük harflerden önce gelir. Belgelerin örneğine göre 10-base.cnf dosyası 50-server.cnf dosyasından, o da 99-local.cnf dosyasından önce okunur; Z.cnf ise a.cnf'den önce gelir. Aynı seçenek birden fazla dosyada varsa son okunan dosyadaki değer geçerlidir. Paketlerle gelen dosyaların 50-server.cnf gibi sayısal önekler taşımasının nedeni budur. Kendi değişikliklerinizi paket dosyasını düzenlemek yerine daha büyük önekli ayrı bir dosyaya, örneğin 99-yerel.cnf'ye yazarsanız paket güncellemelerinde ayarlarınız korunur ve etkin olan değer sizinki olur.
Unix benzeri sistemlerde dahil edilen dosyaların adı .cnf ile bitmelidir; Windows'ta .cnf ya da .ini olabilir. Okunamayan bir .cnf dosyası sunucunun ya da istemci aracının hata vererek çıkmasına yol açar. Belgelere göre MariaDB 11.4.10 ve 11.8.6 ile gelen ?includedir yönergesi !includedir gibi çalışır, ancak okunamayan dosyaları hata vermek yerine atlar.
Seçenek önekleri

MariaDB seçenek adlarının önüne eklenen bazı önekleri destekler. Bunlar özellikle eklenti seçeneklerinde ve paylaşılan dosyalarda işe yarar:
| Önek | Etkisi |
|---|---|
| loose | Seçenek yoksa hata verme |
| skip, disable | Mantıksal seçeneği kapat (0 yap) |
| enable | Mantıksal seçeneği aç (1 yap) |
| maximum | Seçeneğin üst sınırını ayarla |
| autoset | Değeri otomatik belirle; yalnızca bazı seçeneklerde |
[mariadb]
enable_slow_query_log
skip_external_locking
loose_file_key_management_filename = /etc/mysql/encryption/keyfile.encloose öneki, yüklü olmayabilecek bir eklentinin seçeneğini yazarken sunucunun "bilinmeyen değişken" hatasıyla açılmamasını önler. Bu güvenlik ağı aynı zamanda bir risktir: yazım hatası yaptığınız bir seçenek de loose ile sessizce yok sayılır.
Tire mi, alt çizgi mi?
Yapılandırma dosyasında ve komut satırında seçenek adlarındaki tire ile alt çizgi birbirinin yerine geçer; slow-query-log ile slow_query_log aynıdır. Çalışma anında sistem değişkenlerine SQL ile başvururken ise yalnızca alt çizgi kullanılabilir. Belgelerdeki örnek bunu açıkça gösterir; tireli yazımda ifade, tirenin çıkarma işareti olarak yorumlanmasıyla hataya düşer:
MariaDB [(none)]> SELECT @debug-no-sync;
ERROR 1054 (42S22): Unknown column 'no' in 'SELECT'Etkin değerleri ve kaynaklarını görmek
Bir programın yapılandırma dosyalarından hangi argümanları alacağını görmek için --print-defaults kullanılır; program seçenekleri yazdırır ve çıkar. Bu seçenek ve --no-defaults, --defaults-file, --defaults-extra-file, --defaults-group-suffix komut satırında ilk argüman olmalıdır:
mariadbd --print-defaults
mariadb-dump --print-defaultsAynı bilgiyi my_print_defaults aracına grup adlarını vererek de alabilirsiniz. --mysqld seçeneği bütün sunucu gruplarını kapsayan bir kısayoldur:
my_print_defaults --mysqld
my_print_defaults mariadb-dump client client-server client-mariadbÇalışan sunucuda "bu değer hangi dosyadan geldi?" sorusunun cevabı INFORMATION_SCHEMA.SYSTEM_VARIABLES tablosundadır. GLOBAL_VALUE_ORIGIN sütunu değerin nereden geldiğini (derleme varsayılanı, sunucunun otomatik ayarı, yapılandırma dosyası ya da komut satırı, SQL ifadesi), GLOBAL_VALUE_PATH ise değerin okunduğu yapılandırma dosyasını gösterir; değer hiçbir dosyada ayarlanmamışsa NULL olur. Dosyalardan gelen bütün değişkenleri listelemek için:
SELECT VARIABLE_NAME, GLOBAL_VALUE, GLOBAL_VALUE_PATH
FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES
WHERE GLOBAL_VALUE_PATH IS NOT NULL;Bu sorgu, birden fazla dahil edilmiş dosyanın bulunduğu kurulumlarda hangi dosyanın gerçekten etkili olduğunu bulmanın en hızlı yoludur. Sistem değişkenlerinin anlamları ve varsayılanları ise belgelerdeki Server System Variables sayfasında listelenir.
Özel grup son eki: --defaults-group-suffix
Programlara, varsayılan gruplara ek olarak belirli bir son eki taşıyan grupları da okumalarını söyleyebilirsiniz. Belgelerin örneğinde istemci için özel bir istem tanımlanır:
[client_custom_group]
prompt='(custom prompt for mariadb client)'mariadb --defaults-group-suffix=_custom_groupVarsayılan son ek MYSQL_GROUP_SUFFIX ortam değişkeniyle de verilebilir. systemd'nin çoklu örnek birimi de bu mekanizmayı kullanır: mariadb@node1 örneği için sunucu gruplarına .node1 son eki eklenir. Ayrıntılar systemd yazısında.
Parolaları dosyada tutmak
İstemci parolasını [client] grubuna yazmak mümkündür ve belgelerin örnek dosyalarında da bu satır yorum olarak yer alır. Bunu yapacaksanız dosyanın yalnızca sizin okuyabileceğiniz izinlere sahip olduğundan emin olun. MySQL'in karartılmış .mylogin.cnf dosyası MariaDB'de desteklenmez; belgelere göre o dosyadaki parolalar şifrelenmez, yalnızca karartılır ve sahte bir güvenlik hissi verebilir. Sunucu makinesindeki yerel yönetim işleri için parola yerine unix_socket kimlik doğrulamasını kullanmak çoğu zaman daha iyi bir seçenektir; bkz. kimlik doğrulama yazısı.
Sık yapılan hatalar

- Sunucuyu açılmaz hale getiren yanlış seçenek: Geçersiz bir seçenek ya da değer olduğunda hata günlüğünde belgelerdekine benzer bir satır görürsünüz:
[ERROR] /usr/local/mysql/bin/mariadbd: unknown variable 'option=value'. Belgeler bunun özellikle sürüm yükseltmesinden sonra, kaldırılmış ya da adı değişmiş seçenekler yüzünden olabileceğini söyler. Bkz. sürüm yükseltme yazısı. - Değişikliği yanlış dosyaya yazmak: Daha sonra okunan bir dosya aynı seçeneği içeriyorsa sizin değeriniz ezilir.
GLOBAL_VALUE_PATHya da--print-defaultsile kontrol edin. - Dosya adını .cnf ile bitirmemek:
!includediryalnızca.cnfuzantılı dosyaları okur;ayarlar.confgibi bir dosya dikkate alınmaz. - Seçeneğin başına -- yazmak: Yapılandırma dosyasında baştaki çift tire yazılmaz.
- Ayarı [mariadbd-safe] grubuna koyup systemd altında beklemek: Bu grup systemd altında okunmaz.
- Her şeyi loose ile yazmak: Yazım hataları sessizce yok sayılır ve ayarın çalıştığını sanırsınız.
- Dinamik olmayan bir değişkeni değiştirip yeniden başlatmamak: Yapılandırma dosyası yalnızca başlangıçta okunur. Dinamik değişkenler
SET GLOBALile hemen değiştirilebilir, ancak kalıcı olmaları için dosyaya da yazılmalıdır.
Sık Sorulan Sorular
my.cnf'de yaptığım değişiklik ne zaman geçerli olur?
Sunucu yapılandırma dosyalarını başlarken okur; değişikliğin etkili olması için sunucuyu yeniden başlatmanız gerekir. Değişken dinamikse aynı değeri çalışan sunucuya SET GLOBAL ile de verebilirsiniz; bir değişkenin dinamik olup olmadığı Server System Variables sayfasında "Dynamic" satırında yazar.
Aynı seçenek iki dosyada varsa hangisi kazanır?
Son okunan. Dosyalar listedeki sırayla, dahil edilen dizinlerdeki dosyalar ise adlarının bayt sırasıyla okunur ve sonraki ayar öncekini ezer. Belgeler ayrıca log-basename kullanıyorsanız diğer günlük dosyası adı seçeneklerinin hiyerarşide ondan sonra gelmesi gerektiğini not eder.
Bir dosyayı tamamen yok sayarak sunucuyu başlatabilir miyim?
Evet. --no-defaults hiçbir dosya okumaz, --defaults-file=yol yalnızca verilen dosyayı okur. İkisi de komut satırında ilk argüman olmalıdır. Bağlantı sorunlarında istemcinin bir dosyadan beklenmedik bir değer alıp almadığını anlamak için de mariadb --no-defaults kullanılabilir.
MySQL ile aynı dosyayı paylaşabilir miyim?
Belgelerdeki karma örnek dosya bunun için tasarlanmıştır: ortak ayarlar [mysqld] grubunda, yalnızca MariaDB'ye ait ayarlar [mariadb] ya da [mariadb-X.Y] gruplarında durur. Geçiş planı için MySQL'den geçiş yazısına bakın.
Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: MariaDB öğrenme rehberi · systemd ile başlatma · uzaktan bağlantı · InnoDB buffer pool ayarları · error log ve slow query log · mariadb istemcisi