MySQL’i Docker konteynerlarında kullanmaya gelince, bu tam anlamıyla bulutlarda kurulan bir eşleşme. Daha önce Docker ile çalıştıysanız, tüm avantajları MySQL Docker konteynerları için de geçerlidir:
- İzolasyon ve tutarlılık: MySQL örneği diğer yazılımlardan ve bağımlılıklardan izole edilir, olası çakışmalar önlenir.
- Sürüm kontrolü: Docker, MySQL ile birlikte tüm yazılım yığınızı versiyonlamanıza olanak tanır. Bu, ortamınızı istediğiniz zaman yeniden üretebileceğiniz anlamına gelir; geliştirme ve test süreçlerini kolaylaştırır.
- Ölçeklenebilirlik ve kaynak yönetimi: Docker ile belleik veya CPU gibi daha fazla kaynağı kolayca ayırarak MySQL uygulamanızı ölçekleyebilirsiniz.
- Bağımlılık yönetimi: Docker, MySQL örneğinizi kapsüller; böylece yerel makinenizdeki hiçbir şeyi kurcalamadan farklı sürümleri yönetebilirsiniz.
Hepsinden önemlisi, MySQL uygulamanız yalnızca bilgisayarınızda değil, her yerde çalışır.
MySQL’i en popüler ikinci rakibiyle karşılaştırmak isterseniz, kapsamlı PostgreSQL vs. MySQL karşılaştırmamıza göz atın.
Bugün, MySQL’i Docker ile birlikte çalıştırmanın temellerini öğreneceksiniz. Hadi başlayalım!
Önkoşullar
Bu makale MySQL Docker konteynerlarına odaklandığından, takip etmek için birkaç önkoşul vardır:
- Komut satırı/terminal erişimi: terminal erişimi olan yerel bir ortama ihtiyacınız var. Colab gibi bir Jupyter ortamındaysanız lütfen şimdi değiştirin.
- Çalışan bir Docker örneği: Docker Desktop’ın kurulu olması gerekir (talimatlar için Veri Bilimi için Docker eğitimimize bakın). Tam olarak çalıştığında, arayüzün sol alt kısmında yeşil bir yavru balina görünür:

ve terminalde docker --help komutu hatasız çalışır.
- Docker ile temel düzeyde aşinalık: makalede kullanılan tüm komutları açıklayacak olsam da, Docker’ı temel düzeyde anlamak bu makaleden elde edeceğiniz faydayı önemli ölçüde artıracaktır.
- SQL: SQL için de aynısı geçerlidir — bu makalede kullanılan SQL komutlarını açıklamayacağım; bu, ana konudan sapmamıza neden olur. SQL becerileriniz biraz paslandıysa, en önemli konuları bu SQL kursundan tekrar gözden geçirebilirsiniz.
Resmi MySQL Docker İmajını İndirme
Aşağıdaki komutla resmi MySQL Docker imajını indirerek başlayacağız:
$ docker pull mysql:latest
docker pull, image:version söz dizimiyle imajın adını ve sürümünü ister. latest anahtar kelimesini kullanmak, en güncel kararlı sürümü indirir.
Resmi MySQL imajı sayfasını Docker Hub’da ziyaret ederseniz, farklı amaçlar için birçok başka sürüm görebilirsiniz.

Örneğin v8.2’yi böyle indirirsiniz:
$ docker pull mysql:8.2
İmajı indirdikten sonra mevcut Docker imajlarınız arasında listelenmiş olmalıdır:

Docker imajlarını terminal üzerinden de listelemek mümkündür:
$ docker images

Unutmayın: Docker imajları, konteyner oluşturmak için birer plandır. Bir plan size nasıl ev inşa edeceğinizi gösteriyorsa, Docker imajı da bir uygulamanın ya da servisin çalışan bir örneğini oluşturmak için gereken tüm talimatları ve bileşenleri içerir.
Eğer bir OOP geçmişiniz varsa, Docker imajlarını sınıflar olarak düşünün. Tek bir sınıf yaratmak nasıl birden fazla nesne oluşturmanıza imkan veriyorsa, Docker imajları da onlardan birden çok konteyner oluşturmanıza olanak tanır.
Bir MySQL Sunucu Konteynerını Çalıştırma ve Yönetme
Şimdi, mysql imajından ilk konteynerimizi oluşturalım. Kullanacağımız komut şu:
$ docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=strong_password -d mysql
run: yeni bir konteyner oluşturur veya mevcut olanı başlatır--name CONTAINER_NAME: konteynere bir ad verir. Ad okunabilir ve kısa olmalıdır. Bizim örneğimizde adtest-mysql.-e ENV_VARIABLE=value: -e etiketi, konteyner içinde erişilebilir olacak bir ortam değişkeni oluşturur. Daha sonra konteyner içinden SQL komutları çalıştırabilmemiz içinMYSQL_ROOT_PASSWORD’ı ayarlamak kritik önemdedir. Güçlü şifrenizi güvenli bir yerde sakladığınızdan emin olun (beyninizde değil).-d: detached’ın kısaltmasıdır;-detiketi konteynerın arka planda çalışmasını sağlar. Bu etiketi kaldırırsanız, komut konteyner durana kadar günlükleri yazdırmaya devam eder.image_name: son argüman, konteynerın oluşturulacağı imajın adıdır. Bu durumda imajımızmysql.
Komut anlamsız uzun bir dize (konteyner ID’si) döndürürse, konteyner başlamış demektir. Durumunu docker ps ile kontrol edebilirsiniz:

Unutmayın: Bir Docker konteynerı güçlü bir işletim sistemi öykünücüsüdür. MySQL’i çalıştırmanın yanı sıra, konteyner içinden bilgisayarınızın terminaliyle normalde yapacağınız her işlemi yapabilirsiniz.
Konteynerınızın içindeki terminale erişmek için şu komutu kullanabilirsiniz:
$ docker exec -it container_name bash
Bu, bir bash oturumu başlatacaktır.
MySQL Sunucu Konteynerına Yerelden Bağlanma
Tüm MySQL konteynerları, SQL kullanarak veritabanları oluşturmak ve yönetmek için gereken her şeyi içeren bir MySQL sunucusu başlatır. Sunucuya bağlanmak için konteynerlarda ayrıca SQL sorguları çalıştırmamıza olanak tanıyan bir MySQL istemcisi bulunur. İstemci, aslında mysql terminal komutunun süslü bir adıdır. Hadi bunu test-mysql’in terminalinde kullanalım:
1. test-mysql’in bash terminalini açın:
$ docker exec -it test-mysql bash
2. İstemciye root kullanıcısı olarak bağlanın:
$ mysql -u root -p
Enter password: ...
mysql>
Kullanıcı adını (root) belirtmek için -u etiketini, parola istenildiğinde girmek için de -p etiketini kullanıyoruz.

Konteyner dışında da MySQL sunucusuna bağlanmak mümkündür. Örneğin, ana makinenizden bağlanmak için MySQL istemcisini sisteminize manuel olarak kurabilirsiniz.
Windows’ta MySQL ve istemcisini kurmak için resmi MySQL kurulum kılavuzundaki talimatları izleyebilirsiniz.
Mac için Homebrew kullanabilirsiniz:
$ brew install mysql
Linux veya WSL2 (benim tercihim) için sudo kullanabilirsiniz:
$ sudo apt update
$ sudo apt install mysql-client
Kurulumdan sonra, konteyner çalışıyorsa durdurup kaldırın:
$ docker stop test-mysql
test-mysql
$ docker rm test-mysql
Bir sonraki adımda, konteynerdaki bir portu yerel makinemizdeki bir porta eşleyerek konteynerı yeniden başlatacağız:
$ docker run -d --name test-mysql -e MYSQL_ROOT_PASSWORD=strong_password -p 3307:3306 mysql
Bu komut şunları yapar:
-p 3307:3306: Konteynerın 3306 portunu (MySQL’in varsayılan portu) yerel 3307 portunuza eşler. Bu, yerel 3307 portunuza gönderilen trafiğin konteynerın 3306 portuna iletileceği ve MySQL sunucunuza bu port üzerinden erişilebileceği anlamına gelir.-d: Konteynerı yine arka planda (detached) çalıştırır.--name test-mysql: "test-mysql" konteyner adını yeniden kullanır.-e MYSQL_ROOT_PASSWORD=strong_password: MySQL sunucusu için root parolasını tekrar ayarlar.mysql: Çalıştırılacak Docker imajını belirtir; bu, resmi MySQL imajıdır.
Terminal konteyner için yeni bir ID çıktısı verdikten sonra, port eşlemelerini kontrol edebiliriz:
$ docker port test-mysql
3306/tcp -> 0.0.0.0:3307
Başarılı oldu! Artık yerel makinenizden, mysql istemcisini kullanarak 3307 portundan sunucuya bağlanabilirsiniz:
$ mysql --host=127.0.0.1 --port=3307 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.2.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates…
MySQL Konteynerını Yapılandırma
Bir yapılandırma dosyası kullanarak MySQL konteynerlarını pek çok ayar için yapılandırabilirsiniz. Genellikle dosya, konteynerın aşağıdaki dizinlerinden birinde bulunur:
/etc/mysql//etc/mysql/conf.d/etc/mysql/mysql.conf.d
Dizinler imajdan imaja değişir. Ancak bir yapılandırma dosyası için standart dosya adı ve uzantısı my.cnf’tir. Dosya yukarıda listelenen dizinlerden hiçbirinde yoksa, bu konteynerın özel bir yapılandırma dosyası gerektirdiği anlamına gelir. test-mysql konteynerımızda durum böyledir:
$ ls /etc/mysql/conf.d/ # Returns no output
Bu gibi durumlarda, şu dikkatli adımları izlememiz gerekir:
1. Konteynerı durdurup kaldırın:
$ docker stop test-mysql; docker rm test-mysql
2. Yerelde (makinenizde) boş bir yapılandırma dosyası oluşturun:
$ sudo mkdir -p /etc/docker/test-mysql # Create a dir
$ sudo touch /etc/docker/test-mysql/my.cnf # Create a config file inside dir
3. İki boş .cnf dosyasını bağlayarak konteynerı yeniden başlatın:
$ docker run \
--name test-mysql \
-v /etc/docker/test-mysql:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=strong_password \
-d mysql
Yeni bir etiket yazıyoruz: -v, volume’ın kısaltmasıdır. Bu etiket, konteyner ile yerel makine arasındaki dizinleri bağlamak için kullanılabilir. Bilgisayar bilimi dilinde bu işleme mount etme denir.
Yani, yukarıdaki komutta yerel /etc/docker/test-mysql dizinini konteynerın /etc/mysql/conf.d dizinine mount ediyoruz. Bu, her iki dizinin içeriklerini bağlayacaktır. İki dizinden herhangi birinde yapılan değişiklikler, her ikisine de yansıtılacaktır.
Mount etmek, Docker konteynerlarının yapılandırmalarını değiştirmek için my.cnf dosyasını yerel makinemizde düzenlememize olanak tanır. Ve en iyi yanı, konteyner durdurulsa veya kaldırılsa bile değiştirilmiş yapılandırmaların yerel makinemizde kalıcı olmasıdır. Yeniden kullanılabilir olacaktır.
Peki bu adımdan sonra hangi yapılandırmaları değiştirebiliriz? Cevap kullanım durumunuza bağlıdır. Aşağıda bunları ele alacağız.
Docker sertifikası almak ister misiniz? Docker sertifikası alma rehberimize göz atın!
Hangi Seçenekleri Yapılandırmalısınız?
MySQL Docker konteynerları için varsayılan yapılandırma birçok yaygın senaryo için işe yarasa da, performansı, güvenliği ve kaynak kullanımını optimize etmek için belirli ayarları değiştirmeniz gerekir. En yaygın değiştirilen yapılandırma seçeneklerinden bazıları şunlardır:
Performans
- innodb_buffer_pool_size: Sık erişilen verileri daha hızlı almak için önbelleğe alan InnoDB tampon havuzuna ayrılan bellek miktarını belirler. Bu değeri artırmak, okuma ağırlıklı iş yüklerinde performansı iyileştirebilir; ancak daha fazla bellek tüketir.
- query_cache_size: Daha hızlı yeniden yürütme için önceden çalıştırılmış sorguları saklayan sorgu önbelleğinin boyutunu kontrol eder. Bu değeri artırmak tekrarlayan sorgular için performansı iyileştirebilir; ancak daha fazla bellek tüketir ve dinamik sorgular için etkili olmayabilir.
- thread_pool_size: Sunucunun işleyebileceği eşzamanlı bağlantıların azami sayısını belirler. Bu değeri beklenen trafik yükünüze göre ayarlamak, kaynak kullanımını optimize eder ve darboğazları önler.
Güvenlik
- bind-address: MySQL sunucusunun yalnızca belirli ağ arayüzlerini dinlemesini sağlar; yetkisiz kaynaklardan erişimi sınırlar.
- mysql_bind_host: Sunucunun tüm arayüzleri dinlemek yerine belirli IP adreslerine bağlanmasına izin verir.
- validate_password_policy: Daha güçlü parola gereksinimlerini etkinleştirerek güvenliği artırır.
Kaynak kullanımı
- max_connections: İzin verilen en fazla eşzamanlı bağlantı sayısını kontrol eder. Bu değeri ayarlamak, kaynak tükenmesini önler ve verimli sunucu çalışmasını sağlar.
- innodb_file_per_table: Her InnoDB tablosunu ayrı bir dosyada saklar; bu, performansı iyileştirebilir ancak depolama alanı gereksinimini artırır.
- innodb_io_capacity: Depolama sistemi için tahmini IOPS’u (Saniye Başına G/Ç İşlemi) ayarlar; motorun tampon havuzu kullanımını ve disk işlemlerini optimize etmesini sağlar.
Diğer yaygın değişiklikler
- character_set_server: Sunucu için varsayılan karakter kümesini ayarlar; tutarlı veri kodlaması ve işlenmesini sağlar.
- collation_server: Karakter verilerinin sıralama ve karşılaştırmasında kullanılan varsayılan sıralama kurallarını belirler.
- log_bin: Sunucu etkinliğinin ikili günlüklemesini etkinleştirir; sorun giderme ve çoğaltma için faydalı olabilir.
Yapılandırma seçeneklerinin tam listesini görmek için aşağıdaki komutu çalıştırabilirsiniz:
$ docker run -it --rm mysql:tag --verbose --help
.cnf dosyasını herhangi bir metin düzenleyiciyle düzenleyebilirsiniz. Takip etmeniz gereken söz dizimi şöyledir:
[mysqld]
max_connections=200
other_params=value
...
MySQL Docker Konteynerında Depolanan Veriyi Nasıl Kalıcı Kılarsınız
MySQL konteynerlarınızda depolanan verileri kalıcı kılmak birçok nedenle kritiktir:
- Veri kalıcılığı: Bir konteynerı durdurduğunuzda veya kaldırdığınızda veritabanınız dahil tüm veriler kaybolur. Veriyi konteynerdan ayırmak, ona her zaman erişilebilir olmasını sağlar.
- Konteynerlar arasında veri paylaşımı: Veriyi konteynerdan ayırmak, birden çok konteynerın ona erişmesine olanak tanır. Böylece veri çoğaltmayı önleyebilir ve aynı veriyi kullanan projeler arasında senkronizasyonu basitleştirebilirsiniz.
- Taşınabilirlik ve yedekleme: kalıcı veriler kolayca yedeklenebilir ve bağımsız olarak paylaşılabilir; veri kaybından veya yanlışlıkla silmeden güvenilir bir şekilde kurtulma sağlar.
- Geliştirilmiş performans ve ölçeklenebilirlik: Sık erişilen verileri SSD gibi kalıcı depolamada tutarak, genellikle daha yavaş olan konteynerın yazılabilir katmanına güvenmeye kıyasla uygulamanızın performansını artırabilirsiniz.
İzlenecek süreç, daha önce gördüğümüzle aynıdır — bir volume oluşturup verinin konteynerda saklandığı yere mount edeceğiz. Adımlar şunlar:
1. Bir volume oluşturun:
$ docker volume create test-mysql-data
volume create komutu, volume için yerel dosya sisteminizde ayrılmış bir depolama alanı oluşturur. Volume mount edildikten sonra, tüm konteyner verileri ona bağlanacaktır.
2. Konteynerı volume mount edilmiş şekilde yeniden başlatın:
$ docker stop test-mysql; docker rm test-mysql
$ docker run \
--name test-mysql \
-v test-mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=strong_password \
-d mysql
Bu kez söz dizimi şu biçimdedir: -v volume_name:directory_in_container. Oluşturulan tüm volumelar, MySQL imajı dokümanlarında belirtildiği üzere /var/lib/mysql dizinine mount edilmelidir.
Artık test-mysql içinde oluşturulan tüm veritabanları veya tablolar, konteyner durdurulsa ya da kaldırılsa bile yerelde kalıcı olacaktır.
Nihai Komut
Makalede ilerledikçe docker run komutumuz epey evrildi. Öyleyse tüm varyasyonlarını bir araya getirip tek bir nihai ana komut oluşturalım. Konteynerı yine durdurup kaldırmamız gerekiyor. Baştan başlamak için volumeyi de kaldıracağız:
$ docker stop test-mysql; docker rm test-mysql
$ docker volume rm test-mysql-data
İşte nihai ana komut:
$ docker run \
--name final-mysql \
-e MYSQL_ROOT_PASSWORD=strong_password \
-p 3307:3306 \
-v /etc/docker/test-mysql:/etc/mysql/conf.d \
-v final-mysql-data:/var/lib/mysql \
-d mysql
Bu komut, önceki yerel my.cnf dosyamızı istenen konuma mount eder ve final-mysql-data adlı yeni bir volume oluşturup mount eder.
Docker Compose ile Karmaşık MySQL Kurulumlarını Yönetme
Birden fazla konteyner içeren daha gelişmiş kurulumlarda, örneğin MySQL’i diğer servislerle (web sunucuları veya uygulama arka uçları gibi) birlikte çalıştırırken, Docker Compose tek bir yapılandırma dosyasıyla çok konteynerli uygulamaları tanımlamayı ve yönetmeyi kolaylaştırır.
Bir MySQL konteynerı için temel bir docker-compose.yml dosyası örneği:
version: '3.9'
services:
db:
image: mysql:8.3.0
container_name: mysql-db
environment:
MYSQL_ROOT_PASSWORD: strong_password
MYSQL_DATABASE: example_db
MYSQL_USER: user
MYSQL_PASSWORD: user_password
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
- ./mysql-config:/etc/mysql/conf.d
volumes:
db_data:
Docker Compose’u kullanma adımları:
- Bir
docker-compose.ymldosyası oluşturun: Yapılandırma dosyasını proje dizininize kaydedin. - Servisleri başlatın: Dosyada tanımlanan tüm servisleri başlatmak için aşağıdaki komutu çalıştırın:
docker-compose up -d
- Servisleri durdurun: İşiniz bittiğinde servisleri kapatın:
docker-compose down
MySQL için Docker Compose’un faydaları:
- Basitleştirilmiş yapılandırma: MySQL yapılandırmalarını, portlarını ve volumelarını tek bir dosyada yönetin.
- Daha kolay ölçekleme: Veritabanını kolayca ölçekleyin veya uygulama yığınızdaki diğer servislerle entegre edin.
- Kalıcı veriler: Konteyner yeniden başlatmalarında veri kalıcılığı için volumeları otomatik olarak yönetin.
Docker Compose, birden çok ortamı (örn. geliştirme, hazırlık ve üretim) yönetirken veya ekiplerle çalışırken özellikle faydalıdır.
Sonuç
Bu makale, MySQL veritabanlarını Docker konteynerlarının içinde çalıştırma ve yönetmenin temel yönlerini ele aldı. MySQL imajlarını nasıl indirip kuracağımızı, konteyner içinde MySQL sunucularını nasıl başlatacağımızı, bu konteynerları nasıl değiştireceğimizi ve özel yapılandırma ile veri kalıcılığı için volumelar eklemeyi öğrendik.
Konuyla ilgili daha fazla bilgi edinmek için aşağıdaki kaynakları öneririm:
- Veri bilimi için Docker’a giriş
- Docker’a Giriş Kursu
- Makine öğrenimi için Docker ve Kubernetes ile konteynerlaştırma
- MySQL Docker İmajı Dokümantasyonu
- MySQL Başvuru Kılavuzu
Okuduğunuz için teşekkürler!
FAQs
Birden fazla MySQL konteynerını yönetmek için Docker Compose’u kullanabilir miyim?
Evet, Docker Compose; MySQL dahil olmak üzere birden fazla Docker konteynerını yönetmek için mükemmel bir araçtır. MySQL servis yapılandırmalarınızı bir docker-compose.yml dosyasında tanımlayarak tek bir komutla birden çok servisi başlatabilir, durdurabilir ve yönetebilirsiniz.
Docker konteynerında MySQL’i daha yeni bir sürüme nasıl yükseltirim?
Docker konteynerında MySQL’i yükseltmek için MySQL Docker imajının yeni sürümünü çekmeniz ve ardından konteynerınızı bu yeni imajla yeniden oluşturmanız gerekir. Yükseltmeye başlamadan önce verilerinizin yedeklerine sahip olduğunuzdan emin olun.
Aynı host üzerinde birden fazla MySQL konteynerı çalıştırabilir miyim?
Evet, aynı host üzerinde birden fazla MySQL konteynerı çalıştırabilirsiniz. Her konteynere, port çakışmalarını önlemek için host üzerinde -p seçeneğiyle benzersiz bir port atamalısınız.
MySQL konteynerlarını çalıştırırken güvenlik için en iyi uygulamalar nelerdir?
Güvenlik için en iyi uygulamalar arasında, uygun güvenlik önlemleri olmadan MySQL konteynerlarını herkese açık internete maruz bırakmamak, güçlü parolalar kullanmak, Docker ve MySQL imajlarını düzenli olarak güncellemek ve parolalar gibi hassas bilgiler için Docker secrets kullanmak yer alır.
Docker’da MySQL veritabanlarının yedeklemesini nasıl otomatikleştirebilirim?
Yedeklemeleri otomatikleştirmek için host makinede, konteyner içinde docker exec kullanarak mysqldump çalıştıran bir cron işi oluşturabilirsiniz. Alternatif olarak, veriyi kalıcı kılmak için Docker volumelarını kullanabilir ve yedeklemeleri doğrudan host üzerinden yönetebilirsiniz.
Başka bir konteynerdan MySQL Docker konteynerına bağlanabilir miyim?
Evet, başka bir konteynerdan bağlanabilirsiniz; bunun için her iki konteynerın da aynı Docker ağında olması gerekir. Bağlanırken host adı olarak konteynerın adını kullanabilirsiniz.
MySQL konteynerımla ilgili bağlantı sorunlarını nasıl gideririm?
Bağlantı sorunlarını gidermek için önce konteyner çalışıyor mu (docker ps) kontrol edin, port eşlemelerini doğrulayın (docker port), ağ yapılandırmalarını kontrol edin ve konteyner içindeki MySQL sunucusunun hostunuzdan veya diğer konteynerlardan gelen bağlantıları kabul edecek şekilde yapılandırıldığından emin olun.
Hosttan mount etmeden özel bir MySQL yapılandırma dosyası kullanmak mümkün mü?
Evet, özel bir yapılandırma dosyasını doğrudan konteyner içinde oluşturabilirsiniz. Ancak, yönetimi ve kalıcılığı daha kolay olduğundan genellikle hosttan mount etmek daha yaygındır.
MySQL konteynerımın performansını nasıl izleyebilirim?
Performansı, MySQL’e özgü metrikler için mysqladmin, Docker’ın yerleşik istatistik komutu (docker stats) veya Docker ve MySQL için exporter’ları bulunan Prometheus gibi üçüncü taraf izleme çözümleriyle izleyebilirsiniz.
MySQL Docker konteynerım çökerse ne yapmalıyım?
Konteynerınız çökerse önce docker logs <container_name> komutuyla günlükleri kontrol ederek hataları belirleyin. Yapılandırmanızın ve ortam değişkenlerinizin doğru olduğundan emin olun ve kaynak kısıtları (CPU, bellek) olmadığını doğrulayın. Konteynerı yeniden başlatın ve performansını izleyin.

2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium’da en büyük takipçi kitlelerinden birine sahibim. Yapay zekâ ve makine öğrenimi üzerine, biraz da alaycı bir üslupla yazılmış, ayrıntılı makaleler kaleme almayı seviyorum; çünkü onları biraz daha az sıkıcı hale getirmek için bir şeyler yapmak gerekiyor. 130’un üzerinde makale ve bir de DataCamp kursu ürettim; bir diğeri de hazırlık aşamasında. İçeriklerim 5 milyondan fazla kişi tarafından görüldü; bunların 20 bini Medium ve LinkedIn’de takipçim oldu.

MySQL, %40’ın üzerinde pazar payıyla tek başına en popüler ilişkisel veritabanı aracıdır. Rakipleri PostgreSQL (%16) ve Oracle Database (%11) ile karşılaştırıldığında rakamları oldukça iyi görünür.
MySQL, basit ama güçlü olduğu için popülerdir. Öne çıkan özellikleri şunlardır: