« Posts tagged mysql

Mysql replication duplicate entry hatası ve çözümü…

Mysql replication sisteminizde bir şekilde master sunucuda sorun oluduğunda slave sunucular veri aktarımını kaybedebilir. Böyle bir durumda sistemi tekrar ayağa kaldırdığınız zaman slave sunucular üzerinde “Duplicate Entry” hatası ile karşılaşabilirsiniz.

Bu hata slave sunucularda var olan bilgilerin tekrar yazılmak istemesi üzerine oluşur. İki yöntem ile bu sorunu aşabilirsiniz. Birincisi mysql’in belirttiğiniz hataları yok sayanmasını sağlayan slave-skip-errors komutunu kullanabilirsiniz.

Fakat sorunları es geçmektense sorunları düzelten bir yöntem daha var. Percona tarafından geliştirilen Maatkit duplicate entry sorunlarını çözüyor.  Maatkit kurulumu oldukça basit bir araç.

Maatkit’i sorun olan slave sunucularına kurduktan sonra şu komutu çalıştırıp arkanıza yaslanmanız yeterli:

Bash
mk-slave-restart --verbose

Verbose parametresi ile ekrana duplicate olan kayıtlar listelenecek. İşlem tamamlandıktan sonra replication sisteminizi eskisi gibi kullanmaya devam edebilirsiniz.

SQL Pie Chart

Boş vakitlerimde MySQL ile ilgili araştırma, belge okuma vs işleriyle uğraşıyorum son günlerde. Bugün MySQL resmi sitesinde başlayan yolculuğum code.openark.org sitesinde son buldu. Oldukça ilginç kod paylaşımları yapılmış olan bir sayfa. Anladığım kadarı ile genel olarak SQL üzerinde paylaşımlar var.

İlgimi çeken yazı ise SQL ile yapılmış olan ve yazımın başlığını oluşturan pie chart. Sanırım bir süre boyunca boş vakitlerimde bu kodu anlamaya çalışarak geçireceğim. Buyrun ilgili link:

http://code.openark.org/blog/mysql/sql-pie-chart

MySQL ve REGEX ifadeler…

Üzerinde çalıştığımız proje kapsamında bir alan içerisinde virgülle ayrılmış sayısal ifadeler tutuyoruz. Bu alan ilgili satırın kullanıldığı farklı içeriklerin id numaralarını tutmakta. Tabi yeri geldiğinde bunları tekrar parse etmek gerekiyor.

Özellikle bu id numaralarına göre çekeceğimiz verileri belirlemek için LIKE komutu pek işe yaramıyor çünkü LIKE hem istediğimiz sayıyı çekiyor hemde bu sayıyı içeren başka sayıları da çekebiliyor. Örneğin aradığımız sayı “1″ ise LIKE komutu ile içerisinde “1″ geçen tüm sayılar geliyor. Bu da bizim istediğimiz bir durum değil açıkçası.

Bu işi nasıl yaparız nasıl ederiz diye kafa yorarken bu işi PHP tarafında yapmaktansa MySQL tarafında yapmanın daha güzel olacağını düşünüp bunun yollarını araştırdım. Tabi ilk baktığım yer olan (ki genelde hep resmi belgelendirmelere bakarım) MySQL belgelendirme sayfaları oldu.

Bu noktada MySQL içerisinde regex ifadelerinin kullanılabildiğini ve bununla ilgili bir kaç örneğe (bayağı fazla örneklere) ulaştım. İşimizi görecek çok güzel bir yapı oluşturduk kendimize, buyrun komutumuz:

SQL
SELECT ids FROM mytable 
WHERE ids REGEXP '[[:<:]]aranan[[:>:]]';

Daha bir çok ilginç ifade mevcut. Sanırım zaman buldukça daha detaylı olarak inceleyeceğim.

MySQL Regex Sayfası: http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp

PHP 2: Linux sistemlerde Php

Bu yazımda, Linux dağıtımlarına Php ve ek araçların (sunucu,veri tabanı vb..) nasıl kurulacağını anlatacağım. Bu işlem genelde LAMP (Linux, Apache, MySQL ve PHP) olarak adlandırılır. Fakat ben mümkün olduğunca farklı dağıtımlar ve farklı yazılımların kurulum işlemlerini de anlatmaya çalışacağım. Bu yazımda sadece dağıtımlar üzerine kurulumlar ile ilgili bilgi vereceğim. Çeşitli ayarlar ile ilgili bilgileri özel olarak ileride anlatacağım. Ve bütün anlatımlarım sırasında elimden geldiği kadar farklı işletim sistemleri ve dağıtmlar ile ilgili örneklere değineceğim.

Pardus dağıtımına Php, Apache, MySQL ve PhpMyAdmin kurulumu:

Pardus dağıtımında LAMP kurmak oldukça basit bir işlemdir. Öncelikle:

sudo pisi it php apache mysql phpmyadmin mod_php

komutu ile sistemimize ilgili yazılımları kurmamız gerekiyor. “mod_php” paketi apache ile php yorumlayıcısının anlaşması için gerekli apache modül paketidir. PhpMyAdmin ise web tarayıcımız aracılığı ile MySQL tablolarımızı ve veri tabanlarımızı yönetmemizi sağlayan Php ile yazılmış bir uygulamadır. PhpMyAdmin yazılımını kurabilmeniz için öncelikle “katkı” deposunu eklemeniz gerekmektedir.

Bu işlemleri bitirdikten sonra sırasıyla:

sudo service apache start
sudo service mysql_server start

komutlarını vererek apache ve mysql sunucularını çalıştırmanız gerekiyor. Bilgisayarınız her açıldığında bu servislerin otomatik başlatmak istiyorsanız “start” komutu yerine “on” yazmanız yeterlidir.

Bu işlemlerden sonra

service

komutu vererek ilgili servislerin başladığını kontrol etmekte fayda var. Eğer iki serviste çalışıyor ise herşey yolunda gitmiş demektir. Artık tarayıcınıza “http://localhost” yazarak web sayfalarınızı görüntüleyebilirsiniz.

Artık Pardus sisteminiz hazır. Bu noktada bir takım dosyaların yollarını vermekte fayda var:

Php.ini: /etc/php/php.ini
Apache: /etc/apache2/http.conf
Mysql: /etc/mysql/mysql.conf
Web dizini: /var/www/htdocs/
Mysql veri tabanı dosyaları: /var/lib/mysql

Arch Linux üzerinde Php, Apache, MySQL ve PhpMyAdmin kurulumu:

Arch Linux, diğer linux dağıtımlarından biraz farklıdır. Fakat temel olarak sistem ne kadar farklı olursa olsun Php çalışma mantığı aynıdır. Arch Linux üzerinde LAMP ile ilgili kurulum bilgilerine Arch Linux Türkiye ekibi tarafından çevirisi yapılmış wiki bağlantısından ulaşabilirsiniz.

Ayrıca Lighttpd sunucusu ile ilgili bilgi ve ayarlar konusunda yine wiki belgesine, lighttpd için php ayarlarını yapmak içinse şu belge işe yarayabilir. Fakat lighttpd ile ilgili olan her iki belge de İngilizce olduğu için ben kısaca bahsetmek istiyorum:

Lighttpd kurmak için:
sudo pacman -S lighttpd
komutunu vermeniz yeterlidir. Lighttpd ayarlarını “/etc/lighttpd/lighttpd.conf” dosyasında tutar.

Servisi başlatmak için:

sudo /etc/rc.d/lighttpd start

Komutunu vermeniz gerekiyor. Ayrıca Arch Linux altında bir servisi açılışta başlatmak istiyorsanız “/etc/rc.conf” dosyasında bulunan ilgili satıra lighttpd yi eklemeniz gerekiyor:

DEAMONS=(... lighttpd ...)

Bu satıra benzer bir yapı olması gerekiyor.

Lighttpd sunucusuna php yi fastcgi olarak tanımlamak için:
sudo pacman -S fcgi
Komutu ile fastcgi paketini kurmanız gerekiyor. Bu işlemin ardından “/etc/lighttpd/lighttpd.conf” dosyasını yetkili kullanıcı olarak açıp içerisinde:

#"mod_access",
#"mod_fastcgi",
#"mod_accesslog"

Satırlarının başındaki “#” işaretini kaldırıyoruz. Ardından aynı dosya içerisine:

fastcgi.server = (
".php" =>
( "localhost" =>
(
"socket" => "/tmp/php-fastcgi.socket",
"bin-path" => "/usr/bin/php-cgi"
)
)
)

Satırlarını ekliyoruz. Bu işlemin ardından:
sudo /etc/rc.d/lighttpd restart
Komutunu vererek lighttpd sunucusunu baştan başlatmamız gerekiyor.

Ek bir not vermek istiyorum. Arch Linux üzerine php kurduğunuz zaman ön tanımlı olarak bütün ayarlar kapalı gelmekte. Bu nedenle “/etc/php/php.ini” dosyası içerisinde bulunan extension bölümündeki bir takım eklentileri aktif etmek için başlarındaki “;” işaretini kaldırmanız yeterlidir. Tabi bu işlemden sonra sunucumuzu yeniden başlatmamız gerekiyor.

Link: Bir zamanlar yazmış olduğum Arch Linux ile ilgili PHP kurulum yazısı.

Debian Üzerinde Kurulum (Efe Çiftçi)

Kaynak kod derlenerek kurulum ile ilgili bir yazı

PHP 1: Genel PHP tanımları..

Merhabalar,

Genel olarak uzun bir süredir php üzerinde çalışıyorum. Artık yavaş yavaş bilgilerimi paylaşmanın vakti geldi sanırım. İlk olarak Php ile uğraşırken genel olarak bilmemiz gereken tanımlardan bahsedeceğim.

Php sunucu taraflı (server side) diye tabir ettiğimiz bir betik dilidir. Sunucu taraflı tanımını biraz açmak gerekirsek, php ile yazdığımız kodlar bir sunucuda yorumlanır ve bu yorumlama sonucu oluşan HTML çıktılar bir tarayıcı aracılığı ile gösterilir. Kısaca php kodlarımız sunucu tarafında işlenir ve kullanıcı bilgisayarında sadece HTML çıktıları görür.

Bu yorumlama işlemi yapılırken iki adet bileşen kullanırılır. Bir tanesi PHP yorumlayıcısı, diğeri ise internet sunucusudur. Apache, IIS, Lighttpd gibi uygulamalar internet sunucularından bir kaçıdır. Ben genelde az bellek tükettiği için Lighttpd tercih ediyorum. İleriki konularda Linux ve Windows üzerinde php ve bir web sunucusu kurulumunun nasıl yapıldığını anlatacağım.

Bu çalışma mantığını biraz daha açalım. Php ile yazdığınız kodlar önce sunucuya(apache,iis vb..) gönderilir, sunucu php kodu olarak algıladığı kodları (<?php ?> arasında yer alan kodlar) php yorumlayıcısına göndererek yorumlamasını ister. Php yorumlayıcısının yorumlayıp HTML olarka ürettiği çıktı tekrar sunucu aracılığı ile tarayıcıya iletilir. Aşağıda bu durmun resimli gösterimini görebilirsiniz.

php1

Php çalışma Prensibi

Sunucu taraflı dillerin hepsi bu yapıya benzer bir prensip dahilinde çalışırlar. Buda aslında çalıştırılan her kodun sunucu bilgisayar üzerinde sistem kaynağı tüketmesine sebep olur. Bu yüzden yapacağımız uygulamaların bazı kısımlarında JavaScript gibi tarayıcı tarafından yorumlana bilen betikler kullanılır. Örneğin bir üyelik formunda ki alanları kontrol ettirirken php kullanmak sunucuyu çok yoracağından bu işlem ufak bir JavaScript kodu ile kullanıcı bilgisayarına yaptırılabilir.

Php bir çok özelliğe sahip bir dildir. Genel olarak php ile ilgili ayarlar php.ini dosyasında bulunmaktadır. Php.ini ile ilgili ayrıntıları ilgili konular geldiğinde parça parça anlatacağım.

Gelelim veri tabanı konusuna. Aslında veri tabanı konusu çok karmaşık değil. Şuan sadece yukarıda bahsettiğimiz sistem içerisine bir de veri tabanı sunucusu ekleyeceğiz. Bu cümleden çıkartılabileceği üzere veri tabanı bir sunucu olarak çalışır. Fakat bunun yanında, SQlite gibi bir dosya üzerinden sunucu olmadan çalışabilen veri tabanı sistemleri de mevcuttur.

Veri tabanlarını projelerimizde ürettiğimiz verileri tutmak için kullanırız. Veri tabanlarının yaptığı iş basit olarak veri kaydetmek, kaydedilmiş verileri istediğimiz kriterlere göre geri çağırmaktan ibarettir (tabi ki gelişmiş özellikleri de vardır). Veri tabanlarının kendilerine özgü sorgu dilleri mevcuttur ve en yaygın olarak kullanılan sorgu dili SQL dilidir. MySQL, MsSQL, SQLite gibi sistemler SQL dilini kullanırlar.

Genel olarak tüm programlama dilleri, veri tabanı sunucuları ile aynı mantıkta iletişim kurarlar. Php yorumlayıcısı sorguyu veri tabanı sunucusuna gönderir, veri tabanı sunucusu sorgu sonucununda döndürdüğü bilgiyi php yorumlayıcısına gönderir. Php yorumlayıcısı veri tabanı sunucusundan bilgiyi aldıktan sonra bu bilgiyi yine HTML çıktı olarak sunucuya gönderir ve tarayıcıda görüntülenmesi sağlanır. Bu noktada küçük bir bilgi vermek istiyorum. Php dilini komut satırı arayüzü (CLI-Command Line Interface-) arcılığı ile kullanabilirsiniz. CLI ortamında yazdığınız kodlar için bir web sunucusuna ihtiyaç duymayız. Fakat php genel olarak web programlama alanında kullanıldığı için ben de web programlamayı temel alarak anlatmaya çalışacağım.

Yukarıda bulunan grafiğe bir veri tabanı-php ilişkisi eklenmiş hali. Grafik ile çok daha net anlaşılacağını düşünüyorum.

php-vt

Php - Veri Tabanı İlişkisi

Gelecek yazılar:
Php 2: Linux sistemler altında Php, Apache, MySQL ve PhpMyAdmin kurulumu
Php 3: Windows Xp sistemine Php, Apache, MySQL ve PhpMyAdmin kurulumu

Netbeans & MySQL

Bir kaç günden beri Netbeans ile MySQL veri tabanına bağlanmaya çalışıyor ve başarısız oluyordum. Bu sorunu pek ilgisi olmasada Pardus-kullanicilari listesine sormuştum. Ve sayın Metin Bilgin yapmam gereken bir ayar hakkında bilgi verdi ve sorunum çözüldü. Bu konuda sıkıntı yaşayan başka arkadaşlar olur diye yapılması gereken ayar değişikliğini vermek istiyorum:

/etc/mysql/my.cnf dosyasının içinde  skip-networking satırının başına # koyulması gerekiyor.
Bu işlemi yaptığınızda sorununuz çözülmüş oluyor.

Mysql verilerini PostgreSQL’e aktarma

Son zamanlarda PostgreSQL oldukça ilgimi çekmeye başladı. Özellikle Netbeans ile yaşadığım MySQL sorunlarından sonra sanırım biraz tembelliğin yarattığı zorunluluk nedeni ile birazda PostgreSQL’in gizemli dünyasının çekiciliği ile PostgreSQL üzerine çalışmaya karar verdim. Gerçi tembellik yapıp PostgreSQL’e geçtim ama esas çalışma burada başlıyor. Neyse hemen pisi depolarından PostgreSQL’e ait ihtiyaç duyacağım paketleri kurdum. Geldi sıra MySQL verilerini PostgreSQL’e aktarmaya. Google sağolsun bu konuda oldukça güzel sonuçlar çıkardı.

Sayın Kutay Demirtas‘ın blogunda Mysql tablolarını ve girdilerini Postgresql e aktarmak başlığı ile yapmış olduğu girdiye ulaştım. Oldukça yararlı oldu. Gerçi blog yazısında tablolarında aktarıldığını belirtmiş Kutay bey, fakat yapmış olduğum denemede sadece verileri çıkarttığını gördüm. Kutay beyin blogunda anlattığı komutu değiştirmeden çalıştırdım fakat tablolar çıkmadı. Neyse tablo yapılarını elle hazırlamak zor değildi. Önemli olan yüzlerce girdiyi aktarabilmekti bunuda başardım.

Ekip yol haritası.

Bu gün itibari ile Ekip sürüm 1, IG Group sunucularında koşmaya başladı. Yapılan son denemeler ve düzenlemelerin ardından, işleyiş olarak tüm eksiklikler giderilmiş oldu. Tabi geliştirmelere tüm hızımızla devam edeceğiz. Yatmadan önce birazcık daha çalışıp, Ekip projesi eksikliklerini ve olması gereken işlevleri bir kağıda döktüm. Ve bu bilgiler doğrultusunda tarihsel olmasada sürüm olarak bir yol haritası oluşturdum. Bu proje benim aynı zamanda staj ödevim olarakta olduğu için ayır bir önemi var benim için. Sanırım bu yüzden üzerine bu kadar çok düşüyorum. Gerçi staj ödevi olarak verdiğim hali ile şuan ki hali arasında dağlar kadar fark var. Neyse çok uzatmadan proje ile ilgili planlarımdan bahsedeyim biraz.

Ekip projesi, basit anlamda bir stok takip sistemi olarak görünebilir. Fakat stok takipten çok daha fazlasını gerektiren bir çalışma. Temel olarak çeştili iletişim santrallerinde kullanılan kartlara ilişkin işlem bilgilerini tutan bir uygulama. Karşılıklı kart borçları, laboratuvar durumları, yurt dışı arıza durmları gibi bir çok işlemi gerçekleştirdiğiniz uygulama büyük bir iş yükünü ortadan kaldırmayı amaçlıyor. Åžuan için genel anlamda gereken herşeyi yapıyor fakat tabiki eksiklikler ve olması gereken bir çok şey var.

Sürüm 1.5 ile çeşitli çıktıların renklendirilmesi, yapının daha modüler bir hal alması, depolara daha fazla işlevsellik katılması gibi ufak eklenti ve değişiklikler olacak. Bir nevi sürüm 2 için ön hazırlıkta diyebiliriz. Tabi buda şu anlama geliyor 1.5 yakın zamanda çalışmaya başlayacak.

Sürüm 2 ile birlikte bir çok yenilik olacak. Öncelikle mevcut ara yüz tamamı ile yeniden tasarlanacak. Ekranın daha etkin kullanımı sağlanacak. Son yapılan denemelerde bilgi girildikçe uzayan sayfalar oldukça can sıkıcı bir görüntüye sahip oluyor. Bunun ardından şuanda ekrana yansımayan istatistikler ana ekranda gözükecek. Åžirket deposunda kaç adet kart var, sahalarda kaç adet kart var gibisinden sayısal bilgi amaçlı ekranlar olacak. Ayrıca şuan tutulmayan, kullanıcı kayıtları tutulacak. Böylece hangi kullanıcının hangi işlemi yaptığı görülebilecek. Raporlar hesap tablosu olarak bilgisayara kaydedilebilecek. Åžuan için sadece tarayıcı aracılığı ile çıktı alınması sağlanıyor. Alarm seviyeleri gibi ince ayarların yapılması mümkün olacak (bu çok gerekli bir işlev değil fakat olmasında yarar var:)). En önemli değişiklikler ise, Yedekleme ve Güncelleme sistemlerinin dahil edilmesi olacak. Åžuan yedeklemeler cron işlemi ile yapılmakta. Güncellemeleri ise her dosyanın md5 toplamlarının karşılaştırılması ile gerçekleşecek(şuan için üzerinde çalıştığım düşünce bu). Åžuan ki sistemde aşırı derecede include edilmiş sayfalar çalışmakta. Zaman içerisinde bunların ne kadar can sıkıcı olduğunu gördüm. Sürüm 2 de ise sık kullanılan işlevler fonksiyon olarak bir dosyada tanımlanacak ve sadece o dosya include edilip fonksiyonların çağrılması sağlanacak. Bu şekilde daha modüler bir yapı oluşturabileceğimi düşünüyorum. Genel olarak sürüm 2 için planlarım bunlar.

Bunların dışında sürüm 2 çalışmaya başladıktan sonra ufak tefek güncellemeler yapmayı planlıyorum. İlk etapta raporların hem hesap tablosu hem de PDF olarak alınmasını sağlamaya çalışacağım. Ayrıca bu raporların sunucu tarafında tutulmasını isteğe bağlı olarak yapacak ve böylece eski raporlara erişimin sağlanmasını kolaylaştıracağım. Tabi birde yardım sayfalarını artık hazırlamam gerekecek sanırım:). Åžuan yarı otomatik olarak çalışan borç sistemini tam anlamıyla otomatikleştirmek için çabalayacağım, umarım başarılı olabilirim. Ve bunun gibi bir çok iyileştirme çalışmaları yapılacak. Bu süre zarfında çalışan Ekip uygulamasınında eksikliklerini görüp o eksikliklere uygun güncellemelerde olacaktır tabi.

Ama esas beni heyecanlandıran sürüm 3 olacak. Çünkü sürüm 3 ile birlikte artık PHP yerine Python kullanmayı, bir kurucu tasarlamayı ve django çatısı kullanmayı planlıyorum. Tabi tek değişiklik programlama dilinde olmayacak. Veri tabanı desteği arasına PostgreSQL’i de eklemeyi düşünüyorum. Tabi sürüm 3ün Python ile hazırlayacağım kurucu vasıtasıyla kurulması söz konusu olacak. Kurulum esnasında kullanıcıya kullanmak istediği veri tabanı sunucusu tercihi yapılacak. Birde kullanmak istediği alt yapı. Yani kurulum ile birlikte, kullanıcı PHP, Python veya her ikisiyle birlikte çalışabilecek şekilde kurulum yapabilecek.

Tabi bunların hepsini Pardus kullanarak yapacağım. Özgür yazılım felsefesine uygun bir geliştirme yapmaya çalışacağım. Sanırım Ekip uygulamasını daha elle tutulur bir hale getirinde bir özgür yazılım olma yolunda en büyük adımı atmış olacak.

Åžimdi bu kadar yazdım da hayaller ne kadar güzel diye bir düşünce belirdi kafamda. Gelecek ile ilgili planlarımın biraz zorlayıcı ve yorucu olduğunun farkındayım. Fakat ter akıtmadan başarı olur mu? Orası ayrı bir soru işareti. Çalışarak ve sabrederek herşeyin olabileceğine inanarak yazımı bitirmek istiyorum. Bu kadar uzun bir yazıyı sabredip okuyan herkese teşekkür ederim:)

Bir göçte sunucularımızda yaşandı…

İki gün önce abimin de bilgisayarında Pardus kullanmaya başlaması ile tüm kullandığımız sistemler Pardus’a geçmiş oldu. Tek eksiğimiz sunucularımızın Windows sistem olmasıydı. Neyse zamanında yaptığımız hatadan dönme vakti geldiğine geçte olsa karar verip sunucularımızı Centos’a göç ettirdik.

»Read More

Özgür Kuru is Stephen Fry proof thanks to caching by WP Super Cache