mariadb, MariaDB sunucusuna bağlanıp SQL çalıştırdığınız komut satırı istemcisidir. Etkileşimli kullanımda mariadb -u kullanici -p veritabani yazıp parolanızı girersiniz ve MariaDB [veritabani]> istemine düşersiniz; betiklerde ise -e ile tek bir komut çalıştırabilir, < ile bir SQL dosyasını besleyebilir ya da --batch ile sekmeyle ayrılmış çıktı alabilirsiniz. Unix sistemlerde aynı programa mysql adlı bir sembolik bağlantı da bulunur.
Bu yazı istemcinin günlük işte en çok kullanılan özelliklerini anlatıyor: bağlantı parametreleri ve varsayılanlar, soket ile TCP arasındaki fark, ifade sonlandırıcıları, istemci içi komutlar, source ve DELIMITER, çıktı biçimleri, --safe-updates, geçmiş dosyası, istem satırını özelleştirme ve yapılandırma dosyası grupları. Uzak sunucuya bağlanmak için sunucu tarafında yapılması gerekenler uzaktan bağlantı yazısında ayrıca ele alınıyor.
Bağlanmak: parametreler ve varsayılanlar
![Bağlanmak: parametreler ve varsayılanlar: --host=name, --user=name, --password[=passwd], --port=num](/assets/blog/mariadb-komut-satiri-istemcisi-b1.webp)
Hiçbir parametre vermeden mariadb yazdığınızda bağlantı rehberine göre şu varsayılanlar kullanılır: host localhost, kullanıcı adı Unix oturum adınız, parola gönderilmez, bir veritabanı seçilmez ve varsayılan soket dosyası kullanılır. Varsayılanları seçeneklerle değiştirirsiniz:
mariadb -h 192.0.2.10 -u uygulama -p magazaBu komutta -h hostu, -u kullanıcıyı belirtir; -p değer almadığı için istemci parolayı sorar; seçeneklerden sonra gelen ilk argüman (magaza) bağlanılacak veritabanıdır. Port verilmediği için TCP bağlantısında varsayılan 3306 kullanılır.
| Kısa | Uzun | Anlamı | Varsayılan |
|---|---|---|---|
| -h | --host=name | Bağlanılacak sunucu | localhost |
| -u | --user=name | MariaDB kullanıcı adı | Unix oturum adınız |
| -p | --password[=passwd] | Parola; değer verilmezse sorulur | parola gönderilmez |
| -P | --port=num | TCP portu | 3306 |
| -S | --socket=name | Unix soket dosyası | derlemeye ve dağıtıma göre değişir |
| -D | --database=name | Kullanılacak veritabanı | yok |
| --protocol=name | tcp, socket, pipe veya memory | işletim sistemine göre en uygunu |
localhost ile 127.0.0.1 aynı şey değildir
Unix sistemlerde host verilmezse ya da localhost verilirse istemci Unix soketi kullanır. Başka bir host yazıldığında ise TCP/IP bağlantısı kurulur. Belgeler özellikle uyarır: localhost özel bir değerdir ve 127.0.0.1 ile aynı değildir; ikincisi sunucuya TCP üzerinden bağlanır. Komut satırında --port gibi bir bağlantı özelliği verdiğinizde de o özelliğe uyan protokol seçilir. Bu fark iki pratik sonuç doğurur. Birincisi, unix_socket ile doğrulanan root@localhost hesabına TCP üzerinden bağlanamazsınız. İkincisi, sunucu tarafında skip_networking açıksa yalnızca soket bağlantıları çalışır.
mariadb --protocol=socket
mariadb --host=localhost --protocol=tcp --port=3306Hangi protokolle bağlandığınızı görmek için istemci içinde status komutunu çalıştırın. Çıktıda "Connection" satırı bağlantı türünü, soket bağlantısında ise "UNIX socket" satırı kullanılan dosyayı gösterir.
İfadeleri göndermek ve durdurmak
Etkileşimli oturumda bir SQL ifadesini noktalı virgül (;), \g ya da \G ile bitirip Enter'a basarsınız. \G sonucu dikey biçimde, her sütunu ayrı satırda gösterir; geniş tablolarda ve uzun metinlerde okumayı kolaylaştırır. --auto-vertical-output seçeneği, sonuç terminal genişliğinden büyükse dikey moda kendiliğinden geçer.
SELECT user, host FROM mysql.user WHERE user = 'root'\GYazdığınız ifadeden vazgeçmek için \c girdiyi temizler. Çalışmakta olan bir ifadeyi durdurmak için Control-C'ye basarsınız: istemci ifadeyi sonlandırmayı dener; bu yapılamazsa ya da ifade sonlanmadan Control-C'ye ikinci kez basarsanız istemci kapanır. Bir oturumdan çıkmak için exit, quit ya da \q kullanılır.
İstemci içi komutlar
SQL dışında istemcinin kendisinin anladığı komutlar vardır. Belgelere göre bu metin komutları satırın başında olmalı ve noktalı virgülle bitmelidir. En sık kullanılanlar:
| Komut | Kısa | Ne yapar |
|---|---|---|
| status | \s | Sunucudan durum bilgisi alır; bağlantı türü, kullanıcı, veritabanı |
| use | \u | Başka bir veritabanına geçer |
| source | \. | Bir SQL betik dosyasını çalıştırır |
| delimiter | \d | İfade ayıracını değiştirir |
| tee | \T | Bütün çıktıyı verilen dosyaya da ekler |
| notee | Dosyaya yazmayı durdurur | |
| pager | \P | Sonuçları less gibi bir sayfalayıcıdan geçirir (Unix) |
| nopager | Sayfalayıcıyı kapatır | |
| warnings | \W | Her ifadeden sonra uyarıları gösterir |
| system | \! | Bir kabuk komutu çalıştırır (Unix benzeri sistemler) |
| rehash | \# | Ad tamamlama önbelleğini yeniden kurar |
| prompt | İstem satırını değiştirir | |
| connect | Sunucuya yeniden bağlanır; veritabanı ve host alabilir | |
| help | \h | Yardımı gösterir |
Ad tamamlama varsayılan olarak açıktır: bir veritabanı, tablo ya da sütun adının başını yazıp Tab'a bastığınızda istemci tamamlar. Çok tablolu veritabanlarında açılış yavaşlarsa -A (--no-auto-rehash) ile bunu kapatıp gerektiğinde rehash çalıştırabilirsiniz.
SQL dosyası çalıştırmak: yönlendirme ve source

Bir dosyadaki ifadeleri çalıştırmanın iki yolu vardır. Kabuktan yönlendirme ile istemci etkileşimsiz modda çalışır; belgeler bu modda sonucun ASCII tablo yerine sekmeyle ayrılmış biçimde verildiğini belirtir:
mariadb magaza < kurulum.sql > sonuc.tabOturum içinden ise source komutunu kullanırsınız. Dosya genellikle çalışma dizininde aranır; belgelere göre MariaDB 12.0'dan itibaren --script-dir ile bir dizin verilebilir.
source kurulum.sqlHata davranışı önemli bir ayrıntıdır. --abort-source-on-error, source ile çalıştırılan dosyada hata olursa işlemi durdurur. -f (--force) ise SQL hatası olsa bile devam eder ve --abort-source-on-error değerini sıfırlar. Kurulum betiklerinde yarım kalmış bir şemayı fark etmeden geçmemek için hatada durmak genellikle daha güvenlidir. Büyük döküm dosyalarını geri yüklemenin ayrıntıları mariadb-dump yazısında.
DELIMITER: saklı yordam yazarken ayıracı değiştirmek
Varsayılan ayıraç noktalı virgüldür. BEGIN ... END bloğu içeren bir fonksiyonu satır satır yazdığınızda istemci bloğun içindeki ilk noktalı virgülü ifadenin sonu sanar ve yarım tanımı sunucuya gönderir; sonuç bir sözdizimi hatasıdır. Çözüm, tanım süresince ayıracı geçici olarak değiştirmektir. Belgelerin örneğinde // kullanılır:
DELIMITER //
CREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC
BEGIN
DECLARE x TINYINT;
SET x = 42;
RETURN x;
END
//
DELIMITER ;Son satır ayıracı tekrar noktalı virgüle döndürür. \g ve \G özel bir ayıraç tanımlıyken de her zaman kullanılabilir. Saklı yordam ve fonksiyonların kendisi stored procedure yazısında anlatılıyor.
Betiklerde kullanım: -e, --batch ve çıktı biçimleri
-e (--execute) verilen ifadeyi çalıştırır ve çıkar; geçmiş dosyasını ve --force davranışını kapatır, varsayılan çıktı biçimi --batch ile aynıdır. -B (--batch) sütunları sekmeyle ayırır, her satırı yeni satıra yazar, geçmiş dosyasını kullanmaz ve özel karakterleri kaçışlar; kaçışı kapatmak için -r (--raw) kullanılır. -N sütun adlarını yazmaz, -s çıktıyı sadeleştirir ve birden fazla verildiğinde daha da azaltır.
mariadb -N -B -e "SELECT VERSION();"Bu komut sürüm metnini tablo çizgileri ve sütun başlığı olmadan tek satır olarak verir; izleme betiklerinde değeri bir değişkene almak için uygundur. Toplu çıktıda tablo görünümü isterseniz -t (--table) ekleyin. Diğer biçimler için -E dikey, -H HTML, -X XML çıktı üretir. Çok büyük sonuç kümelerinde bellek sorunu yaşarsanız -q (--quick) sonucu önbelleğe almadan satır satır basar; belgeler bunun çıktı bekletildiğinde sunucuyu yavaşlatabileceğini de not eder.
--show-warnings her ifadeden sonra uyarıları gösterir ve hem etkileşimli hem toplu modda çalışır. Uzun bir oturumun kaydını tutmak için --tee=dosya her şeyi dosyaya ekler; bu seçenek toplu modda çalışmaz.
Kazalara karşı: --safe-updates
Yeni başlayanlar için belgelerin önerdiği seçenek --safe-updates'tir (eş anlamlısı --i-am-a-dummy, kısaltması -U). WHERE koşulunu unuttuğunuz bir DELETE FROM tablo ifadesi normalde bütün satırları siler; bu seçenekle silme ve güncelleme ancak anahtar değerleriyle satır belirtildiğinde ya da LIMIT verildiğinde çalışır. İstemci bağlanırken şu ifadeyi gönderir:
SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;Bunun sonucunda LIMIT içermeyen büyük SELECT sonuçları 1.000 satırla sınırlanır ve muhtemelen 1.000.000'dan fazla satır kombinasyonu incelemesi gereken çok tablolu SELECT ifadeleri durdurulur. Sınırları değiştirmek için:
mariadb --safe-updates --select_limit=500 --max_join_size=10000UPDATE ve DELETE ifadelerinin doğru yazımı INSERT, UPDATE, DELETE yazısında anlatılıyor.
Geçmiş dosyası ve istem satırı
Unix'te istemci çalıştırdığınız ifadeleri ev dizininizdeki .mysql_history dosyasına yazar. Farklı bir dosya için MYSQL_HISTFILE ortam değişkeni ayarlanır. Belgeler bu dosyanın kısıtlayıcı izinlerle korunması gerektiğini, çünkü parola içeren ifadelerin metninin buraya yazılabileceğini vurgular. Geçmiş tutmak istemiyorsanız dosyayı silip MYSQL_HISTFILE değişkenini /dev/null yapabilir ya da dosyayı /dev/null'a sembolik bağlantı olarak oluşturabilirsiniz:
ln -s /dev/null $HOME/.mysql_historyVarsayılan istem \N [\d]> biçimindedir; köşeli parantez içinde geçerli veritabanı görünür, veritabanı seçilmemişse (none) yazar. --prompt seçeneği ya da prompt komutuyla değiştirilebilir. Belgelerdeki özel dizilerden bazıları: \u kullanıcı adı, \h sunucu hostu, \d varsayılan veritabanı, \v sunucu sürümü, \p TCP portu ya da soket dosyası, \R 24 saatlik saat. Üretim ve test sunucusunu karıştırmamak için hostu istemde göstermek pratik bir alışkanlıktır.
prompt \u@\h [\d]>\_Seçenekleri yapılandırma dosyasına yazmak
İstemci, komut satırının yanında yapılandırma dosyalarından da seçenek okur; dosyada tanımadığı bir seçeneği yok sayar. Okuduğu gruplar [mysql], [mariadb-client], [client], [client-server] ve [client-mariadb]'dir. Örneğin kendi ev dizininizdeki ~/.my.cnf dosyasına şunu yazarak her bağlantıda aynı kullanıcıyı, güvenli güncelleme modunu ve uyarı gösterimini kullanabilirsiniz:
[client]
user=uygulama
[mariadb-client]
safe-updates
show-warningsYapılandırma dosyasında seçenekleri baştaki -- olmadan yazarsınız. --print-defaults istemcinin hangi argümanlarla başlayacağını yazdırıp çıkar; --no-defaults hiçbir dosyayı okumaz. Bu ikisi, --defaults-file ve --defaults-extra-file gibi dosya seçenekleri komut satırında ilk argüman olmalıdır. Dosyaların okunma sırası ve grupların tamamı my.cnf yazısında.
Bağlantı koparsa: otomatik yeniden bağlanma
İstemci bir ifadeyi gönderirken bağlantıyı kaybederse bir kez otomatik olarak yeniden bağlanıp ifadeyi tekrar gönderir. Belgeler bunun tehlikeli olabileceğini anlatır: yeniden bağlansa bile ilk oturum bitmiştir; geçici tablolar, autocommit modu, kullanıcı ve oturum değişkenleri kaybolur ve açık işlem geri alınır. Belgelerdeki örnekte SET @a=1 sonrası sunucu yeniden başlar, istemci sessizce yeniden bağlanır ve bir sonraki INSERT, değişken artık tanımsız olduğu için tabloya NULL yazar. Bağlantı koptuğunda istemcinin hata verip durmasını istiyorsanız --skip-reconnect kullanın. İşlemlerin ayrıntıları transaction yazısında.
Sık yapılan hatalar

- -p ile parola arasında boşluk bırakmak:
-p parolayazdığınızda istemci parolayı sorar ve "parola" kelimesini veritabanı adı olarak yorumlar. - 127.0.0.1 ile bağlanıp root'un neden reddedildiğini anlamamak: 127.0.0.1 TCP bağlantısıdır;
unix_socketile doğrulanan hesap ancak soket üzerinden çalışır. - Yapılandırma dosyasındaki protocol=tcp satırını unutmak: Authentication sayfası, sistem genelindeki dosyada
protocol=tcpvarsasudo mariadb --protocol=socketkullanmanızı söyler. - Saklı yordamı DELIMITER değiştirmeden yazmak: İlk iç noktalı virgülde tanım kesilir ve ERROR 1064 sözdizimi hatası alırsınız.
- Betiklerde -f kullanıp hataları gözden kaçırmak: Hata olsa bile devam edildiği için şema yarım kalabilir.
- Geçmiş dosyasını korumamak:
CREATE USER ... IDENTIFIED BYgibi ifadeler parolayla birlikte.mysql_historydosyasına yazılabilir. - Otomatik yeniden bağlanmaya güvenmek: Uzun bakım oturumlarında oturum değişkenleri ve açık işlem sessizce kaybolabilir; kritik işlerde
--skip-reconnecttercih edin.
Sık Sorulan Sorular
mysql komutu ile mariadb komutu farklı mı?
Belgelere göre istemcinin adı mariadb'dir; Unix sistemlerde mysql adlı bir sembolik bağlantı, Windows'ta ise mysql.exe adlı alternatif bir ikili dosya bulunur. Yani aynı program iki adla çağrılabilir. Bu seride MariaDB'ye özgü adları kullanıyoruz.
Sorgu sonucunu CSV benzeri bir dosyaya nasıl alırım?
En basit yol, toplu modda çalıştırıp çıktıyı yönlendirmektir: -B sekmeyle ayrılmış çıktı verir, -N başlıkları kaldırır. Sunucu tarafında dosya yazmak için SELECT ... INTO OUTFILE ise FILE yetkisi gerektirir ve dosyayı sunucunun diskine yazar. Veri içeri aktarma LOAD DATA ve mariadb-import yazısında anlatılıyor.
Hangi sunucuya bağlı olduğumu nasıl görürüm?
status (ya da \s) komutu geçerli kullanıcıyı, veritabanını ve bağlantı türünü gösterir. Sürüm için SELECT VERSION(); çalıştırabilirsiniz. Hostu istem satırına \h ile eklemek de karışıklığı önler.
İstemciden bağlanamıyorum, ilk neye bakmalıyım?
Hata koduna bakın. 2002 genellikle sunucunun çalışmadığını ya da soket yolunun yanlış olduğunu, 1045 erişim reddini gösterir. Bağlantı sorunları rehberi her iki durumun nedenlerini sıralar; özetini MariaDB sık hatalar yazısında bulabilirsiniz. Uzak bağlantı hataları için bind-address 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 · uzaktan bağlantı · my.cnf dosyaları · stored procedure · mariadb-dump · SQL nedir