mysql – Dubluve.net http://www.dubluve.net Biz de yazılımcıyız Tue, 07 Feb 2017 15:21:40 +0000 tr-TR hourly 1 https://i2.wp.com/www.dubluve.net/wp-content/uploads/2016/04/logo_small.png?fit=32%2C29 mysql – Dubluve.net http://www.dubluve.net 32 32 28347504 phpmyadmin session süresini arttırmak http://www.dubluve.net/2013/07/24/phpmyadmin-session-suresini-arttirmak/ http://www.dubluve.net/2013/07/24/phpmyadmin-session-suresini-arttirmak/#comments Wed, 24 Jul 2013 06:41:43 +0000 http://dubluve.net/?p=2704 Local ortamda çalışırken phpmyadmin’de sürekli timeout yiyerek tekrar giriş yapmak zorunda kalmak canımı sıktı. Bende bu süreyi nasıl uzatacağımı buldum.

Öncelikle phpmyadmin’in config.inc.php dosyasını bulunuz. (linux’ta /etc/phpmyadmin/ klasörünün altında olması gerekiyor.) Buraya $cfg[‘LoginCookieValidity’] parametresini ekleyeceğiz. Ben 1 yıl timeout süresi verdim şu şekilde;

$cfg[‘LoginCookieValidity’] = 31536000; /*365 * 24 * 60 * 60*/

NOT : BUNU SADECE LOCAL ORTAMDA ÇALIŞIRKEN UYGULAYINIZ!!!

]]>
http://www.dubluve.net/2013/07/24/phpmyadmin-session-suresini-arttirmak/feed/ 4 2704
Mysql – birden fazla IP den mysqle baglanmak http://www.dubluve.net/2013/05/20/mysql-birden-fazla-ip-den-mysqle-baglanmak/ http://www.dubluve.net/2013/05/20/mysql-birden-fazla-ip-den-mysqle-baglanmak/#comments Mon, 20 May 2013 07:19:42 +0000 http://dubluve.net/?p=2611 Eğer 2 farklı IP’deki sunucunuz, aynı mysql sunucusuna bağlanması gerekiyorsa yapmanız gereken temel olarak bir kaç maddelik işiniz var demektir. Bunları listeleyelim :

  1. Bağlanılan (mysql-server’in olduğu makinenizde) mysql konfigürasyon dosyanızı bulun. (işletim sisteminiz centos ise /etc/my.cnf gibi bir yerde, ubuntu ise, /etc/mysql/my.cnf gibi bir yerdedir). 
  2. my.cnf içerisinde bind-address diye bir parametre varsa, onu 0.0.0.0 şeklinde düzeltin, yoksa
    bind-address = 0.0.0.0

    şeklinde yeni bir satır ekleyin (çünkü varsayılan değeri 127.0.0.1 yani localhost tur)

  3. my.cnf içerisinde skip-networking diye bir parametre varsa onu silin. (veya başına # işareti koyarak yorum haline getirin.)
  4. Mysqlinizi yeniden başlatın. (service mysql restart)
  5. şu anda veritabanınız dışarıdan bağlantılara açık hale geldi. Ancak bu bi güvenlik tehdidini de beraberinde getirir. Doğrudan bir tehlike değil bu ancak, root şifrenizi deneye yanıla(brute-force teknikleri de dahil) bulabilirler, veya yanlış vermiş olduğunuz yetki, user var ise, bunları keşfedebilirler)  Bu yüzden bir firewall kullanmalıyız. Halihazırda iptables vardır diye düşünüyorum. iptables için bir kural ekleyelim ve istemediğimiz ipler dışındaki istekleri drop edelim, böylece sadece istediğimiz IP’ler networkten içeri girebilsin. :
    iptables -A INPUT -p tcp --dport 3306 ! -d xxx.xxx.xxx.xxx -j DROP
  6. bir user ekleyin.
    CREATE USER 'kullanici'@'ip_Adresi' IDENTIFIED BY 'şifre';
  7. Bu kullanıcıya ilgili IP için yetki verin(hangi yetkileri istiyorsanız)
    GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , EVENT, TRIGGER, SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `database_adi` . * TO 'kullanici'@'ip_Adresi';
  8. Testlerinizi yapın. Bu testleri hem bağlanmasını istediğiniz makineler için, hem de istemediğiniz makineler için mutlaka yapın. mysql-client yüklü ise şöyle yapabilirsiniz :
    mysql -u kullanici -h ip_Adresi database_adi

mysql bağlantıları için iptables kuralları kaynak: http://www.cyberciti.biz/faq/unix-linux-mysqld-server-bind-to-more-than-one-ip-address/

]]>
http://www.dubluve.net/2013/05/20/mysql-birden-fazla-ip-den-mysqle-baglanmak/feed/ 1 2611
mysql’deki tablonun olup olmadığını kontrol etmek (php kullanarak) http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/ http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/#comments Wed, 17 Apr 2013 22:49:36 +0000 http://dubluve.net/?p=2576 Php ile çalışırken, mysql’de kullandığımız veritabanı içerisinde, herhangi bir isimdeki tablonun var olup olmadığını kontrol etmenin bir kaç yolu vardır. Bu yazıda onlardan bahsedeceğim.

Bunlardan ilki, SHOW TABLES querysini kullanmaktır.

Örneğin, test isminde bir veritabanımız olsun. İçerisindeki tabloların ismi de, admin, member, log, test1, test2 olsun. Yani mysql’e konsoldan bağlanıp use test dedikten sonra, show tables dediğimizde karşımıza şu çıksın.

+------------------------+         |
| admin                  |
| member                 |
| log                    |
| test1                  |
| test2                  | 
+------------------------+

Şimdi işin Php kısmına geçelim.

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SHOW TABLES FROM test" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $row = array(); while ( $row = mysql_fetch_row( $result ) ) { echo "Tablo ismi : ".$row[0]."
"; } } mysql_free_result( $result );

SHOW TABLES FROM test querysinin ardından, LIKE parametresi ekleyerek, sonucu daraltabiliriz. Ardından da sonuçları php ile parse ederek, aradığımız isimdeki tablonun olup olmadığını kontrol edebiliriz. (SHOW TABLES FROM test LIKE ‘%min%’ gibi)

İkinci yöntemimiz ise, mysql’deki information_schema databasei içerisindeki TABLES tablosundaki bilgiler. Bu tabloda TABLE_SCHEMA sütununda veritabanı isimleri TABLE_NAME sütununda ise tablo isimleri yer almaktadır.

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ‘{database ismi}’ AND table_name = ‘{tablo ismi}’ şeklinde çalıştıracağımız sorgudan gelen sonuç ile istediğimizi elde etmiş olacağız. Yapalım;

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='test' AND table_name='test1'" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $count = mysql_num_rows($result); if($count == 1){ // tablo var, gerekli işlemler } else { // tablo yok, gerekli işlemler } } mysql_free_result( $result );
]]>
http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/feed/ 2 2576
Konsoldan mysql versionunu ogrenmek http://www.dubluve.net/2012/12/06/konsoldan-mysql-versionunu-ogrenmek/ http://www.dubluve.net/2012/12/06/konsoldan-mysql-versionunu-ogrenmek/#comments Thu, 06 Dec 2012 12:48:27 +0000 http://dubluve.net/?p=2347 İşletim sisteminizin konsolunda

echo "SELECT VERSION()" | mysql -u root -p{sifre}

yazdığınızda ekranınızda kullandığınız mysql versiyonu gözükecektir.

]]>
http://www.dubluve.net/2012/12/06/konsoldan-mysql-versionunu-ogrenmek/feed/ 9 2347
mysql acik baglantilari ve processleri goruntuleme http://www.dubluve.net/2012/12/01/mysql-acik-baglantilari-ve-processleri-goruntuleme/ http://www.dubluve.net/2012/12/01/mysql-acik-baglantilari-ve-processleri-goruntuleme/#comments Sat, 01 Dec 2012 11:32:46 +0000 http://dubluve.net/?p=2327 mysql’e konsoldan bağlandıktan sonra show status like ‘Conn%’ komutunu çalıştırdığımızda açık olan bağlantıyı görüntüleyebiliriz.

mysql> show status like 'Conn%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| Connections     |  78     |
+-----------------------+---------+
1 row in set (0.00 sec)

Aynı şekilde eğer show status like ‘%onn%’ komutunu çalıştırdığımızda da bu sefer connection ile ilgili diğer alanların da sonuçları gelir karşımıza.

mysql> show status like '%onn%';
+-------------------------------------+----------+
| Variable_name                | Value |
+-------------------------------------+----------+
| Aborted_connects          |     1     |
| Connections                   |    78    |
| Max_used_connections   |     1    |
| Ssl_client_connects        |    0      |
| Ssl_connect_renegotiates |   0     |
| Ssl_finished_connects    |     0     |
| Threads_connected        |     1     |
+-------------------------------------+----------+
7 rows in set (0.00 sec)

Bunlara ek olarak bir de process list görüntüleyebiliriz, onu da şu komutla gerçeklememiz mümkün; show processlist

mysql> show processlist;
+----+------+--------------+-------+---------------+--------+--------+-------------------------+
| Id | User | Host      | db   | Command | Time | State  | Info                   |
+----+------+---------------+---------+------------+------+-----------+-------------------------+
| 77 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+----+------+---------------+---------+-------------+------+----------+-------------------------+
1 row in set (0.02 sec)

Mysql ile işlem yaparken bu son komutu çalıştırdığınızda, daha farklı sonuçlar alabileceğinizi deneyerek görebilirsiniz.

]]>
http://www.dubluve.net/2012/12/01/mysql-acik-baglantilari-ve-processleri-goruntuleme/feed/ 1 2327
Mysql baska tabloda kaydi olmayan kayitlari silmek http://www.dubluve.net/2012/11/13/mysql-baska-tabloda-kaydi-olmayan-kayitlari-silmek/ http://www.dubluve.net/2012/11/13/mysql-baska-tabloda-kaydi-olmayan-kayitlari-silmek/#comments Tue, 13 Nov 2012 20:57:20 +0000 http://dubluve.net/?p=2282 Veritabanınızdan zaman zaman aktif olmayan kişileri, hiç bir işe yaramayan verileri silmek istiyor olabilirsiniz. Bu noktada konuyu bir örnek ile açıklayacağım ;

Diyelim ki bir üyeler, bir de yorumlar tablomuz olsun. Yorumu olmayan üyeleri silmek isteyen bir query yazmak istiyoruz diyelim. Bu durumda aşağıdaki query ile bu işi yapabiliyoruz.
Subquery ile yorumları çekip bunları NOT EXIST ile denetliyoruz. Sonuç tam da istediğimiz gibi.

SELECT u.uye_id FROM `uyeler` u WHERE NOT EXISTS (SELECT yorum_id FROM yorumlar y WHERE y.uye_id = u.uye_id)

Çok fazla detaya girmeden anlattım, anlamayan olursa tabi ki detaylıca yardım edebilirim.

Umarım işinize yarayacaktır.

]]>
http://www.dubluve.net/2012/11/13/mysql-baska-tabloda-kaydi-olmayan-kayitlari-silmek/feed/ 8 2282
Mysql Tekrar Eden Verilerin Hepsini Listelemek http://www.dubluve.net/2012/11/07/mysql-tekrar-eden-verilerin-hepsini-listelemek/ http://www.dubluve.net/2012/11/07/mysql-tekrar-eden-verilerin-hepsini-listelemek/#comments Wed, 07 Nov 2012 08:29:20 +0000 http://dubluve.net/?p=2248 Tekrar eden (duplicate) verileri bulmak için bu yazımızı okuyabilirsiniz. Ancak bu verilerin hepsini bir şekilde düzenlemeniz gerekirse, sizden bunların listesi istenecektir.

Aşağıdaki Query ile, list tablosundaki aynı email kaydına sahip (aynı email’in en az 2 kişide olması durumu) customer_id leri ve emailleri , emaile göre sıralayarak listeyelen bir sorgu bulunmaktadır.

SELECT list.email, list.customer_id
FROM list
INNER JOIN (
  SELECT email
  FROM list
  GROUP BY email
  HAVING COUNT( customer_id ) >1
) duplicate ON list.email = duplicate.email
ORDER BY list.email ASC

Umarım işinize yarar.
]]>
http://www.dubluve.net/2012/11/07/mysql-tekrar-eden-verilerin-hepsini-listelemek/feed/ 2 2248
MySQL Tekrar Eden Verileri Bulmak http://www.dubluve.net/2012/11/06/mysql-tekrar-eden-verileri-bulmak/ http://www.dubluve.net/2012/11/06/mysql-tekrar-eden-verileri-bulmak/#comments Tue, 06 Nov 2012 13:04:46 +0000 http://dubluve.net/?p=2228 Merhaba,

Binlerce satır verinizin bulunduğu bir tabloda birbiri ile aynı olan satırları bulmanız gerekebilir. Bunun için aşağıya yazacağım SQL cümleciğini kendinize göre düzenleyerek çalıştırabilirsiniz.

SELECT column FROM table GROUP BY reference_column HAVING COUNT( * ) >1

column : buraya görüntülemek istediğiniz sutunları yazabilirsiniz veya tümü için * yazabilirsiniz.

table : işlem yapmak istediğiniz tabloyu yazınız

reference_column : aynı verilerin olup olmadığının kontrol edileceği sütun.

 

Umarım işinize yarar.

 

 

]]>
http://www.dubluve.net/2012/11/06/mysql-tekrar-eden-verileri-bulmak/feed/ 6 2228
percona server nedir http://www.dubluve.net/2012/10/25/percona-server-nedir/ http://www.dubluve.net/2012/10/25/percona-server-nedir/#comments Thu, 25 Oct 2012 19:24:11 +0000 http://dubluve.net/?p=1123 Percona, Mysql ve InnoDb performansında uzman

Perconaserver, Percona firması tarafından geliştirilen bir mysql uyarlamasıdır. Mysql’i daha performanslı hale getirip ölçeklendirilmesini ve monitör edilmesini de basitleştirir.
perconaserver ile, mysql kullanımınız hiç değişmez. Ancak bu kişiler innodb ve mysql konusunda gerçekten uzman kişiler. Açık kaynak olarak verdikleri bu ürün ile birlikte dilerseniz paralı destek ve hizmet alabiliyorsunuz. Tabi belirtmeliyim ki ben orta – büyük ölçekli bir işte kullanmama rağmen paralı destek almadan işlerimi yoluna koyabildim.
Sitelerinde de belirttikleri gibi, tüm yazılımları açık kaynak ve ücretsizdir.
Daha sonraki yazılarda, percona serverin kurulması vb konulara da değineceğim.
Şimdilik görüşmek üzere.
]]>
http://www.dubluve.net/2012/10/25/percona-server-nedir/feed/ 8 1123
mysql insert delayed http://www.dubluve.net/2012/08/23/mysql-insert-delayed/ http://www.dubluve.net/2012/08/23/mysql-insert-delayed/#comments Thu, 23 Aug 2012 07:47:58 +0000 http://dubluve.net/?p=1749 insert delayed komutu, bir tablo üzerinde aynı anda fazla işlem yaptığımız zaman işimize yarayabilir.

Yaptığı işlem, gelen insert sorgularını bir process olarak tutmak, ve en uygun olan zamanda tabloya insert etmek.
İlk olarak, insert delayed nedir ne değildir ondan bahsedelim.

insert delayed çalıştığı zaman, geriye sorgunun çalıştığına dair yanıt döndürür ama veriler eklenmek üzere bekletilir.

insert delayed komutu, insert komutundan daha yavaş çalışmaktadır. Sebebi, insert kullandığımız zaman direk tabloya etki etmemiz, insert delayed kullandığımızda ise bir süre bekletilmemizdir. O yüzden insert delayed komutunu sadece gerçekten ihtiyacımız varsa kullanmalıyız.

Birden fazla insert işleminde, insert delayed kullanıldığı zaman, bunlar tek bir işlem olarak tutulur ve birlikte insert edilir. Yani bir sürü insert sorgusunun çalışmasındansa sadece 1 kere insert işlemi yapılır.
insert delayed ile insert etmek istediğimiz verileri, veriler tabloya insert edilmeden önce select komutu kullandığımızda göremeyiz.

lock tables komutu kullanıldıktan sonra insert delayed komutu kullanıldığında hataya yol açar, sebebi ise, kilitlenmiş tabloya bir işlem yaptıramayışımız. Yani biz tabloyu kilitlersek, ona bir işlem ekleyemeyiz. insert delayed, tablo için ayrı bir processtir.

insert delayed komutu, yalnızca MyISAM, MEMORY ve ARCHIVE tablolarda çalışır.

insert …. select ve insert …. on duplicate key gibi sorgularda delayed iş görmez, yok sayılır. Sebebi ise, insert delayed sorgusunun hemen yanıt verip ama işlemi process olarak tutması.

Insert işlemi gerçekleşmeden last_inserd_id() kullanırsak hataya yol açar.

mysql’de show status komutunu çalıştırdığımızda aşağıda verdiğim parametreler insert delayed işlemi ile ilgilidir, gerekli durumlarda takip edilebilir.

Delayed_insert_threads : gelen INSERT DELAYED sayısı
Delayed_writes : INSERT DELAYED ile yazılmış satır sayısı
Not_flushed_delayed_rows : Yazılmak için bekletilen satır sayısı

Peki insert delayed komutu verileri tabloya ne zaman ekler?

Bu noktada önemli olan parametrelerden 2 tanesi delayed_insert_timeout ve delayed_insert_limit. insert delayed komutu çalıştırıldığı zaman, ilk olarak daha önceden bekletilen işlem olup olmadığına bakılır. Eğer varsa bu iki işlem birleştirilir. Ardından da bu iki parametreye bakılır. Eğer delayed_insert_limit sayısına ulaşılmışsa, veya delayed_insert_timeout vakti gelmişse, veriler veritabanına insert edilir 🙂 Diğer türlü de bu sorgular process olarak tutulmaya devam edilir.

Bu parametreleri de mysqld ile değiştirebiliriz nasıl olduklarına buradan ve buradan bakabilirsiniz.

Sorgunun kullanımı ise INSERT INTO ile aynıdır, DELAYED bu iki kelime arasına gelir; INSERT DELAYED INTO

 

Daha detaylı bilgi için buraya göz atabilirsiniz.

]]>
http://www.dubluve.net/2012/08/23/mysql-insert-delayed/feed/ 4 1749