How to Solve MySQL Error: Access denied for user root@localhost

Most MySQL users encountered the ERROR 1698 (28000): Access denied for user ‘root’@’localhost’. This error message usually appears for new installations of MySQL when you try to connect to MySQL with the root user.

This guide will show you how to quickly resolve the access denied for user root on localhost. The outlined instructions apply to both MySQL and MariaDB. There will be no need to modify any tables or to perform complex configuration.

Using Root to Access MySQL

When you install MySQL and try to access it on the local machine with the root user, the command you use is:

mysql -u root -p

Solve Access Denied for User Root Error

To be able to log into MySQL as root, first use sudo to modify the root user:

sudo mysql

This command changes the password for the user root and sets the authentication method to mysql_native_password. This is a traditional method for authentication, and it is not as secure as auth_plugin. In the example above, we set “root” as the password, but we encourage you to set a stronger password.

Test Root User MySQL Access

After you run the commands listed above, exit the MySQL shell by pressing CTRL + D on your keyboard or type exit; and hit enter. There is no need to restart the mysqld service to log in.

Now try again to access MySQL with root. In the terminal, type in:

mysql -u root -p

Reference:

1. https://phoenixnap.com/kb/access-denied-for-user-root-localhost

Spring Boot Developer Tools Kullanımı

Spring Boot Developer Tools, Spring Boot uygulamanızın geliştirme sürecini hızlandırmak ve kolaylaştırmak için bir dizi araç ve özellikler içeren bir kütüphanedir. Bu araçlar arasında otomatik yeniden yükleme, hızlı yeniden başlatma, anlık yenileme, otomatik yeniden yapılandırma vb. yer alır.

Spring Boot Developer Tools’u kullanarak, Spring Boot uygulamanızı anında yeniden yükleyebilirsiniz. Bu sayede, kod değişikliklerinizi kaydettikten hemen sonra uygulamanızı yeniden başlatmanız gerekmez, Spring Boot Developer Tools bunu sizin için otomatik olarak yapar.

Aşağıda, Spring Boot Developer Tools kullanarak hızlı bir şekilde bir “Merhaba Dünya” uygulaması oluşturmak için bir örnek kod bulunmaktadır:

İlk olarak, Spring Boot’u ve Developer Tools’u projenize ekleyin. Bu örnekte, Maven kullanarak projeyi yönetiyoruz.

pom.xml dosyasına aşağıdaki bağımlılıkları ekleyin:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
  </dependency>
</dependencies>

Daha sonra, Spring Boot uygulamanızı oluşturun. Bu örnekte, HelloController adında bir controller sınıfı ve /hello isteğine cevap verecek bir hello metodu kullanıyoruz.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Merhaba Dünya!";
    }
}

Son olarak, uygulamanızı başlatın ve /hello isteğine bir tarayıcıdan erişin.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

Bu kadar! Şimdi, HelloController sınıfındaki metodu değiştirin ve kaydedin. Spring Boot Developer Tools, uygulamanızı otomatik olarak yeniden yükleyecek ve yeni değişiklikleri görebileceksiniz.

Spring Boot Developer Tools’un sağladığı diğer özellikler arasında, statik içeriği yeniden yüklemek, sabit dosyaları yeniden yüklemek, thymeleaf şablonlarını yeniden yüklemek vb. yer alır. Bu özellikler sayesinde, Spring Boot uygulamanızı hızlı ve kolay bir şekilde geliştirebilirsiniz.

Profile ve Farklı Interface İçeren Spring Boot Örneği

Örneğimizde, DatabaseConfiguration adında bir sınıfımız ve bu sınıfın uygulama için iki farklı profile’ı var: dev ve prod.

DatabaseConfiguration.java

@Configuration
public class DatabaseConfiguration {

    @Value("${database.username}")
    private String username;

    @Value("${database.password}")
    private String password;

    @Value("${database.dev-url}")
    private String devUrl;

    @Value("${database.prod-url}")
    private String prodUrl;

    @Bean
    @Profile("dev")
    public DataSource devDataSource() {
        return new DevDataSource(username, password, devUrl);
    }

    @Bean
    @Profile("prod")
    public DataSource prodDataSource() {
        return new ProdDataSource(username, password, prodUrl);
    }
}

Yukarıdaki kod bloğunda, DatabaseConfiguration adlı bir sınıfımız var ve burada DataSource adlı bir başka sınıfımızı kullanıyoruz. Bu DataSource sınıfı, iki farklı profilde çalışacak şekilde yapılandırılmıştır: dev ve prod.

Ayrıca, @Value anotasyonu kullanarak application.properties dosyasında tanımladığımız veritabanı kullanıcı adı ve şifresini ayarlarız.

application.properties

# Veritabanı ayarları
database.username=myuser
database.password=mypassword

# Uygulama ayarları
spring.profiles.active=dev

Aşağıda, DataSource sınıfımızın arayüzünü gösteren bir örnek kod bloğu bulunmaktadır:

public interface DataSource {
    void connect();
}

DevDataSource.java

public class DevDataSource implements DataSource {
    private String username;
    private String password;
    private String url;

    public DevDataSource(String username, String password, String url) {
        this.username = username;
        this.password = password;
        this.url = url;
    }

    @Override
    public void connect() {
        System.out.println("DevDataSource connected to " + url + " with username " + username + " and password " + password);
    }
}

Bu arayüz, DataSource sınıfımızın uygulama tarafından kullanılacak API’sini tanımlar. connect() metodu burada sadece bir örnek olsun diye eklenmiştir.

Son olarak, DatabaseService adlı bir başka sınıfımız var ve burada DataSource sınıfımızı kullanıyoruz:

@Service
public class DatabaseService {

    private final DataSource dataSource;

    public DatabaseService(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public void connectToDatabase() {
        dataSource.connect();
    }
}

Yukarıdaki sınıfta, DataSource sınıfı constructor’a parametre olarak geçirilir. connectToDatabase() metodu, DataSource sınıfının connect() metodunu çağırarak veritabanına bağlanır.

ProdDataSource.java

public class ProdDataSource implements DataSource {
    private String username;
    private String password;
    private String url;

    public ProdDataSource(String username, String password, String url) {
        this.username = username;
        this.password = password;
        this.url = url;
    }

    @Override
    public void connect() {
        System.out.println("ProdDataSource connected to " + url + " with username " + username + " and password " + password);
    }
}

DatabaseConfiguration.java

@Configuration
public class DatabaseConfiguration {

    @Value("${database.username}")
    private String username;

    @Value("${database.password}")
    private String password;

    @Value("${database.dev-url}")
    private String devUrl;

    @Value("${database.prod-url}")
    private String prodUrl;

    @Bean
    @Profile("dev")
    public DataSource devDataSource() {
        return new DevDataSource(username, password, devUrl);
    }

    @Bean
    @Profile("prod")
    public DataSource prodDataSource() {
        return new ProdDataSource(username, password, prodUrl);
    }
}

Bu örnekte, DatabaseService sınıfı, DataSource arayüzünü kullanarak veritabanına bağlanır. DatabaseConfiguration sınıfı, DataSource sınıfının iki farklı profil için nasıl yapılandırılacağını gösterir. application.properties dosyasında database.username ve database.password özelliklerini ayarlayarak veritabanı kimlik bilgilerini belirleyebilirsiniz.

Application.java

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {
            DataSource dataSource = (DataSource) ctx.getBean("devDataSource");
            dataSource.connect();
        };
    }
}

Yukarıdaki örnekte, DataSource adlı bir arayüz tanımlıyoruz ve DevDataSource ve ProdDataSource sınıfları bu arayüzü uyguluyor. DatabaseConfiguration sınıfı, uygulama iki farklı profil çalıştırdığında hangi veritabanı bağlantısı sınıfını kullanacağını belirler. application.properties dosyasında veritabanı kullanıcı adı, şifre ve iki farklı URL tanımlanır. Son olarak, Application sınıfı, CommandLineRunner arabirimi aracılığıyla DevDataSource nesnesini elde eder ve veritabanına bağlanır.

Spring Boot Port Değiştirmek

pring Boot uygulamasının çalışacağı portu değiştirmek için, application.properties veya application.yml dosyalarını kullanarak yapılandırma dosyasını değiştirebilirsiniz. Bu dosyalar, uygulamanın çalışması için gerekli olan ayarları içerir.

application.properties dosyasını kullanarak, uygulamanın çalışacağı portu aşağıdaki şekilde ayarlayabilirsiniz:

server.port=8081

Bu örnekte, uygulamanın 8081 numaralı bağlantı noktası üzerinde çalışacağı belirtilmiştir. Benzer şekilde, application.yml dosyasını kullanarak aynı ayarlamayı yapabilirsiniz:

server:
  port: 8081

Bu dosya, aynı şekilde uygulamanın 8081 numaralı bağlantı noktası üzerinde çalışacağını belirtir. Ancak, programatik olarak da port ayarlamak mümkündür. Bunu yapmak için, application.properties veya application.yml dosyalarında herhangi bir port numarası belirtmeden, aşağıdaki şekilde SpringApplication sınıfı üzerinden run() metodunu çağırarak uygulama başlatılabilir:

package com.hello.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class HelloApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloApplication.class, args);
	}
    @GetMapping("/hello")
    public String hello() {
        return "Merhaba Dünya!";
    }
}

Yukarıdaki örnekte, server.port değeri SpringApplication nesnesine özgü bir özellik olarak ayarlanır. Bu şekilde, uygulama çalıştırıldığında, ayarlanan port numarası kullanılacaktır.

Not: Spring Boot uygulaması, bir web uygulaması olarak tasarlanmışsa, SpringBootServletInitializer sınıfını genişletmek gerekebilir. Bu sınıf, uygulamanın dış dünyaya açık olan HTTP bağlantı noktasını ayarlamak için gereklidir.

Merhaba Dünya Spring Boot Projesi

Spring Boot kullanarak basit bir örnek uygulama oluşturabiliriz. VS Code üzerinde adım adım spring boot projesi oluşturmak için basit düzeyde adımları gösterdim.

Şekil 1. VS Code Üzerinde Spring Initializer Yüklemesi.

Şekil 2. VS Code Üzerinde Spring Boot Version Seçme.

Şekil 3. VS Code Üzerinde Spring Boot için Proje Dili.

Şekil 4. VS Code Üzerinde Spring Boot için Paket Adı.

Şekil 5. VS Code Üzerinde Spring Boot için Java Version Seçimi.

Şekil 6. VS Code Üzerinde Spring Boot için Bağımlılıkların Belirlenmesi.

Aşağıdaki örnek, “Merhaba Dünya” mesajını RESTful bir API üzerinden döndürür.

İlk olarak, pom.xml dosyasında gerekli bağımlılıkları ekleyelim:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

Daha sonra, Spring Boot uygulamasının başlangıç sınıfını tanımlayalım:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class HelloApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }

    @GetMapping("/hello")
    public String hello() {
        return "Merhaba Dünya!";
    }
}

Bu sınıf, @SpringBootApplication anotasyonu ile işaretlenir ve Spring Boot uygulamasının başlangıç noktasını tanımlar. Ayrıca, @RestController anotasyonu ile işaretlenir ve bir RESTful API sunucusu olarak davranır.

Son olarak, @GetMapping("/hello") anotasyonu ile /hello yoluna sahip bir HTTP GET isteği tanımlıyoruz. Bu yol, uygulamanın “Merhaba Dünya” mesajını döndürdüğü bir API olarak kullanılır.

Uygulamayı çalıştırdıktan sonra, http://localhost:8080/hello adresine bir GET isteği gönderdiğimizde, “Merhaba Dünya!” mesajını elde ederiz.

Bu, basit bir Spring Boot uygulaması örneğidir ve Spring Boot’u kullanarak daha karmaşık uygulamalar da oluşturabilirsiniz.

Spring Boot Nedir?

Spring Boot, Java programlama dili için bir web uygulama geliştirme çerçevesidir. Spring Boot, Spring Framework üzerine inşa edilmiştir ve Spring tabanlı uygulamaların hızlı ve kolay bir şekilde oluşturulmasını sağlar.

Spring Boot, Spring Framework’ün birçok bileşenini bir arada sunar ve uygulama geliştiricilerinin ihtiyaç duydukları birçok işlevi hızlı bir şekilde yapılandırabilmelerine olanak tanır. Örneğin, Spring Boot, veritabanı bağlantıları, güvenlik, oturum açma yönetimi, REST API’lerin oluşturulması ve diğer birçok işlevi hızlı bir şekilde yapılandırmanıza olanak tanır.

Spring Boot, mikro hizmet mimarisi için de kullanılabilir ve Docker, Kubernetes ve diğer bulut teknolojileriyle kolayca entegre edilebilir. Bu nedenle, Spring Boot, Java uygulamaları için çok popüler bir seçimdir. Spring Boot, kendine özgü bir “opinionated” yaklaşım benimser, yani uygulama geliştiricilerinin uygulama yapılandırmasını ve yönetimini kolaylaştırmak için önceden belirlenmiş bir dizi varsayılan ayar ve konfigürasyon ile gelir. Bu yaklaşım, uygulama geliştiricilerinin daha az vakit harcayarak uygulama oluşturmalarına ve daha hızlı bir şekilde işe koyulmalarına olanak tanır.

Spring Boot, Maven veya Gradle gibi popüler yapılandırma araçlarıyla kolayca entegre olabilir. Ayrıca, Spring Boot uygulamaları standart bir Java uygulaması gibi paketlenebilir ve başka bir bilgisayara taşınabilir.

Spring Boot ayrıca büyük bir topluluğa sahiptir ve bu topluluk, uygulama geliştiricilerine yardımcı olmak için çok sayıda kaynak sağlar. Bu kaynaklar arasında belgeler, örnek uygulamalar, forumlar ve tartışma grupları yer alır.

Sonuç olarak, Spring Boot, Java programlama dilinde web uygulamaları geliştirmek için kullanılan popüler bir çerçevedir. Kolay kullanımı, hızlı yapılandırması ve geniş topluluğu sayesinde, Spring Boot, Java uygulama geliştiricilerinin ihtiyaçlarını karşılamak için ideal bir seçenektir.

pom.xml, Maven tabanlı bir proje için yapılandırma dosyasıdır ve proje bağımlılıklarını, sürüm numaralarını, plugin yapılandırmalarını, proje açıklamasını ve diğer detayları içerir.

Bir Maven projesinin kök dizininde yer alan pom.xml dosyası, proje yapısının merkezinde yer alır ve proje geliştiricileri tarafından kolayca düzenlenebilir. pom.xml, proje geliştiricilerinin Maven’ın birçok özelliğini kullanarak proje yapısını kolayca yapılandırmasına olanak tanır.

pom.xml dosyası, <project> etiketiyle başlar ve <modelVersion>, <groupId>, <artifactId>, <version> gibi birçok özellik içerir. Örneğin, groupId, proje grubunu, artifactId, proje adını ve version, proje sürümünü tanımlar.

Ayrıca, pom.xml dosyası, proje bağımlılıklarını içerir. Proje geliştiricileri, diğer kütüphanelere bağımlılıklarını bu dosyada tanımlarlar. Maven, proje derleme işlemi sırasında bu bağımlılıkları otomatik olarak yükler ve projenin düzgün çalışmasını sağlar.

Örneğin, aşağıdaki gibi bir pom.xml dosyası, bir Spring Boot projesinin gerekli bağımlılıklarını içerebilir:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>myproject</artifactId>
  <version>1.0.0</version>
  
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.6.3</version>
    </dependency>
  </dependencies>
</project>

Bu örnek pom.xml dosyası, org.springframework.boot grubundan spring-boot-starter-web kütüphanesinin 2.6.3 sürümüne bağımlıdır. Bu bağımlılık, proje derleme işlemi sırasında otomatik olarak yüklenecektir.