HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

Import huge databases faster in mysql


Recently I needed to import very huge SQL dumps to my local machine. There were 10 different .sql files dumped from Moodle and each of them were sized more than 10GB with approximately 5 million rows. First of all, I tried to import them in a traditional way by using:

mysql -u username -p some_db < database1.sql

However each import request took a very long time, approximately 6-7 hours for each .SQL file. Please also you consider that I conducted this operation in a brand new laptop with Intel i7 CPU, 16GB RAM and 512GB SSD disk. Since I didn't have 60 hours for importing all these dump files, I took a look for potential solutions and found a very effective one.

Continue reading
Date: | Tags: mysql, import big database, import huge database, innodb settings | Categories: tech, database

MySQL find and replace


MySQL'de bir tablo alanında bulunan herhangi bir karakteri bul-değiştir yapmak için şöyle bir sorgu yeterli;

UPDATE tablo_adi SET alan_adi = replace(alan_adi,'before','after');

Başarılar.

Continue reading
Date: | Tags: mysql nedir, mysql bul ve değiştir, mysql find replace | Categories: tech, database

Moodle'da silinmiş kullanıcıları tamamen yok etmek


Öğrenmiş oldum ki, moodle asla bir kullanıcıyı silmiyormuş. Yani uygulama tarafında kullanıcı silinse bile, aslında yapılan işlem veritabanında (mdl_user tablosunda) sadece kullanıcının boolean olan deleted alanının 1'e dönüşmesi işlemiymiş. Bu konu hakkında Moodle forumlarında güzel bir tartışma da var.

Özetle bu tartışmada söylenen, bu silinmiş kullanıcıların SQL hareketleriyle uçurulmasının riskli olabileceği. Çünkü kullanıcıların forum mesajı, sınav sonucu vs. bilgilerini de tespit edip temizlemek gerekecek. Aksi halde arkamızda nereye bağlı olduğu veya nasıl oluştuğu belli olmayan bir yığın çöp veri bırakmış oluruz ki - fayda sağlayalım derken daha çok zararı dokunur. Moodle veritabanının karmaşık yapısı ise bu ilişki tespit işlemini çok zorlaştırıyor.

Continue reading

IP adreslerini MySQL'de kaydetmek


Öncelikle şuradaki güzel yazıyı okumanızı tavsiye ederim. Ciddi bir benchmark testi uygulanmış.

MySQL kendi içerisinde IP adresi barındırmak için kullanabileceğimiz iki güzel fonksiyonla gelir. Bunlar INET_ATON() ve INET_NTOA() fonksiyonlarıdır. INET_ATON() fonksiyonu string olan IP adresini, 32bitlik UNSIGNED INTEGER biçimine çevirir. INET_NTOA() ise bu işlemin tem tersini yapar.

Hemen test edelim:

mysql> SELECT INET_ATON("88.254.195.158");
+-----------------------------+
| INET_ATON("88.254.195.158") |
+-----------------------------+
|                  1493091230 |
+-----------------------------+
1 row in set (0.02 sec)
mysql> SELECT INET_NTOA("1493091230");
+-------------------------+
| INET_NTOA("1493091230") |
+-------------------------+
| 88.254.195.158          |
+-------------------------+
1 row in set (0.05 sec)

3 kısımdan oluşan, günlük olarak kullandığımız IP adresleri aslında bu işleme tabi tutulmuş adreslerdir. Yani normalde "88.254.195.158" olarak andığımız bir IP adresinin bilgisayar dilinde ki ifadesi "1493091230"dır.

Continue reading
Date: | Tags: mysql de ip adresi, mysql boyutları, mysql performans | Categories: tech, database

MySQL veri şifreleme fonksiyonları


MySQL temel olarak 5 tane hazır şifreleme fonksiyonu ile gelir. Bunlar password(), encrypt(), md5, aes_encrypt() ve sha1()'dir. Sahi birde sha() vardı ne oldu ona? Birazdan buna da değineceğim.

MySQL konsolunu açarak hemen bir kaç deneme yapabiliriz:

mysql> SELECT SHA1("serhat");
+------------------------------------------+
| SHA1("serhat")                           |
+------------------------------------------+
| de30e5ef68d3ea5e7eb1de8d922e499cd6bc775e |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT MD5("serhat");
+----------------------------------+
| MD5("serhat")                    |
+----------------------------------+
| 4aa6d74604cad605ccb43b94aa5a7b94 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ENCRYPT("serhat");
+-------------------+
| ENCRYPT("serhat") |
+-------------------+
| NULL              |
+-------------------+
1 row in set (0.00 sec)
mysql> SELECT PASSWORD("serhat");
+-------------------------------------------+
| PASSWORD("serhat")                        |
+-------------------------------------------+
| *7B8566BBEC5FD8336D43CDDB7DD13EB891F43CA2 |
+-------------------------------------------+
1 row in set (0.00 sec)
Continue reading
Date: | Tags: mysql ve md5, mysql ve sha1, mysql şifreleme | Categories: tech, siber güvenlik, database, kriptoloji