Ubuntu Server Üzerinde MySQL Server Kurulumu
Merhaba sevgili okuyucu;
MySQL Sunucu kurulumunu Linux bir sistem üzerinde yapılandırabilmenizi sağlayabileceğine inandığım bu yazımda, en çok kullanılan dağıtımlardan biri olan Ubuntu üzerinde nasıl kuruglayabileceğinizi anlatmaya çalıştım. RHEL bir sistemde de paket dağıtımı dışında (RHEL sistemler dnf ya da yum paket dağıtım sistemlerini kullanmakta) çok minik farklarla kurulumu yapabilirsiniz.
Daha sonraki yazılarımda bu kurulumu temel alarak daha derin ölçekte makaleler hazırlamak niyetindeyim. Keyifli okumalar dilerim.
MySQL Nedir?
MySQL, istemci – sunucu modelli, Oracle tarafından 2010 (aslında 2005 oracle tarafından 2010 yılında satın alındı) yılından bu yana geliştirilen açık kaynaklı ilişkisel veri tabanı yönetim sistemidir (RDBMS). İlişkisel bir modele dayalı veri tabanı yaratmak ve yönetmek için kullanılan yazılımlara RDBMS denilmektedir. Sanıyorum ORacle Database’den sonra en çok kullanılan ikinci en popüler veritabanı olarak yer almaktadır. Ayrıca Stack Overflow tarafından yapılan ankete göre de MySQL, veri analistleri, yazılım geliştiricileri ve veri tabanı uzmanları tarafından en çok kullanılan veri tabanı yönetim sistemlerinden biri olarak yer almaktadır.
Günümüzde Facebook, Twitter, Wikipedia, YouTube, Netflix, Uber ve Airbnb gibi en çok ziyaret edilen uygulamaların hepsinde MySQL kullanılmaktadır.
Öncelikle kullandığım sistem şu şekilde;
ccorbaci@dbsrv:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
sudo apt update ile sistem depolarını güncellemeyi unutmayalım. Sonrasında paket listesine bakalım;
ccorbaci@dbsrv:~$ sudo apt list mysql-server -a
Listing... Done
mysql-server/jammy-updates,jammy-security 8.0.36-0ubuntu0.22.04.1 all
mysql-server/jammy 8.0.28-0ubuntu4 all
Sonrasında yüklemeye geçelim;
ccorbaci@dbsrv:~$ sudo apt install mysql-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin
libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23 libtimedate-perl
liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-common
mysql-server-8.0 mysql-server-core-8.0
Suggested packages:
libdata-dump-perl libipc-sharedcache-perl libbusiness-isbn-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin
libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23 libtimedate-perl
liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-common
mysql-server mysql-server-8.0 mysql-server-core-8.0
0 upgraded, 28 newly installed, 0 to remove and 2 not upgraded.
Need to get 29.5 MB of archives.
After this operation, 243 MB of additional disk space will be used.
Do you want to continue? [Y/n]
İlgili paketler ile beraber mysql 8.0 sürümünün kurulacağını bize bildiriyor. -y diyerek devam ediyorum ve kurulum tamamlanıyor.
ccorbaci@dbsrv:~$ mysql --version
mysql Ver 8.0.36-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))
MySQL servisinin çalışır durumda olduğunu ve sistem başlangıcında yeniden devreye girdiğinden emin olalım;
ccorbaci@dbsrv:~$ sudo service mysql status
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-03-06 13:05:43 UTC; 1min 58s ago
Process: 15111 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 15119 (mysqld)
Status: "Server is operational"
Tasks: 37 (limit: 2221)
Memory: 362.9M
CPU: 2.651s
CGroup: /system.slice/mysql.service
└─15119 /usr/sbin/mysqld
Mar 06 13:05:42 dbsrv systemd[1]: Starting MySQL Community Server...
Mar 06 13:05:43 dbsrv systemd[1]: Started MySQL Community Server.
ccorbaci@dbsrv:~$ sudo systemctl is-enabled mysql
enabled
ccorbaci@dbsrv:~$
Kurulum sonrasında phmyadmin kurulumu da yapmak isteyebilirsiniz.
phpMyAdmin Nedir?
phpMyAdmin MySQL veritabanı sunucusunun yönetimini idare etmek için kullanılan ve PHP’de yazılmış ücretsiz bir yazılım aracıdır. Veritabanı oluşturma, sorguları çalıştırma ve kullanıcı hesaplarını ekleme gibi birçok yönetim görevini gerçekleştirmeye yarar. Aynı zamanda phpMyAdmin herhangi bir SQL ifadesini düzenleyebilir ve işaretleyebilir. Tabloların içerisine metin dosyaları yüklenebilir, tablo dökümleri okunabilir ve oluşturulabilir. Veriler CSV, XML, PDF, ISCO/EIC gibi biçimlere aktarılabilir. Terminal üzerinden işlemleri gerçekleştirmenin yanı sıra kenarda bulunmasında yarar var diye düşünüyorum.
phpMyadmin web üzerinden yönetildiği için sunucumuzda apahce servisininde bulunması gerekmekte. İlgili kurulum dökümanına bakmak isterseniz ;
phMyAdmin PHP ile yazılmış bir araç olduğu için ilgili php paketlerinin kurulumunu da gerçekleştiriyorum;
ccorbaci@dbsrv:~$ sudo apt install php libapache2-mod-php php-mysql
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libapache2-mod-php8.1 php-common php8.1 php8.1-cli php8.1-common php8.1-mysql php8.1-opcache php8.1-readline
Suggested packages:
php-pear
The following NEW packages will be installed:
libapache2-mod-php libapache2-mod-php8.1 php php-common php-mysql php8.1 php8.1-cli php8.1-common php8.1-mysql php8.1-opcache php8.1-readline
0 upgraded, 11 newly installed, 0 to remove and 2 not upgraded.
Need to get 5,265 kB of archives.
After this operation, 21.8 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Sonrasında phpMyAdmin kurulumunu yapabilirim;
ccorbaci@dbsrv:~$ sudo apt install phpmyadmin
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
.
.
.
Kurulum sonunda kullandığımız web servisini seçmemizi isteyecektir. Ben apache olarak seçim yazıyorum. ( Seçimi üstüne gelerek boşluk tuşu ile yapabilirsiniz)

Sonrasında phpmyadmin için bir kullanıcı şifresi belirlemenizi isteyecektir. Ben root olarak yapılandıracağım.( Sonrasında db ler içinde kendi kullanıcılarınızı da yapılandırabilirsiniz. Daha sonra bu kısmı da anlatmaya çalışacağım.)
Sonrasında web tarayıcınızda http://192.168.1.100/phpmyadmin/ şeklinde erişebiliyor olmalısınız.

Bu aşamada root ya da kullanıcınız ile giriş yapamadığınızı farkedeceksiniz. Yapılandıralım.
MySQL Yapılandırma
Kurulumları yaptıktan sonra ilk olarak güvenlik komut dosyasını çalıştıralım. Yeni kurulumlarda uzak oturum açmalarda root kullanıcısına izin vermemek ve örnek kullanıcıları kaldırmak gibi şeyler için varsayılan seçenekleri değiştirir. Tek tek açıklamaya çalışacağım. Size uygun olanları seçiniz.
mysql_secure_installation
: Temmuz 2022’den itibaren, komut dosyasını başka bir yapılandırma yapmadan çalıştırdığınızda bir hata oluşacaktır . Bunun nedeni, bu betiğin kurulumun root MySQL hesabı için bir parola belirlemeye çalışmasıdır, ancak Ubuntu kurulumlarında varsayılan olarak bu hesap bir parola kullanarak bağlanacak şekilde yapılandırılmamıştır.
Bundan önce mysql komut istemine geçelim. Mysql komut işlemlerini bu kısımdan yapacağız;
ccorbaci@dbsrv:~$ sudo mysql
[sudo] password for ccorbaci:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Ardından, root kullanıcının kimlik doğrulama yöntemini parola kullanan bir yöntemle değiştirmek için aşağıdaki ALTER USER
komutu çalıştıralım, ve exit yazarak çıkalım;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '******';
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
ccorbaci@dbsrv:~$
****** olan kısımda şifrenizi yazmalısınız.
Bunu takiben, mysql_secure_installation
komut dosyasını sorunsuz bir şekilde çalıştırabilirsiniz.
ccorbaci@dbsrv:~$ mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
komut dosyası sorularını açıklamaya çalışayım.
- VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? (Kısaca low,medium ve strong olarak şifre güvenliği sağlayabilirsiniz. yes diyerek devam ettiğinizde göreceksiniz) Burada root MySQL kullanıcısı için daha önce bir parola ayarlamış olsanız bile , bu kullanıcının şu anda MySQL kabuğuna bağlanırken bir parola ile kimlik doğrulaması yapacak şekilde yapılandırılmadığını unutmayın. Dolayısıyla tekrar şifre yazmanızda fayda var.
- By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. (Varsayılanda olan test kullanıcısını kaldırmak için)
- Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network. (root kullanıcısını network üzerinde kapatmak için)
- By default, MySQL comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. ( test veritabanının kaldırılması hakkında)
- Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
Bu noktada phpmyadmin üzerinde root olarak ( mysql_secure_installation üzerinde root kullanıcısını 3. seçecekte networke kapatmadıysanız) erişebildiğinizi göreceksiniz.

Özel Bir MySQL Kullanıcısı Oluşturma ve Ayrıcalıklar Verme
mysql istemcisini yönetici ayrıcalıklar ile açmak için;
ccorbaci@dbsrv:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 65
Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
CREATE USER ifadesiyle kullanıcı oluşturmak için şu paterni kullanabilirsiniz;
CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
mysql> CREATE USER 'ccorbaci'@'localhost' IDENTIFIED BY '******';
Query OK, 0 rows affected (0.02 sec)
mysql>
Kullanıcı oluşturduktan sonra uygun ayrıcalıkları verebilirsiniz.Bunun için aşağıdaki paterni kullanabilirsiniz.
GRANT PRIVILEGE ON database.table TO 'username'@'host';
Verebileceğiniz PRIVILEGE değerleri aşağıdaki gibidir;
CREATE – Yeni tablolar veya veritabanları oluşturmalarına olanak tanır
DROP – tabloları veya veritabanlarını silmelerine olanak tanır
DELETE – Tablolardan satırları silmelerine olanak tanır.
INSERT – tablolara satır eklemelerine olanak tanır
SELECT – veritabanlarını okumak için select komutunu kullanmalarına olanak tanır
UPDATE – tablo satırlarını güncellemelerine izin ver
GRANT OPTION – diğer kullanıcıların ayrıcalıklarını vermelerine veya kaldırmalarına olanak tanır
Kullanılabilir ayrıcalıkların tam listesi;
https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#privileges-provided-summary
ccorbaci kullanıcısına root a en yakın hakları veriyorum;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ccorbaci'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.02 sec)
mysql>
ardından aşağıdaki komutu çalıştırıyorum. Bu komut sunucunun önbelleğe aldığı tüm belleği boşaltacaktır;
FLUSH PRIVILEGES;
Daha sonra mysql komut istemine aşağıdaki şekilde ulaşabilirsiniz;
mysql -u username -p
Evet şu an tam anlamıyla çalışır bir MySQL sunucunuz hazır.