MySQL ve Perl, uyumlu bir evlilik

ArticleCategory:

Applications

AuthorImage:

Georges Tarbouriech

TranslationInfo:[Author and translation history]

original in en Georges Tarbouriech 

en to tr Ceyhun Elmas 

AboutTheAuthor

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

Abstract:

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 ...

ArticleIllustration:

MySQL and Perl

ArticleBody:[The article body]

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