Sınav Kodu
1Z0-908 · çoktan seçmeli
Unvan
OCP · MySQL 8.0 Database Administrator
Kapsam
7 alan · Mimari → Yüksek Erişilebilirlik
Süre / Soru / Geçme Notu
Kaynaklar farklı → education.oracle.com'dan teyit et
Emeklilik Tarihi
16 Kasım 2026 · son sınav fırsatı
01
Mimari Architecture
| Alt Konu | Bilmen Gerekenler |
| İstemci Bağlantıları | TCP/IP 3306, X Protocol 33060, Unix socket (Linux), named pipe / shared memory (Windows). Linux'ta localhost → socket; 127.0.0.1 → TCP. --protocol=TCP ile zorla. |
| Veri Saklama | Transactional Data Dictionary InnoDB içinde (mysql.ibd). .frm / .TRG / .par dosyaları yok. Metadata SDI olarak .ibd içinde → ibd2sdi. |
| InnoDB Dosyaları | ibdata1 (system TS, change buffer) · file_per_table .ibd (varsayılan ON) · general TS · undo_001/002 · ibtmp1 + session temp · doublewrite #ib_*.dblwr (8.0.20+) · redo: ib_logfile* → 8.0.30+ #innodb_redo/ |
| Buffer & Cache | Global: innodb_buffer_pool_size, innodb_log_buffer_size, table_open_cache, key_buffer_size (MyISAM). Oturum başına: sort_buffer_size, join_buffer_size, read_buffer_size, tmp_table_size. |
| Data Dictionary | INFORMATION_SCHEMA artık DD tabloları üzerinde view. DD tablolarına doğrudan erişilemez. İstatistik önbelleği: information_schema_stats_expiry (86400 sn). |
Hızlı Keşif
SELECT SPACE, NAME, ROW_FORMAT, SPACE_TYPE
FROM information_schema.INNODB_TABLESPACES;
SHOW VARIABLES LIKE 'innodb_buffer_pool%';
SELECT @@innodb_redo_log_capacity; -- 8.0.30+
Sınav Tuzağı: Query Cache 8.0'da tamamen kaldırıldı — query_cache_* seçenekleri hata verir. Şıklarda "query cache ile hızlandır" görürsen eleyebilirsin.
Bellek Formülü: Toplam ≈ global buffer'lar + (max_connections × oturum buffer'ları). Oturum buffer'larını büyütmek, bağlantı sayısıyla çarpılır.
02
Kurulum & Yapılandırma Install & Config
| Alt Konu | Bilmen Gerekenler |
| Kurulum | RPM/DEB repo, generic tar, MSI, Docker. mysqld --initialize → geçici root parolası error log'a yazılır; --initialize-insecure → parolasız root. |
| Oluşan Dosyalar | datadir (/var/lib/mysql), auto.cnf (server_uuid), otomatik ca.pem / server-cert.pem, mysqld-auto.cnf (SET PERSIST), error log. |
| Başlat / Durdur | systemctl start mysqld, mysqld_safe, SQL ile SHUTDOWN / RESTART, mysqladmin shutdown. |
| Yükseltme | 8.0.16+ upgrade'i sunucu kendisi yapar; mysql_upgrade deprecated. --upgrade=AUTO|NONE|MINIMAL|FORCE. Ön kontrol: Shell util.checkForServerUpgrade(). In-place vs logical. |
| Option Dosyaları | Sıra: /etc/my.cnf → /etc/mysql/my.cnf → SYSCONFDIR/my.cnf → $MYSQL_HOME/my.cnf → ~/.my.cnf → ~/.mylogin.cnf. Son okunan kazanır. --defaults-file, --defaults-extra-file, --no-defaults, my_print_defaults. |
| Değişkenler | SET GLOBAL → restart'ta kaybolur · SET PERSIST → anında + kalıcı · SET PERSIST_ONLY → read-only değişken, restart sonrası · RESET PERSIST. Kaynak: performance_schema.variables_info. |
| Çoklu Instance | Her biri için ayrı datadir, port, socket, pid-file, server_id. mysqld_multi + [mysqldN] grupları veya systemd mysqld@N. |
Kalıcı Ayar & Şifreli Login
SET PERSIST max_connections = 500;
SET PERSIST_ONLY innodb_log_file_size = 1073741824;
SELECT VARIABLE_NAME, VARIABLE_SOURCE
FROM performance_schema.variables_info
WHERE VARIABLE_SOURCE = 'PERSISTED';
# ~/.mylogin.cnf (obfuscated)
$ mysql_config_editor set --login-path=dba \
--user=root --host=localhost --password
Sınav Tuzağı: Aynı seçenek birden fazla dosyada varsa en son okunan geçerlidir. mysqld-auto.cnf (SET PERSIST) diğer tüm option dosyalarından sonra işlenir.
03
Güvenlik Security
Yoğun
| Alt Konu | Bilmen Gerekenler |
| Hesaplar | 'user'@'host' — en spesifik host önce eşleşir. CREATE USER, ALTER USER, RENAME USER, DROP USER. |
| Auth Plugin | Varsayılan: caching_sha2_password. Eski: mysql_native_password. auth_socket, sha256_password; Enterprise: LDAP, PAM, Kerberos. |
| Roller | CREATE ROLE → GRANT role TO user. Roller varsayılan olarak pasif: SET DEFAULT ROLE veya activate_all_roles_on_login=ON. mandatory_roles. |
| Yetkiler | Global / DB / tablo / kolon / rutin seviye. Dinamik yetkiler: BACKUP_ADMIN, SYSTEM_VARIABLES_ADMIN, CLONE_ADMIN… partial_revokes, WITH GRANT OPTION. |
| Parola | component_validate_password, PASSWORD EXPIRE, password_history, FAILED_LOGIN_ATTEMPTS + PASSWORD_LOCK_TIME, dual password RETAIN CURRENT PASSWORD. |
| Bağlantı | require_secure_transport=ON, REQUIRE SSL|X509, tls_version. Sertifikalar kurulumda otomatik üretilir. |
| Şifreleme | InnoDB TDE için keyring şart. ENCRYPTION='Y', default_table_encryption, binlog_encryption, redo/undo şifreleme. ALTER INSTANCE ROTATE INNODB MASTER KEY. |
| Host & SQLi | OS'ta mysql kullanıcısı, secure_file_priv, local_infile=OFF. SQLi: prepared statement. Enterprise Firewall: RECORDING → PROTECTING / DETECTING. |
Rol Tabanlı Hesap
CREATE ROLE 'app_ro';
GRANT SELECT ON shop.* TO 'app_ro';
CREATE USER 'ali'@'10.0.%' IDENTIFIED BY 'S3cr3t!'
PASSWORD EXPIRE INTERVAL 90 DAY
FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1;
GRANT 'app_ro' TO 'ali'@'10.0.%';
SET DEFAULT ROLE ALL TO 'ali'@'10.0.%';
Sınav Tuzağı: 8.0'da GRANT ... IDENTIFIED BY ile kullanıcı oluşturulamaz — önce CREATE USER. Eski istemciler caching_sha2 desteklemiyorsa bağlantı hatası alınır.
MySQL OCP 8.0 Sınav Konu Haritası · İzleme, Sorgu Optimizasyonu & Yedekleme
04
İzleme & Bakım Monitoring
| Alt Konu | Bilmen Gerekenler |
| Error Log | log_error, log_error_verbosity (1–3, varsayılan 2), log_error_services (JSON sink için component). |
| General / Slow Log | general_log · slow_query_log, long_query_time (10 sn), log_queries_not_using_indexes, min_examined_row_limit. log_output=FILE|TABLE. Analiz: mysqldumpslow. |
| Binary Log | 8.0'da varsayılan açık. binlog_format=ROW, binlog_expire_logs_seconds (30 gün), PURGE BINARY LOGS, FLUSH BINARY LOGS. |
| Audit | MySQL Enterprise Audit: audit_log plugin, JSON/XML format, audit_log_filter_set_filter() ile kural tabanlı filtre. |
| Süreç & Durum | SHOW PROCESSLIST, performance_schema.threads, sys.processlist, KILL [QUERY]. Status: Threads_connected, Threads_running, Aborted_connects, Max_used_connections. |
| Enterprise Monitor | Service Manager + Agent mimarisi, Advisors, eventler, Query Analyzer, dashboard'lar. |
| Kapasite Planlama | DATA_LENGTH + INDEX_LENGTH, DATA_FREE (I_S.TABLES), INNODB_TABLESPACES.FILE_SIZE, sys.schema_table_statistics; büyüme trendi izle. |
| Kilitler | performance_schema.data_locks / data_lock_waits (8.0 yenisi), metadata_locks, sys.innodb_lock_waits, innodb_lock_wait_timeout (50 sn), innodb_print_all_deadlocks. |
Kim Kimi Bekletiyor?
SELECT waiting_pid, waiting_query,
blocking_pid, blocking_query,
wait_age, sql_kill_blocking_query
FROM sys.innodb_lock_waits;
-- Metadata lock (DDL bekliyor):
SELECT * FROM sys.schema_table_lock_waits;
-- Son deadlock:
SHOW ENGINE INNODB STATUS\G
Sınav Tuzağı: information_schema.INNODB_LOCKS / INNODB_LOCK_WAITS 8.0'da kaldırıldı → yerini performance_schema.data_locks ve data_lock_waits aldı.
05
Sorgu Optimizasyonu Query Optimization
| Alt Konu | Bilmen Gerekenler |
| EXPLAIN Çeşitleri | EXPLAIN (tablo), FORMAT=JSON (maliyet), FORMAT=TREE (8.0.16), EXPLAIN ANALYZE (8.0.18 — sorguyu gerçekten çalıştırır). |
| Optimizer | Maliyet tabanlı; mysql.server_cost / engine_cost. optimizer_switch, optimizer_trace, hint /*+ INDEX(t idx) */, hash join (8.0.18). |
| 8.0 İndeks Özellikleri | Invisible index (silmeden test), descending index, functional index (8.0.13), histogram: ANALYZE TABLE t UPDATE HISTOGRAM ON c. |
| İndeks Tasarımı | Clustered PK → secondary index PK'yı içerir. Leftmost prefix kuralı, covering index, prefix index, FULLTEXT, SPATIAL. |
| İndeks İstatistikleri | innodb_stats_persistent=ON, innodb_stats_persistent_sample_pages (20), ANALYZE TABLE, mysql.innodb_index_stats, SHOW INDEX → Cardinality. |
| Sorgu Analizi | MEM Query Analyzer, events_statements_summary_by_digest, sys.statements_with_full_table_scans, sys.schema_unused_indexes, sys.schema_redundant_indexes. |
EXPLAIN type — iyiden kötüye
systemconsteq_refreffulltextref_or_nullindex_mergeunique_subqueryindex_subqueryrangeindexALL
| Extra Değeri | Anlamı |
Using index | Covering index — tabloya gidilmedi |
Using index condition | ICP — filtre storage engine'de uygulandı |
Using filesort | Ek sıralama — ORDER BY indeksten gelmiyor |
Using temporary | Geçici tablo — GROUP BY / DISTINCT / UNION |
İndeksi Silmeden Test Et
ALTER TABLE orders ALTER INDEX idx_old INVISIBLE;
EXPLAIN ANALYZE SELECT * FROM orders WHERE cust_id = 42;
CREATE INDEX idx_fx ON users ((LOWER(email)));
Sınav Tuzağı: Primary key invisible yapılamaz. Histogram, indeks değildir — indekssiz kolonlar için selectivity tahmini verir, otomatik güncellenmez.
06
Yedekleme & Kurtarma Backup & Recovery
Yoğun
| Araç | Tip | Not |
mysqldump | Mantıksal | --single-transaction (InnoDB tutarlı, hot), --source-data=2, --routines --events, --set-gtid-purged |
mysqlpump | Mantıksal | Paralel (--default-parallelism); 8.0.34'te deprecated |
Shell util.* | Mantıksal | dumpInstance(), dumpSchemas(), loadDump() — paralel & sıkıştırmalı |
| MEB | Fiziksel | mysqlbackup: backup-and-apply-log, --incremental, backup-to-image, validate, copy-back · InnoDB için hot |
| Raw / Snapshot | Fiziksel | Cold kopya (sunucu kapalı), LVM/ZFS snapshot, transportable TS: FLUSH TABLES t FOR EXPORT |
| CLONE plugin | Fiziksel | 8.0.17+: CLONE INSTANCE FROM — replika/üye provizyonu |
mysqlbinlog | Binlog | --read-from-remote-server --raw --stop-never ile canlı binlog yedeği |
Terimler
| Hot / Warm / Cold | Okuma+yazma açık / sadece okuma / sunucu kapalı |
| Full / Incr. / Diff. | Tamamı / son yedekten beri / son full'den beri |
| Mantıksal vs Fiziksel | SQL çıktısı, taşınabilir, yavaş restore / dosya kopyası, hızlı, aynı sürüm-platform |
Point-in-Time Recovery
$ mysqldump --single-transaction --source-data=2 \
--routines --events --all-databases > full.sql
# 1) full yedeği geri yükle
$ mysql < full.sql
# 2) binlog'u hatalı işlemden hemen öncesine kadar oynat
$ mysqlbinlog --start-position=157 \
--stop-datetime="2026-10-13 09:59:59" \
binlog.000042 binlog.000043 | mysql
Sınav Tuzağı: --single-transaction MyISAM tablolarını tutarlı yapmaz. 8.0.26+ --master-data → --source-data olarak yeniden adlandırıldı.
MySQL OCP 8.0 Sınav Konu Haritası · Yüksek Erişilebilirlik & Sınav Hazırlık Planı
07
Yüksek Erişilebilirlik High Availability · Replication · InnoDB Cluster
En Yoğun
Replikasyon
| Neden? | Okuma ölçekleme, failover adayı, yedeği replikadan alma, coğrafi dağıtım, analitik izolasyon. |
| Tipler | Async (varsayılan), semi-sync (rpl_semi_sync_source plugin — en az 1 replika ACK), GTID tabanlı veya dosya+pozisyon. |
| Topolojiler | Source → replica, zincir (relay; log_replica_updates), multi-source (FOR CHANNEL), circular. |
| Thread'ler | Source: binlog dump · Replika: receiver (I/O) → relay log → applier (SQL) → worker'lar (replica_parallel_workers, LOGICAL_CLOCK). |
| Gereksinimler | Benzersiz server_id, binlog açık, REPLICATION SLAVE yetkili kullanıcı, GTID için gtid_mode=ON + enforce_gtid_consistency=ON. |
| İzleme | SHOW REPLICA STATUS\G: Replica_IO_Running, Replica_SQL_Running, Seconds_Behind_Source, Last_SQL_Error. P_S: replication_connection_status, replication_applier_status_by_worker. |
| Sorun Giderme | GTID'de hatalı işlemi atla: aynı GTID ile boş transaction enjekte et. sql_replica_skip_counter yalnızca GTID kapalıyken. Kırık replika → CLONE ile yeniden kur. |
GTID Replikasyon Kurulumu (8.0.23+ söz dizimi)
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='db1', SOURCE_USER='repl', SOURCE_PASSWORD='***',
SOURCE_AUTO_POSITION=1, SOURCE_SSL=1;
START REPLICA;
-- Hatalı GTID'i atla:
STOP REPLICA; SET GTID_NEXT='uuid:1234';
BEGIN; COMMIT; SET GTID_NEXT='AUTOMATIC'; START REPLICA;
Group Replication & InnoDB Cluster
| Group Replication | Paxos tabanlı (XCom) grup iletişimi; single-primary (varsayılan) veya multi-primary. Sertifikasyon ile çakışma tespiti. |
| GR Gereksinimleri | Yalnızca InnoDB, her tabloda PK, GTID açık, binlog_format=ROW, iletişim portu 33061. |
| Quorum | n = 2f + 1 → 3 üye 1 arızayı, 5 üye 2 arızayı tolere eder. En fazla 9 üye. |
| InnoDB Cluster | GR + MySQL Shell (AdminAPI) + MySQL Router. Router portları: 6446 RW / 6447 RO (classic), 6448/6449 (X). |
| Recovery | Distributed recovery: binlog ile incremental veya CLONE. Tam kesinti: dba.rebootClusterFromCompleteOutage(). Quorum kaybı: forceQuorumUsingPartitionOf(). |
| Kardeş Çözümler | InnoDB ReplicaSet (8.0.19, async, manuel failover), ClusterSet (8.0.27, DR için cluster'lar arası). |
MySQL Shell — AdminAPI (JS mod)
dba.checkInstanceConfiguration('admin@db1:3306')
dba.configureInstance('admin@db1:3306')
var c = dba.createCluster('prodCluster')
c.addInstance('admin@db2:3306', {recoveryMethod: 'clone'})
c.status() // ONLINE / RECOVERING / UNREACHABLE
c.setPrimaryInstance('db2:3306')
c.rejoinInstance('db3:3306')
$ mysqlrouter --bootstrap admin@db1:3306 --user=mysqlrouter
Sınav Tuzağı: 8.0.22–8.0.26 arası terminoloji değişti: MASTER→SOURCE, SLAVE→REPLICA. Sorularda iki söz dizimi de çıkabilir — ikisini de tanı.
08
Sınav Hazırlık Kontrol Listesi
| Lab kur: 3 node VM/Docker ile InnoDB Clusterdba.createCluster → addInstance → Router | Kritik |
| PITR provası: dump + binlog ile geri dönmysqldump → mysqlbinlog --stop-datetime | Kritik |
| Replikasyon kır & onarduplicate key → GTID boş tx → START REPLICA | Kritik |
| Kullanıcı/rol senaryolarıroller pasif → SET DEFAULT ROLE | Kritik |
| Option dosyası sırası & SET PERSISTmy_print_defaults mysqld | Önemli |
| EXPLAIN okuma: type + ExtraEXPLAIN FORMAT=TREE / ANALYZE | Önemli |
| Lock teşhisi (row + metadata)sys.innodb_lock_waits | Önemli |
| TDE + keyring kurulumuALTER TABLE t ENCRYPTION='Y' | Önemli |
| Enterprise araçları kavramsalMEB · MEM · Audit · Firewall | Önerilen |
| Varsayılan değerleri ezberleport 3306/33060/33061 · 6446/6447 | Önerilen |
Kritik mutlaka elle yap Önemli en az bir kez dene Önerilen kavramsal bil
Strateji: Çok seçenekli sorularda "Choose two/three" ifadesine dikkat. Önce kesin yanlışları ele; sürüme özgü (8.0.x) özelliklere ve varsayılan değerlere odaklan.
Zaman Kısıtı: 1Z0-908 16 Kasım 2026'da emekli oluyor. Sonrası için Oracle'ın yeni MySQL DBA öğrenme yolunu takip et.
09
Ezberlenecek Varsayılan Değerler MySQL 8.0 defaults
| Ağ & Bağlantı | Varsayılan |
| port | 3306 |
| mysqlx_port | 33060 |
| group_replication (XCom) | 33061 |
| Router RW / RO (classic) | 6446 / 6447 |
| max_connections | 151 |
| wait_timeout | 28800 sn |
| default_authentication_plugin | caching_sha2_password |
| InnoDB | Varsayılan |
| innodb_buffer_pool_size | 128M |
| innodb_page_size | 16K |
| innodb_file_per_table | ON |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_lock_wait_timeout | 50 sn |
| innodb_autoinc_lock_mode | 2 (interleaved) |
| transaction_isolation | REPEATABLE-READ |
| Log, Binlog & Karakter Seti | Varsayılan |
| log_bin | ON |
| binlog_format | ROW |
| binlog_expire_logs_seconds | 2592000 (30 gün) |
| sync_binlog | 1 |
| long_query_time | 10 sn |
| gtid_mode | OFF |
| character_set_server | utf8mb4 · utf8mb4_0900_ai_ci |