Centos Mysql Kurulumu ve Ayarları
Merhaba, bu makalemizde Centos sunucumuza mysql veritabanı sunucusunu nasıl kurup aktif edebileceğimizi anlatacağız. Bazı büyük projelerimde farklı bir linux vds’e mysql kurarak remote olarak açılmak daha güvenli ve performanslı olduğu için sizlerede anlatmak istedim.
Öncelikle elinizde yeni kurulmuş bir Linux Centos vds olduğunu kabul ediyorum.
Mysql Kurulumu
Aslındak kurulumu oldukça kolay. Tek yapmanız gereken komut satırına aşağıdak kodu yazmak.
1 | sudo yum install mysql-server |
SSH’de “Complete!” yazısını gördüyseniz Mysql sunucumuz başarıyla kurulmuş demektir. Şimdi Mysql sunucumuzu başlatacağız.
1 | service mysqld start |
Başlatırken bazı uyarılar ve hatalar göreceksiniz. Bunlar kullanıcının olmadığını v.s söyleyen hatalarımızdır. Hepsini halledeceğiz.
Şimdi genel güvenlik ayarlarımızı yapmak için aşağıdaki kodumuzu komut satırına giriyoruz.
1 | sudo /usr/bin/mysql_secure_installation |
Burada bazı sorular ile karşılaşacağız. Bunları tek tek anlatalım.
- Enter current password for root (enter for none) – Burada mysql root şifrenizi soruyor. Biz herhangi bir şifre belirlemedik. Direkt entere basarak geçiyoruz.
- Set root password? [Y/n] – Root şifresi oluşturmak istiyormuyuz diye soruyor. Evet oluştursak iyi olur. Kendinize göre bir root şifresi oluşturun ancak unutmayın!
- Remove anonymous users? [Y/n] – Anonim kullanıcıları silelim mi? diye soruyor. Direkt entere basarak “Yes” demiş oluyorsunuz. Entere basarak kabul edelim ve anonim kullanıcıları silelim.
- Disallow root login remotely? [Y/n] – Root kullanıcısının uzakdan bağlantı kurmasını deaktif edelim mi? diye soruyor. Yine entere basarak kabul edelim. Root kullanıcısı ile uzakdan bağlanılamasın. Uzakdan bağlanmak için farklı bir kullanıcı oluşturacağız. Root her zaman tehlikelidir!
- Remove test database and access to it? [Y/n] – Test veritabanlarını ve bunların yetkilerini silelim mi? diye soruyor. Yine enter ile devam ediniz. Test veritabanlarını silip, yetkilerinide alalım.
- Reload privilege tables now? [Y/n] – Kalan tabloların yetkilerini yeri yükleyelim mi? diye soruyor. Enter tuşuna basarak kabul ediyoruz.
Buradan sonra karşınıza şöyle bir yazı gelecek;
1234 | All done! If you’ve completed all of the above steps, your MySQLinstallation should now be secure.Thanks for using MySQL! |
Tebrikler Mysql’i kurdunuz ve başarıyla ayarlarını yaptınız.
Son olarak sunucumuz her yeniden başlatıldığında Mysql’in otomatik başlaması için aşağıdaki kodu komut satırına giriyoruz;
1 | chkconfig mysqld on |
Evet artık bütün işlerimiz bitti. Mysql sunucunuzu kullanabilirsiniz. Ancak yeni bir kullanıcı ve şifre oluşturmanız gerekiyor ki remote (uzakdan) bağlanarak işlemlerinizi yapabilesiniz.
Eğer IPTables açık ise 3306 portunu engelleyeceğinden dolayı mysql sunucunuza ulaşamayabilirsiniz. Bunun için 2 adet yöntem var.
- (Önerilir) Aşağıdaki kodları kullanarak IPTables’a 3306 için kural ekleyebilirsiniz.
12-I INPUT -p tcp –dport 3306 -m state –state NEW,ESTABLISHED -j ACCEPT-I OUTPUT -p tcp –sport 3306 -m state –state ESTABLISHED -j ACCEPT - (Önerilmez) IPTablesı kökten kapatıp tüm portlara izin verebilirsiniz.
(İkinci satırda bulunan sunucu resetlendiğinde otomatik olarak iptablesin kapalı gelmesi içindir)12service iptables stopchkconfig iptables off
Mysql Kullanıcı Oluşturmak
Evet tüm ayarlarımız tamam ve kullanıcı oluşturmaya geldik. Öncelikle SSH’den mysql’e girmek için aşağıdaki komutu kullanıyoruz.
1 | mysql -p |
Burada sizden şifrenizi isteyecek. Kurulum aşamasında belirlediğimiz şifreyi giriyoruz. Karşınıza aşağıdaki gibi bir ekran geldiyse doğru yoldasınız demektir.
Şimdi kayıtlı olan kullanıcılara bir göz atalım. Aşağıdaki komutu yazıyoruz;
1 | SELECT User, Host, Password FROM mysql.user; |
Ve aşağıdaki gibi bir tablo görmeniz gerekiyor. Kullanıcı isimleri, yetki alanları ve şifreleri (Encrypted şekilde) görülebiliyor.
123456 | +——+———–+——————————————-+| User | Host | Password |+——+———–+——————————————-+| root | localhost | *C11FAAF646723B6492 || root | 127.0.0.1 | *C11FAAF646723B6492 |+——+———–+——————————————-+ |
Şimdi bizim istediğimiz bir veritabanı oluşturarak ona kullanıcı tanımlayarak uzakdan erişmek istiyoruz. Öncelikle varolan veritabanlarına bir bakalım;
1 | SHOW DATABASES; |
123456 | +——————–+| Database |+——————–+| information_schema || mysql |+——————–+ |
Sadece 2 adet veritabanım var. Üstte gördüğümüz gibide sadece root kullanıcımız var. Şimdi öncelikle bir adet veritabanı oluşturalım.
1 | CREATE DATABASE dnsadresi_db; |
Şöyle bir ekran gelmeli;
1 | Query OK, 1 row affected (0.01 sec) |
Veritabanımızı oluşturduk. Şimdi tekrar veritabanlarımızın listesine bakalım;
12345678 | mysql> SHOW DATABASES;+——————–+| Database |+——————–+| information_schema || dnsadresi_db || mysql |+——————–+ |
Evet gördüğünüz gibi dnsadresi_db burda yerini almış. Şimdi kullanıcı oluşturmamız gerekiyor. Hadi oluşturalım;
1 | CREATE USER ‘ciaksoy’@’localhost’ IDENTIFIED BY ‘ciaksoySIFRE’; |
ciaksoy adından bir kullanıcı oluşturduk ve şifresinide ciaksoySIFRE koyduk.
Kullanıcılara tekrar göz gezdirirsek son durum şu şekilde olacak;
12345678 | mysql> SELECT User, Host, Password FROM mysql.user;+———+———–+——————————————-+| User | Host | Password |+———+———–+——————————————-+| root | localhost | *C11FAAF646723B6492 || root | 127.0.0.1 | *C11FAAF646723B6492 || ciaksoy | localhost | *48FB56B5A57A7B4FFE |+———+———–+——————————————-+ |
Şimdi tek yapmamız gereken “ciaksoy” kullanıcımıza “dnsadresi_db” veritabanı üstünde yetki vermek.
1 | GRANT ALL PRIVILEGES ON dnsadresi_db.* to ciaksoy@localhost; |
Herşey tamam şimdi yetkilerin aktif olması için yetkileri yeniden düzenlememiz gerekiyor.
1 | FLUSH PRIVILEGES; |
Şimdi yetkilerimize bakalım;
1 | SHOW GRANTS FOR ‘ciaksoy’@’localhost’; |
Şöyle bir tablo olması gerekiyor;
123456 | +—————————————————————————————————————-+| Grants for ciaksoy@localhost |+—————————————————————————————————————-+| GRANT USAGE ON *.* TO ‘ciaksoy’@’localhost’ IDENTIFIED BY PASSWORD ‘*48FB56B5A57A7B4FFE3’ || GRANT ALL PRIVILEGES ON `dnsadresi_db`.* TO ‘ciaksoy’@’localhost’ |+—————————————————————————————————————-+ |
Evet artık “ciaksoy” kullanıcısı “dnsadresi_db” veritabanında yetkiye sahip.
Ancak hala uzakdan erişemezsiniz. Sadece bu kullanıcı ile localde o veritabanına müdahale edebilirsiniz. Bunun için yetkileri biraz daha genişletiyoruz.
12 | GRANT ALL PRIVILEGES ON dnsadresi_db.* TO ‘ciii’@’%’ IDENTIFIED BY ‘SIFRE’ WITH GRANT OPTION;FLUSH PRIVILEGES; |
Bu komut ile “ciii” kullanıcısına herhangi bir IP’den (%) “SIFRE” şifresi ile “dnsadresi_db” veritabanına ulaşabileceğini söyledik. Artık uzakdan bağlantı kurarak istediğiniz gibi yönetebilirsiniz.
No Comments