Büyük bir veri tabanının karakter setlerini değiştirmeniz gerekebilir. Bende böyle bir ihtiyaç için küçük bir php script yazdım.
Lazım olabilecekler için script indirebilir.
Daha iyi bir yöntem biliyor iseniz dürtmekten çekinmeyiniz…
Büyük bir veri tabanının karakter setlerini değiştirmeniz gerekebilir. Bende böyle bir ihtiyaç için küçük bir php script yazdım.
Lazım olabilecekler için script indirebilir.
Daha iyi bir yöntem biliyor iseniz dürtmekten çekinmeyiniz…
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:
Ü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:
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
Küçük bir yazılım üzerinde uğraşıyordum bu aralar. Adı “Adresci” olan bu yazılım, MySQL sunucumuza istediğiniz adresleri kaydediyor. Sonra başka birgün bakmak isterseniz listeliyor, adresler arasından arama yapabiliyor. Kısacası basit bir yazılım fakat veritabanına başlayacaklar için (benim için) kendinize yararı olabilir. Peki Python ile basitçe nasıl bir MySQL sunucusuna bağlanırız?
Öncelikle bize
mysql-python – Python için MySQL modülü
adlı paket gerekiyor. Paket yönetinicisinden ya da “sudo pisi it mysql-python” ile kurabilirsiniz. Sonra “mysqldeneme.py” adlı bir dosya oluşturalım. Ve dosyamıza şunları yazalım.
import MySQLdb
baglan = MySQLdb.connect (host = “localhost”, user = “kullaniciadi”, passwd = “sifre”, db = “veritabaniadi”)
cursor = baglan.cursor ()
cursor.execute(“SELECT VERSION()”)
print cursor.fetchone ()
cursor.close()
Bu kısa deneme ile MySQL sunucunuzun versiyonu hakkında bilgi alabilirsiniz. Ayrıca “SELECT * FROM tablo” gibi komutları “execute” metodunu kullanabilir, cursor.fetchone ya da cursor.fetchall kullanıp çıktıları alabilirsiniz. Kodları tek tek açıklarsak:
import MySQLdb
Python ile MySQL sunucusunun arasında iletişimi kurmasına yardımcı olacak “MySQLdb” adlı modülü programda kullanılabilir ettik.
baglan = MySQLdb.connect (host = “localhost”, user = “kullaniciadi”, passwd = “sifre”, db = “veritabaniadi”)
“baglan” ile sunucuya baglanacağımız bilgileri belirttik. Ve sunucuya bağlandık.
cursor = baglan.cursor()
“cursor” objesi ile bağlantının metodunu kullanabilir yaptık.
cursor.execute(“SELECT VERSION()”)
Sunucuya bir komut gönderdik.
print cursor.fetchone
Komuttun geri çıktısını çıkardık.
cursor.close()
Bağlantımızı kapattık.
Bu metni uygulamadan önce lütfen MySQL komutlarını bir öğrenin. İşin derinliğini görmeden Python ile işe hemen atlamayın derim.
İyi Pythonlamalar!
Benzer yazılar:
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ı.
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.
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.
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
Uzun süredir kişisel dosyalarımı sistemden ayırmak istiyordum. Böylece yeni kurulum yaparken belgelerimi sürekli kopyalamak gerekliliğinden kurtulacaktım. Aslında bu işlem için kurulumda bir bölümü “home” alanına bağlayarak çözmek kolay. Fakat zamanında yaptığım yanlış bölümlendirmeden dolayı bu işlemi ancak bu gün yaptığım 2008.2 taze kurulumla yapabildim.
Kullanıcı dosyaları ile ilgili bu kısım herkes tarafından bilinen ve kolayca yapılan işlem. Fakat benim esas sıkıntıyı önbellekte tuttuğum pisi paketleri ve mysql veri tabanlarım ile yaşıyordum. İlgili ayar dosyaları değişiklikleri ile bu sıkıntımıda çözdüm. Artık mysql veri tabanlarım ile pisi paketlerim “/home/” altında ki kullanıcı klasörlerimin içerisinde depolanıyor.
Önce pisi paketleri için gerekli ayarları yapmakla başladım.
“/etc/pisi” altında bulunan pisi.conf dosyasında ilgili ayarlar bulunmakta. Aşağıda bu dosyanın ilgili bölümü yer almakta açıklamalarla birlikte.
[directories]
archives_dir = /home/ARTe/sistem/pisi/archives => Arşiv dizini
cached_packages_dir = /home/ARTe/sistem/pisi/packages => Önbellek dizini
compiled_packages_dir = /home/ARTe/sistem/pisi/packages => Derlenmiş paket dizini
debug_packages_dir = /home/ARTe/sistem/pisi/packages => Debug paketleri dizini
history_dir = /home/ARTe/sistem/pisi/lib/history => Geçmiş bilgilerinin tutulduğu dizin
index_dir = /home/ARTe/sistem/pisi/lib/index => Depo indexleri bilgilerinin tutulduğu dizin
info_dir = /home/ARTe/sistem/pisi/lib/info => Depolara ait bilgilerin tutulduğu dizin
kde_dir = /usr/kde/3.5
lib_dir = /var/lib/pisi
lock_dir = /var/lock/subsys
log_dir = /var/log
packages_dir = /var/lib/pisi/package
qt_dir = /usr/qt/3
tmp_dir = /home/ARTe/sistem/pisi => Temp dizini
Yukarıda değişiklik yaptığım alanlar ile ilgili açıklamaları yazdım. Siz de ilgili alanları kendinize göre düzenlemeniz halinde pisi paketleri ve depo bilgileri istediğiniz dizinde saklanmış olacaktır.
Bu noktada bir uyarı yapmakta yarar var eğer depo bilgilerinide ayrı bir yerde tutacaksanız “/var/lib/pisi” adresi altındaki tüm dosyaları ilgili dizine kopyalamanız gerekiyor. Böylece ekli olan depolar otomatik olarak yeni klasörde gözükecektir.
Gelelim MySQL veri tabanlarının istediğimiz dizinde saklanması olayına. Aslında bu olay pisi paketlerinden çok daha basit bir işlem yaparak gerçekleştiriliyor.
“etc/mysql/” klasörü altında bulunan “my.cnf” dosyasında ki
datadir = /home/ARTe/sistem/mysql
satırında gerekli değişikliği yapıp, “/var/lib/mysql” içindeki tüm dosyaları yeni dizinimize kopyalıyoruz. Bu işlemlerin ardından mysql sunucusunu yeniden başlatmak gerekiriyor.
Artık mysql veritabanlarımız ve pisinin önbellekte tuttuğu paketler istediğimiz klasörlerde depolanıyor…
Böylece artık yeni kurulum yapmam gerektiğinde tüm bu bilgilerimi tekrar tekrar yedeklemek zorunda kalmayacağım..
Pardus 2007.3′e kurduğum Eclipse yazılım geliştirme programında java dili kullanarak MySQL’e bağlanmaya çalışıyordum bir süredir (1-2 gündür). Ama bir türlü bağlanamadım. Bağlanmaya çalıştığımda şu hatayı alıyordum;
Last packet sent to the server 0 ms ago
Sonunda çözümü buldum… Problem mysql’in ilk kurulumuyla gelen ayarların dışarıdan erişime izin vermemesiymiş.. Düzeltmemiz gereken dosya /etc/mysql/my.ini dosyası.. Pardusta düzeltmeyi şu şekilde yapabiliyoruz;
Önce ALT+F2 ile çalıştır’ı açalım..
yazıp root şifremizi girelim. daha sonra açılan dosyadaki
skip-networking
satırını bulun ve o satırın başına # ekleyin ve o satırı yorum satırı yapın. Yani o satır şöyle olsun,
# skip-networking
dosyayı kaydedip kapatın. daha sonra konsol açıp şunu yazarak mysql-serverı yeniden başlatın.
Artık Pardus linuxta Eclipse kullanarak MySQL’e bağlanabiliyoruz…
Bu arada bu çözümü uzun araştırmalar sonucu buradan buldum..