[LinuxFocus-icon]
Ev  |  Erişimdüzeni  |  İçindekiler  |  Arama

Duyumlar | Belgelikler | Bağlantılar | LF Nedir
Bu makalenin farklı dillerde bulunduğu adresler: English  Castellano  ChineseGB  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  Arabic  

convert to palmConvert to GutenPalm
or to PalmDoc

Georges Tarbouriech
tarafından Georges Tarbouriech
<georges.t(at)linuxfocus.org>

Yazar hakkında:

Georges uzun zamandır Unix kullanıyor. Uzman ortamlarda ücretsiz yazılımların yayılmasına katkıda bulunan ürünleri seviyor. .



Türkçe'ye çeviri:
Ceyhun Elmas <ceyhun.elmas(at)linuxfocus.org>

İçerik:

 

MySQL ve Perl, uyumlu bir evlilik

MySQL and Perl

Özet:

MySQL ve Perl uzun zamandır benzer ortamlarda kullanılıyor. Moda her nekadar değişiyor olsa bile hanüz yaygın biçimde kullanılıyorlar. Bu yazı bu iki ürünün tek bir bütün olarak nasıl çalıştığını internet ya da intranet üzerine anlatıyor. Sağlanan örnekler Unix sistemler için yazıldı , ücretsiz ya da değil, diğer yaygın sistemlere uygulanabilir olsa bile.
Bu yazı nedir : bu çift ile neler yapılabileceğine dair bir küçük inceleme, kullanım kolaylıklarını, hız ve uyumluluk ve güvenlik taraflarını gösterme...
Bu yazı ne değildir : ne MySQL ne de Perl kaynağıdır. Ya da ne MySQL ne de Perl incelemesidir. .
Bundan dolayı, MaySQL ile Perl ortak çalışmasını göreceğiz, "bunu yapabilmenin pek çok yolunun var olduğunu " unutmadan ...



 

Peki bu güzel ortaklık nedir ?

MySQL bir İlişkisel Veritabanı Yönetim Sistemidir (RDBMS) ve http://www.mysql.com tarafından sağlanır. GNU GPL altında bir uyarlamadır, ne üzerine kullandığınızdan bağımsızdır. Lisans konularını MySQL'in görselyöresinden inceleyebilirsiniz. Sunucu ya da istemci olarak pek çok sisitemde çalışır. Bir kaç diğer RDBMS de ücretsiz olarak bulunuyor ve bu yazı için MySQL seçildiğinden beri herhangi bir kıyaslamaya girmiyoruz. Büyük "ticari" silahlarla da kıyaslamayacağız, Informix, Oracle, Sybase... MySQL'in Internet üzerinde en yaygın kullanılan DBM olduğunu söylemek yeterli olacaktır. Bu yazı için 3.23.36 (tekrar, isteğe göre) sürümünü kullanıyoruz. Bu yazı sırasında , var olan durağan sürüm 3.23.46 ve deneysel olanı ve uzun zamandır beklenen sürümü 4.0. Bunlar derlenmek üzere kaynak kod olarak ya da paket olarak indirilebilir.
MySQL'in Perl ile birleşiminde, bazı fazladan bileşenlere gereksinimniz var :Perl DBI modülleri. En azından , DBI'yı indirebilirsiniz, Msql-Mysql-modülleri, Data-Dumper ve Data-ShowTable.
Bunların yüklenmesinden çok kolay ve açık olduğu için bahsetmeyeceğiz ve bilmeniz gereken herşeyi paketler sağlıyor.
Perl Kolay Çıkarımlar ve Raporlama Dili için bir ortamdır. Başında, dokuman uyarlama için tasarlandı (parsing, extracting...) fakat kolaylıkla çok daha fazlasını yapar şekle geldi. Perl ile hemen hemen herşeyi yapabilirsiniz. Yönetsel işlemlerden gerçek uygulamalarla cgi betiklerine ve elbette veritabanı arayüzlerine kadar ...
Perl ücretsiz ya da değil pek çok (eğer tümünün değilse de) Unix dağıtımının bir parçasıdır. Var olan durağan sürümü 5.6.1 dir ve deneysel olanı 5.7.2 şu anda yazılıyor. Yazı için eski olanı iyi , 5.005_03. Burada makinanıza Perl yüklemek zorunda değilsiniz, ( bu nasıl mümkün olabilir ?)http://www.perl.com adresinden indirebilirsiniz. Perl herşeyi yapabilmeniz için tonlarca modül sağlar. Bunları görsel yörenin CPAN kısmından sağlayabilirisiniz : altınmadeni !
Son olarak , her iki araçla çalışmak için , sürpriz : bir görselyöre sunucusuna gereksiniminiz var ! Apache ücretsiz ya da değil pek çok Unix dağıtımının bir parçası olarak herzamanki gibi doğru seçenek olarak görünüyor . Burada buna sahip değilseniz , http://www.apache.org adresinden temin edebilirsiniz.

 

Kullanacağımız örnek

Büyük olasılıkla LinuxFocus'un çoklu dil desteği sağladığına dikkat etmişsinizdir. Bunun anlamı,editör olduğunuzda yeni yazıların ve çevirilerin durumunu yönetme gereği duyarsınız. Başka bir deyişle, kim neyi nezaman yapacak ... Bu anda , 5 dilde 200 makale sağlanıyor. Bu da 1000 makale eder (ne kadar zekiyim ?) ve hala artıyor. Bunlar arşivlenmeli , biçimlenmeli, özetlenmeli ... Bunları nasıl yönetmeyi düşünürüsünüz ? Elbette Perl ile ...
Baş editörümüz Guido Socher, çalışmalarımız kolaylaştıran pek çok Perl programı yazmıştır. Aynı zamanda 3 bölümlük Perl yazısı ve bir kitap incelemesi bulunmaktadır. Yazının sonundaki referans kısmına bakınız...
Javi, İspanya editörü, Perl ile çeviri durumlarını gösteren bir program yazmıştır.
Atif, yıldız yazarlarımızdan birisidir, Perl kırallığından gelmektedir, bu nedenle ana dili Perl'dir. Sonuçta , MySQL ile de birleşerek görsel yöre araçlarını geliştiriyor. Yazının sonundaki referans kısmına bakınız...
Tüm bunlar size eğer Perl cennetine bakmak isterseniz Linuxfocus'u okumanızı söylüyor.
Fransızca editörü olduğumdan beri ve epeyce tembel, kendi Linuxfocus veritabanımı oluşturdum, ne ile mi : MySQL ve Perl !

 

Veritabanı oluşturulması

Burada MySQL'in düzgün şekilde yüklendiğini varsayıyoruz, kullanıcılar oluşturulmuş ve şifreler verilmiş. Yükleme bu yazının konusu değil ve MySQL ile ilgili çok geniş bir kaynak bulunuyor ve size herşeyi söylüyor bu kaynaklar ...
MySQL sunucusuna mysql.server betiği ile başlayın, bunun çalışmasından beri safe_mysqld daemon ve ve siz bu daemon'a seçenekleri es geçebilirisiniz.
Sunucuya erişim :

mysql -h host -u user -p

Eğer sunucu yerel makinanızda koşuyorsa -h host kullanımına gereksiniminiz kalmaz.
Şifreyi girmenizin ardından sunucuya bağlanırsınız(ya da bağlanmalısınız !). Ve şimdi, veritabanınızı oluşturabilirsiniz.
mysql imlecinde,

CREATE DATABASE lf;

yazın . Bu bizim örneğimiz (lf LinuxFocus için kısaltmadır) ve burada kendi veritabanınıza dilediğiniz ismi verebilirisiniz. Sonra, sağlanan kullanıcılara bazı yetkiler verebilirisiniz, bunu doğru biçimde yaptığınız varsayıyoruz (yönetici olarak bağlanma hakkına sahipsiniz). Eğer kullanıcı olarak veritabanını yönetmek istiyorsanız bazı ayrıcalıklar verebilirisniz :

GRANT ALL ON lf.* TO username;

Veritabanını seçin ve şunu yazarak oluşturun :

USE lf

Gereksinimleriniz doğrultusunda tablonuzu oluşturun. Örneğimizde trissue isminde oluşturuyoruz. :

CREATE TABLE trissue (num INTEGER UNSIGNED, category VARCHAR(25), title VARCHAR(40), author VARCHAR(20), en VARCHAR(20), es VARCHAR(20), fr VARCHAR(20),de VARCHAR(20), nl VARCHAR(20), ru VARCHAR(20), tk VARCHAR(20), issue VARCHAR(20));

Kontrol edelim, böyle olmalı:

USE lf
SHOW TABLES;
DESCRIBE trissue;

Hepsi bu.
Ve şimdi, bazı verilere gereksinimimiz var.Boş tabloya veri yüklemek, en kolay yolu tab ile ayrılmış metin dosyası kullanmaktır. Metin hazır olduğunda, şunu yazın:

LOAD DATA LOCAL INFILE "maindb.txt" INTO TABLE trissue;

Eğer metin doğruysa tablo şimdi doludur. Kontrol etmek için :

SELECT * FROM trissue;

Bu uzun bir liste göstermeli.Şimdi, verinin istediğiniz herhangi bir biçimdeki listesini alabilirisiniz.
Şimdiye kadar, yalnızca MySQL kullandık ve herşeyi bununla yaptık.Peki Perl'ün rolü nerede ?

 

Perl işbaşında

Perl bize otomatik sıralamalarda yardım edecek, görsel yöre inceleyicisinde sonuçların görüntülenmesinde olduğu gibi ... Burada bir kez daha MySQL ve Perl birlikteliği için Perl modüllerinin doğru yüklendiğini varsayıyoruz.
Şimdi cgi betikleri gibi çalışacak olan Perl betikleri yazacağız. Bunlar bize Perl ve HTMl karışımı veritabanı listelerini ve görüntülemeleri sağlayacak.
Basit bir örnek betik kullanacağız, aynı yazar tarafından yazılmış tüm yazıları listeliyor. Yazı numaralarını, kategorileri , konuları çevirmenlerin isimlerini farklı diller için (yalnızca tam desteklenen dillerde), yayınlanmış sayıları listeleyeceğiz.
Bu betiği model olarak kullanabilirisiniz, fakat bu örneğin çok güvenli olmadığını dikkate alın. Daha gelişmiş sürümülerini =>here<= aderesinden indirebilirisiniz..

#!/usr/bin/perl -Tw
# First, we say this is a "Tainted" Perl script.
#
# This is a comment
# db consult
#
# We use the Perl DBI module
use DBI;

# As cgi :
use CGI qw(param());

print <<END_of_start;

Content-type: text/html

<html>
<title>LFAuthors main db</title>

<center><TABLE>
<TR VALIGN=TOP>
<TD><form action="/cgi-bin/lf.cgi" method="get">

# Here comes the button's title for the launching page
<input type="submit" value=" LFAuth ">
</form>
</TD>
</TR>
</TABLE>

Şimdi, betiğe veritabanını sıralamasını söylüyoruz.

<center><H2>Search by author</H2></center>

<form action=\"/cgi-bin/lf.cgi\" method=\"get\">Author name : <input
type=\"text\" size=\"30\" name=\"author\"><input type=\"submit\"
value=\"Search...\"></form></center>


END_of_start


if (param("author") ne '') {
$author = param("author");

$autsrch.='"';
$autsrch.=$author;
$autsrch.='"';

# We connect to the database named lf as user doe

$dbh = DBI->connect("DBI:mysql:lf","doe",'');

$sth = $dbh->prepare("
select *
from trissue
where
author = $autsrch
");

$sth->execute;

Şimdi betiğe görüntüleyeceği listeyi hazırlatıyoruz. Arama yapmasak da tüm veritabanının içeriğini görüntüleyecek, ya da isim soracağız ve uyumlu yazıları gösterecek. Eğer veritabanınızda binlerce kayıt varsa tüm dokümanı listelemenizi önermem !

print <<END_suite;

<center>
<TABLE BORDER=>
<tr bgcolor=#A1C4EE>
<th width=60 align=CENTER><font color=#000000> Num </font></th>
<th width=110 align=CENTER><font color=#000000> Category </font></th>
<th width=110 align=CENTER><font color=#000000> Title </font></th>
<th width=110 align=CENTER><font color=#000000> Author </font></th>
<th width=110 align=CENTER><font color=#000000> En </font></th>
<th width=110 align=CENTER><font color=#000000> Es </font></th>
<th width=110 align=CENTER><font color=#000000> Fr </font></th>
<th width=110 align=CENTER><font color=#000000> De </font></th>
<th width=110 align=CENTER><font color=#000000> Nl </font></th>
<th width=110 align=CENTER><font color=#000000> Ru </font></th>
<th width=110 align=CENTER><font color=#000000> Tk </font></th>
<th width=110 align=CENTER><font color=#000000> Issue </font></th>
</tr>

END_suite

while( ($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue) =$sth->fetchrow() ) {
print "<tr>";
print "<td width=60 bgcolor=#FFFFE8 align=center> $num</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $category</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $title</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $author</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $en</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $es</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $fr</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $de</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $nl</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $ru</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $tk</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $issue</td>";
print "</tr>";

}
print "</TABLE>";
print "<BR>";
print "<BR>";
print "<br>";


} else {

# DB Connect

$dbh = DBI->connect("DBI:mysql:lf","doe",'');


# Search

$sth = $dbh->prepare("
select *
from trissue
");

$sth->execute;


# Display result


print <<SUITE;

<center>
<TABLE BORDER=>
<tr bgcolor=#A1C4EE>
<th width=60 align=CENTER><font color=#000000> Num </font></th>
<th width=110 align=CENTER><font color=#000000> Category </font></th>
<th width=110 align=CENTER><font color=#000000> Title </font></th>
<th width=110 align=CENTER><font color=#000000> Author </font></th>
<th width=110 align=CENTER><font color=#000000> En </font></th>
<th width=110 align=CENTER><font color=#000000> Es </font></th>
<th width=110 align=CENTER><font color=#000000> Fr </font></th>
<th width=110 align=CENTER><font color=#000000> De </font></th>
<th width=110 align=CENTER><font color=#000000> Nl </font></th>
<th width=110 align=CENTER><font color=#000000> Ru </font></th>
<th width=110 align=CENTER><font color=#000000> Tk </font></th>
<th width=110 align=CENTER><font color=#000000> Issue </font></th>
</tr>

SUITE

while( ($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue) =$sth->fetchrow() ) {
print "<tr>";
print "<td width=60 bgcolor=#FFFFE8 align=center> $num</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $category</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $title</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $author</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $en</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $es</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $fr</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $de</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $nl</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $ru</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $tk</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $issue</td>";
print "</tr>";

}
print "</TABLE>";
print "<BR>";

}
print end_html;
$sth->finish;


# Disconnect

$dbh->disconnect;

exit;

Here is the query output in a web browser :

query


İşte bu !

 

Güvenlik tarafı

Açıkca, eğer internet üzerinde bir veritabanı servisi sağlamak isterseniz güvenliği en önemli konu olarak düşünmelisiniz. Elbette, adım adım güvenli görsel yöre ya da veritabanı sunucusu anlatmayacağız. Bununla birlikte temel konulara değineceğiz.
Kısaca, internet üzerinde bir servisiniz olduğunda , ilk şey görsel yöre sunucusunun güvenliğidir. Bu konu bu yazının ötesindedir. Bu konuyla ilgili daha geniş bilgi edinmek istrersenizthe Linux Documentation Project adresinden işe başlamalısınız.
Bir sonraki adım veritabanı sunucusudur. MySQL gibi bir araç yüklediğinizde manuallerin güvenlik kısımlarını okumayı unutmayın. En temel konu şifrelerdir : (özellikle root gibi) kullanıcıları şifresiz bırakmayın (makinanın root şifresinden farklı olmalı). Diğer önemli nokta ise yetkilerdir : herkese herşeyi vermeyin. Bu çok kolaydır ... ve bu nedenle pek çok insan bunu unutur !
Biraz daha ileri giderek, neden veritabanını chrooting yapmıyorsunuz ? Mark'ın yazısına bakın "Chrooting all services" bu sayıda . Farklı vertabanlarından bahsediyor fakat MySQL'i uygulayabilirken ne diyor ...
Diğer güvenlik konusu veri dolaşımdır. Bir tünelden verinin yollanıp alınması kötü bir fikir değildir. Daha fazla bilgi için Through the tunnel yazısına gözatabilirsiniz.
Son olarak , güvenlik programlama açkılardan birisidir. Perl büyük bir dildir, , ancak hatalarla dolu programlama yapmak oldukça kolaydır. Diğer LinuxFocus yazısı size ne yapmak istediğnizi öğretecek, özellikle Perl ile. Bakınız : . Güvenlik Programlama serisinin son yazısı ce özellikle cgi bettiklerini kapsıyor.Kesinlikle "okumalısınız" !
Elbette, bu varsayımlar bilinen açıklardır ve son yamalarla ve pek çok güvenlik programıyla NIDS gibi (Network Intrusion Detection System) snort gibi (from http://www.snort.org), firewall, port ve güvenlik tarayıcıları (nmap, nessus), gibi araçlarla azaltılabilir.
Eğer satın alabilecek gücünüz varsa, sağlana her servis için ayrı sunucular kullanabilirisniz : bir web sunucu, bir veritabanı sunucusu... ve yüksek erişilebilirlik için yansılama. Ve daha pek çoğu! Bununla bitmiyor, güvenlik sınırları zorlandığından beri. Yalnızca riski azaltmaya çalışıyorsunuz... ve her geçen gün bunu sağlamak daha zor oluyor , bizden uyarması ...

 

Başka ne ?

Burada birden fazla yol bulunmaktadır, kendi yolunuzu seçebilirsiniz. Pek çok RDBMS bulunuyor ve pek çok dil bunlarla iletişim kurabiliyor. Bu yazının arkasındaki fikir MySQL ve Perl'in birlikte ne kadar güzel çalıştıklarını göstermek.
Elbette seçim önemli bir konu: MySQL 'i seviyorum çünkü boyutu epeyce küçük, pek çok işletim sisteminde çalışıyor, hızlı, uyumlu ... MySQL'i oluşturak takıma çok şey borçluyum. MySQL team, katkıda bulunan sayısız kişiyi unutmadan. Ve en çok neyi seviyorum : tekerleği yeniden keşfetmediler . Bazı şeylerin basitliğini korudular.
Perl ile ilgili herkes şunu sorar : ne ekleyebilirim ? İnanınıyorum ki eğer ağ yöneticisi, geliştirici ya da her ne iseniz onsuz çalışlamazsınız. Perl herkese açık muteşem bir kaynak. Degisi var, ismi Perl Journal, SysAdmin dergisileri içinde yer alıyor, her iki sayıda Eğer kayıt olmak isterseniz : http://www.samag.com.
Büyük işlerden konuştuğumuzdan beri, burada pek çok konu geliyor. Bizim LinuxFocus okuyucularımız büyük olasılıkla dergiyle ilgili az sayıda insanın ilgilendiğinin farkında değil. Bununla birlikte, yazıları pek çok farklı dilde okuyabilirsiniz. Hiç dikkat ettiniz mi takımların bazıları neredyse durmaksızın çalışıyor, yalnızca bir kaç kişi mi bu büyük işi yapıyor ? Onlar görselyöre yöneticileri, çevirmenler ... Rus takımına, Türk takımına göz atın, Kirill ya da Erdal tarafından çevrilmiş pek çok yazı göreceksiniz. Gelişme aşamasındaki projelere göz atın Portekiz ya da Arapça gibi : aynı sonuç ! Bu büyük işi yapan herkesi tebrik ediyorum . Hepsine teşekkür ediyorum: özgür yazılım dünyası sizlere çok şey borçlu.
Konu dışına çıktığım için özür dilerim, fakat bunun söylenmesi gerektiğine inanıyorum.
Konuya dönelim,bir kaç sözcükle ücretsiz yazılım konusuyla bitirelim. MySQL ve Perl'deki insanlar çok fazla teşekkürü hakediyor.Büyük ölçüde ücretsiz muhteşem ürünler sağlıyorlar. Bununla birlikte bu araçlar en az ticari araçlar kadar iyi. Dokumanları güncellendi, her Unix sistemi için çok güzel kaynaklar bulunuyor. Bir benzerini bulabilir misiniz ? Korkarım hayır !
Bu yazı büyük olasılıkla çok fazla şey öğretmeyecek,bununla birlikte söylenenleri denerseniz , çok da kötü bir yazı olmayacak.
Muhteşem bir zaman yaşamıyor muyuz ?

 

Referenslar

Perl.org
cpan.org, the perl archive

Guido'nun Perl yazıları :

Perl I
Perl II
Perl III

Professional Perl Programming book review :

Perl Programming

Atif's contribution to MySQL.

LinuxFocus MySQL incelemesi : henüz eski yazı, güncellenmişi :

MySQL

Eski LinuxFocus SQL iki parça yazı :

SQL Part I
SQL Part II  

Bu yazı için görüş bildiriminde bulunabilirsiniz

Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
 talkback page 

Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Georges Tarbouriech, FDL
LinuxFocus.org

Burayı klikleyerek hataları rapor edebilir ya da yorumlarınızı LinuxFocus'a gönderebilirsiniz
Çeviri bilgisi:
en --> -- : Georges Tarbouriech <georges.t(at)linuxfocus.org>
en --> tr: Ceyhun Elmas <ceyhun.elmas(at)linuxfocus.org>

2002-01-15, generated by lfparser version 2.22