FibaCloud
İçeriğe geç
Soru sor

Kapatmak için ESC tuşuna basın

Ubuntu’da MySQL 8.4 ve MariaDB 10.11 root Parolası Sıfırlama

Bu rehber Oracle MySQL 8.4 LTS ile MariaDB 10.11 LTS yollarını ayırır. İki ürün de yerel socket kimlik doğrulaması kullanabildiğinden işletim sistemi yöneticisinin veritabanına parola olmadan erişimi zaten bulunabilir. Servisi durdurmadan önce bunu kontrol edin. MySQL’in acil kurtarma yolu resmî init-file yöntemini kullanır; MariaDB’nin acil yolu yalnız socket erişimi kaldırılmış, parola kullanan hesap içindir. [S1, S4]

Doğrulama — 20 Eylül 2026: Ubuntu 24.04 üzerinde MySQL 8.4.11 ve MariaDB 10.11.14 ile kurtarma akışları izole ortamda denendi. Başarılı/başarısız sıfırlama, eski parolanın reddi, uygulama hesabı/verisinin korunması, kurtarmada TCP dinleyicilerinin kapanması ve normal çalışma kipine dönüş kontrol edildi. Boot, systemctl entegrasyonu ve etkin AppArmor politikası sınanmadı; üretimde kurtarma öncesinde aynı özelliklerdeki test sunucusunda bunları doğrulayın.

Kapsam ve hazırlık

Komutlar Ubuntu 24.04 üzerinde paketle yönetilen, standart /var/lib/mysql, /run/mysqld/mysqld.sock ve /usr/sbin/mysqld veya /usr/sbin/mariadbd yollarını kullanan tek sunucuyu hedefler. Veritabanı sürümünü yükseltmez. MySQL 8.4 ayrı bir ürün/sürüm seçimidir; Ubuntu’nun varsayılan MySQL paketinin 8.4 olduğunu varsaymayın. Komutları container, yönetilen veritabanı, özel veri dizini, çoklu instance, replikasyon veya Galera kümesine değiştirmeden uygulamayın.

Başlamadan önce:

  • Sudo yetkili mevcut SSH hesabınızı kullanın; ikinci yönetici terminali veya sağlayıcı konsolu açık kalsın. Linux root ile veritabanı root farklı hesaplardır.
  • Acil kurtarma gerekiyorsa uygulama için bakım kesintisi planlayın. Doğrulanmış yedek veya uygulama tutarlı snapshot ve geri yükleme yordamınız bulunsun.
  • Sunucu programını, sürümü, servis yapılandırmasını ve mevcut veri dizinini doğrulayın. Parola sıfırlamak için --initialize, mariadb-install-db çalıştırmayın; veri dizinini silmeyin veya başka veritabanı sürümü kurmayın.
  • Parola yöneticisinden uzun, benzersiz yeni parola üretin. Bütün parola yer tutucularını değiştirin. Örnekler üretilen parolada tek tırnak veya ters eğik çizgi bulunmadığını varsayar; bunlar varsa sunucunun belgelenmiş SQL kaçış kurallarını uygulayın. Parolayı kabukta -p argümanının sonuna, ekran görüntüsüne veya destek kaydına yazmayın.
  • Güvenilmeyen yerel kullanıcı veya iş yükleri sunucuya erişebiliyorsa MariaDB yetki denetimini atlayan kurtarma yolu uygun değildir; izole bakım ortamı kullanın. TCP’yi kapatmak yerel Unix socket’i tek başına korumaz.

Yalnız kurulu ürünü kontrol edin:

# Oracle MySQL
mysqld --version
sudo systemctl cat mysql

# MariaDB
mariadbd --version
sudo systemctl cat mariadb

Servis aşağıdaki elle başlatılan kurtarma süreciyle aynı varsayılan yapılandırmayı ve mevcut veri dizinini kullanmalıdır. ExecStart özel defaults dosyası veya instance ayarları içeriyorsa durun ve yordamı yöneticinizle uyarlayın. MySQL’in systemd paketleri mysqld_safe programını içermek zorunda değildir; bu rehber sunucu programını doğrudan başlatır. [S2]

Erişim kurtarmada karar sırası
Erişim kurtarmada karar sırası Önce mevcut yetkili erişim denenir. Acil kurtarma gerekiyorsa bakım penceresi ve yedek hazırlanır; normal kimlik doğrulaması geri açılmadan işlem tamamlanmış sayılmaz.
Görselin adım adım açıklaması
  1. Kontrol et: Mevcut yetkili erişimi dene.
  2. Hazırla: Yedek ve bakım penceresi oluştur.
  3. Kurtar: Ürün ve sürüme uygun prosedürü uygula.
  4. Doğrula: Normal kimlik doğrulamasını geri aç.

1. Önce mevcut yerel yönetici erişimini deneyin

MySQL için:

sudo env MYSQL_HISTFILE=/dev/null mysql --no-defaults --protocol=socket --socket=/run/mysqld/mysqld.sock --user=root

MariaDB için:

sudo env MYSQL_HISTFILE=/dev/null mariadb --no-defaults --protocol=socket --socket=/run/mysqld/mysqld.sock --user=root

Bağlantı kurulursa hesabı yerel olarak inceleyin. SHOW CREATE USER parola özeti içerebilir; çıktısını paylaşmayın.

SELECT VERSION(), CURRENT_USER();
SHOW CREATE USER 'root'@'localhost';

CURRENT_USER() sonucunun root@localhost olduğunu doğrulayın; tahminle başka hesabı değiştirmeyin.

  • MySQL auth_socket: sudo ile başarılı erişim amaçlanan kimlik doğrulama yöntemidir; kurtarılacak veritabanı parolası bulunmayabilir. Bilinçli hesap politikası değişikliği gerekmedikçe socket yöntemini koruyun; bu değişiklik kurtarma yordamının kapsamı dışındadır.
  • MySQL parola eklentisi ve zaten yetkili oturum: aşağıdaki ALTER USER komutunu kullanın, yeni parolayı ayrı terminalde doğrulayın. Acil yeniden başlatma gerekmez.
  • MariaDB yalnız unix_socket: sudo kullanmaya devam edin; socket-only hesaba parola atamak parola sıfırlama değildir ve reddedilebilir/yok sayılabilir.
  • MariaDB unix_socket OR mysql_native_password: aşağıdaki SET PASSWORD, socket erişimini korurken parola alternatifini etkinleştirir veya değiştirir. Modern kurulumlarda bu yapı yaygındır; yine de hesap tanımını doğrulayın. [S4, S5]

Yalnız MySQL:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'REPLACE_WITH_A_LONG_UNIQUE_PASSWORD';

Yalnız MariaDB; hesap parola destekleyen kimlik doğrulama yöntemi içeriyorsa:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('REPLACE_WITH_A_LONG_UNIQUE_PASSWORD');

PASSWORD() bu MariaDB ifadesinde geçerlidir; MySQL 8.0’da kaldırılmıştır. Bu MariaDB komutunu MySQL’de çalıştırmayın. İki üründe de mysql.user tablosuna doğrudan UPDATE gerekmez. [S3, S5]

Yetkili bir veritabanı oturumu yoksa aşağıdaki acil kollardan yalnız birini seçin.

2. MySQL 8.4: init dosyasıyla kurtarma

Bu yöntem normal yetki denetimi açıkken başlangıçta tek hesap yönetimi komutu çalıştırır. Bakım başlangıcında ağ dinleyicileri kapatılır. Yetki denetimini tümüyle kapatmaktan daha uygun yoldur. [S1]

Normal servisi durdurun. is-active, inactive yazmalıdır; bu durumda sıfırdan farklı çıkış kodu normaldir. Tek instance kapsamındaki pgrep başka mysqld süreci bulmamalıdır. Aynı veri dizininde ikinci sunucu başlatmayın.

sudo systemctl stop mysql
sudo systemctl is-active mysql
pgrep -a -x mysqld

Mysql işletim sistemi kullanıcısının okuyabileceği kısıtlı dosyayı hazırlayın. Kabuk noclobber ile 600 izinli yeni dosya oluşturur; bu ad zaten varsa işlem başarısız olur ve düzenleyici açılmaz. Üzerine yazmaya çalışmadan durup inceleyin. Mysql-files dizini Ubuntu paketi için amaçlanan aday yoldur; kurulu AppArmor politikasının okumaya izin verdiğini doğrulayın. Kurtarmayı çalıştırmak için AppArmor’u kapatmayın.

sudo install -d -o mysql -g mysql -m 750 /var/lib/mysql-files
sudo -u mysql sh -c 'set -C; umask 077; : > /var/lib/mysql-files/fc-root-reset.sql' && sudoedit /var/lib/mysql-files/fc-root-reset.sql

Dosyaya yeni parolanızla yalnız şu ifadeyi koyun. Host bölümü dahil tam hesabı hedefler. Geçici çözüm olarak kimlik doğrulama eklentisini mysql_native_password yapmayın.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'REPLACE_WITH_A_LONG_UNIQUE_PASSWORD';

A terminalinde aynı mevcut veritabanını ön planda başlatın; terminal açık kalsın. Program normal seçenek dosyalarını okur; aşağıdaki açık seçenekler bu bakım başlangıcını kısıtlar. Başlatma sonlanır veya hata yazarsa ikinci süreç başlatmak yerine hata/temizleme bölümüne geçin.

sudo install -d -o mysql -g mysql -m 755 /run/mysqld
sudo /usr/sbin/mysqld --user=mysql --datadir=/var/lib/mysql --socket=/run/mysqld/mysqld.sock --pid-file=/run/mysqld/mysqld.pid --init-file=/var/lib/mysql-files/fc-root-reset.sql --skip-networking --mysqlx=OFF

B terminalinde istem geldiğinde yeni parolayı girin. Sunucunun “ready” olması init komutunun başarılı olduğunu kanıtlamaz; zayıf parola veya yanlış hesap ALTER USER hatası doğurabilir. Yeni parolayla başarılı kimlik doğrulama zorunludur.

env MYSQL_HISTFILE=/dev/null mysql --no-defaults --protocol=socket --socket=/run/mysqld/mysqld.sock --user=root --password

Hesabı, sürümü ve TCP ağının kapalı olduğunu doğrulayın:

SELECT CURRENT_USER(), VERSION(), @@skip_networking;

Root@localhost, MySQL 8.4 ve skip_networking = 1 beklenir. sudo ss -ltnp çıktısını da inceleyin: kurtarma veritabanı süreci, yönetim veya X Plugin dinleyicisi dâhil hiçbir TCP portunu dinlememelidir. Dinleyici varsa süreci kapatıp yapılandırmayı düzeltmeden ilerlemeyin. Yetkili erişimi doğrulayın. B terminalinde SQL istemcisinden exit ile çıkın; sunucu çalışmaya devam eder. Yeni parola doğrulanır doğrulanmaz kabuktan açık parolalı init dosyasını silin; ardından yeni parolayla kurtarma sunucusunu kapatın. Bu shutdown işlemi, istemciden çıkmanın aksine sunucu sürecini durdurur.

sudo rm -- /var/lib/mysql-files/fc-root-reset.sql
mysqladmin --no-defaults --protocol=socket --socket=/run/mysqld/mysqld.sock --user=root --password shutdown

A terminali komut istemine dönmelidir. Normal servisi başlatmadan önce kurtarma sürecinin kalmadığını doğrulayın:

pgrep -a -x mysqld
sudo systemctl start mysql
sudo systemctl is-active mysql

3. MariaDB 10.11: yalnız socket erişimi yoksa acil kurtarma

Sudo/socket erişimi çalışıyorsa 1. bölümü kullanın. Bu kol root@localhost hesabının parola destekleyen yöntem kullandığını ve yetkili oturum kalmadığını varsayar. Hesap denetimini geçici kapatır; yalnız güvenilir yerel bakım erişimi gerekir. [S4]

Servisi durdurup eski sunucunun kalmadığını doğrulayın. Ardından A terminalinde mevcut veritabanını TCP ağı kapalı başlatın:

sudo systemctl stop mariadb
sudo systemctl is-active mariadb
pgrep -a -x mariadbd
pgrep -a -x mysqld
sudo install -d -o mysql -g mysql -m 755 /run/mysqld
sudo /usr/sbin/mariadbd --user=mysql --datadir=/var/lib/mysql --socket=/run/mysqld/mysqld.sock --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking

A terminali açık kalsın. B terminalinden veritabanı parolası olmadan bağlanın:

sudo env MYSQL_HISTFILE=/dev/null mariadb --no-defaults --protocol=socket --socket=/run/mysqld/mysqld.sock --user=root

Sunucuyu ve tam root hesabını kontrol edin. Beklenen sürüm 10.11 ile başlar; skip_networking 1’dir. sudo ss -ltnp çıktısında kurtarma veritabanı sürecinin hiçbir TCP portunu dinlemediğini doğrulayın; dinleyici varsa kurtarmayı durdurun. Ardından SET PASSWORD komutundan önce yetkileri yeniden yükleyin. Bu MariaDB kurtarma yolunda sıra önemlidir; eski “FLUSH en sonda” reçetesi geçerli değildir. [S4]

SELECT VERSION(), @@skip_networking;
SELECT User, Host FROM mysql.user WHERE User = 'root';
FLUSH PRIVILEGES;
SHOW CREATE USER 'root'@'localhost';

Mevcut parola destekleyen kimlik doğrulama yöntemini doğrulayın; var olan socket yöntemini kaldırmayın veya değiştirmeyin. Kapsamdaki mysql_native_password hesabı için çalıştırın:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('REPLACE_WITH_A_LONG_UNIQUE_PASSWORD');

Hesap socket-only veya harici/özel eklenti kullandığı için SET PASSWORD reddedilirse durun; mysql.user veya mysql.global_priv tablosunu doğrudan güncellemeyin. İlgili eklentinin yönetim yordamını izleyin.

Hâlâ yetkili olan SQL oturumundan kurtarma sunucusunu kapatın. Yalnız EXIT yapıp systemd başlatmayın:

SHUTDOWN;

A terminali döndüğünde ve kurtarma süreci kalmadığında normal başlatın:

pgrep -a -x mariadbd
pgrep -a -x mysqld
sudo systemctl start mariadb
sudo systemctl is-active mariadb

4. Normal çalışmayı doğrulayın

Parola destekleyen hesaba root olmayan işletim sistemi hesabından bağlanıp istemde yeni parolayı girin. MariaDB çift kimlik doğrulamasında bu önemlidir: sudo bağlantısı, parola yanlış olsa bile unix_socket üzerinden başarılı olabilir. Eski parolayı ayrı deneyin ve reddedilmesini bekleyin. Socket-only hesaplar için belgelenmiş sudo erişimi korunmalıdır; bu hesaplara yapay parola testi uygulamayın.

Kurulu ürünün istemcisini kullanın:

# Oracle MySQL
env MYSQL_HISTFILE=/dev/null mysql --no-defaults --protocol=socket --socket=/run/mysqld/mysqld.sock --user=root --password

# MariaDB
env MYSQL_HISTFILE=/dev/null mariadb --no-defaults --protocol=socket --socket=/run/mysqld/mysqld.sock --user=root --password

Kurtarma seçeneklerini kontrol edin; ağı bakım öncesi belgelenmiş yapılandırmayla karşılaştırın. Bilinçli socket-only kurulum normalde skip_networking ON kullanabilir; örneğe uymak için TCP açmayın.

SELECT CURRENT_USER(), VERSION();
SHOW VARIABLES WHERE Variable_name IN ('skip_grant_tables', 'skip_networking', 'init_file');
  • Yetki denetimini atlama kapalı olmalıdır. MySQL init-file kolunda init_file boş, kurtarma SQL dosyası silinmiş olmalıdır.
  • Uygulama kendi mevcut veritabanı hesabıyla bağlanmalıdır; zararsız bir okuma ve normal sağlık kontrolünü doğrulayın. Verileri ve yetkileri değişmemiş olmalıdır. Uygulama bağlantısını root yapmayın.
  • MariaDB başlangıçta socket kimlik doğrulaması kullanıyorsa sudo erişimini ve hesap tanımının korunduğunu doğrulayın.
  • Bakım penceresinde kontrollü servis yeniden başlatması yapıp kimlik doğrulama ve uygulama kontrollerini tekrarlayın.

Bir adım başarısız olursa

Uygulama trafiğini duraklatılmış tutun. Yerel sunucu hata kaydını inceleyin; parola, parola özeti veya init dosyası paylaşmayın. Kurtarma süreci çalışıyor ve normal yetkili shutdown mümkün değilse yapılandırılmış pid dosyasından tam kurtarma PID’sini alın, komutunu ve sahibini doğrulayın ve yalnız bu sürece SIGTERM gönderin. Geniş pkill komutları veya SIGKILL kullanmayın. Eski servisi başlatmadan sürecin durmasını bekleyin.

MySQL’de ALTER USER başarısız olsa da geçici init dosyasını kaldırın ve kurtarma seçenekleri olmadan başlatın. ALTER USER başarısız olduğunda eski parola hâlâ geçerli olabilir; sıfırlandığını varsaymadan doğrulayın. MariaDB’de SET PASSWORD başarısız olsa da yetki denetimsiz süreci kapatıp normal yapılandırmayla başlatın. Korumasız kurtarma sürecini çalışır bırakmayın. Veri dizinini gelişigüzel geri yüklemeyin; veri kurtarma gerekiyorsa önceden doğrulanmış yordamı kullanın.

Resmî kaynaklar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir