Mysql de bir database'in yedeklenmesi
Bu yazıda MySql database'nizin içindeki table ve dataları MySql ile birlikte gelen uygulamalardan mysqldump ile nasıl yedekleyebileceğiniz anlatılacaktır.
2.Detaylar
MySql günümüzde çoğu yerde kullanılan bir database haline geldi. Hatta windows ortamında bile kullanımı yaygınlaşıyor. Performansı ve dağıtım ilkesi (free) elbette buna en büyük sebep. Eğer hala kullanmadıysanız [url=http://www.mysql.com/]http://www.mysql.com/[/url] işletim sisteminize uygun olan sürümünü (birde release olursa daha iyi olur) indirip kurabilirsiniz. Ve bu durumda sanırım bu yazı size göre değil, ama haberdar olmak açısından okumaya devam edebilrsiniz.
Bir database'iniz olduğunu ve içinde çok sayıda table'ın ve datalarının bulunduğunu hatta dataların neredeyse hergün yenilendiğini düşünün. Birde bir gün kazaara yada başka bir şekilde bu database'inize bişeyler olduğunu düşünün ! Başınıza ne işler açılabileceğinizi sanırım kestirebildiniz. Zaten bu yazıyı ikinci kısmı yaşamamanız için yazıyorum.
MySql'inizin kurulduğu sistemde, onu kurduğunuz yerde; standart kurduysanız /usr/local/bin altında, yada kendi istediğiniz herhangi bir yere kurduysanız ../istediginiz_yer/bin altında mysqldump adlı bir komut bulunmaktadır. Kesin vardır eğer başına bir iş gelmediyse...
Sizinde herhangi bir amaçla kullandığınız bir database'niz var ve bir sürü table'ı ve data'ları var heran yeni datalar gelebiliyor, gelin başınıza gereksiz işler açmamak için bunları yedekleyelim. Ne demiş atalarımız "Sakla samanı gelir zamanı."; gerçi biz samanın yedeğini alıyoruz ama olsun, o zamanlar yedek alma derdi yoktu sanırım. Evet şimdi samanımız şöyle olsun:
Database İsmi, asdf_db olsun ve içinde bilmem_ne table'ı, table'inda id, metin, dev, reg1, reg2 ve ht field'ları olsun. Ve bunlara inanılmaz data geliyor vaybee ne iş.
Önce bir görelem bakalım database'miz nasıl görünyor.
Databse kullanıcı isim ve şifremiz; admin74, 4353234 .
[root!tty2] -> [~] # mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 278 to server version: 3.22.32
Type 'help' for help.
mysql>use asdf_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------------+
| Tables in asdf_db |
+----------------------+
| bilmem_ne |
| bilmem_ne 1 |
| bilmem_ne2 |
| bilmem_ne3 |
| bilmem_ne4 |
+---------------------+
6 rows in set (0.01 sec)
mysql> select * from bilmem_ne;
+----------+------------------+-------+---------+-------+------+
| id | metin | dev | reg1 | reg2 | ht |
+----------+------------------+-------+---------+-------+------+
| 1 | llull;jj;dheyhd | dev5 | 324_3 | 45_3 | 55 |
| 2 | dlasdl;jj;dasdd | dev3 | 214_3 | 75_3 | 54 |
+----------+------------------+-------+---------+-------+------+
1 row in set (0.02 sec)
mysql>
Gerçekten çok data varmış ! Şimdi yedek alalım bakalım.
Komut satırında :
[root!tty2] -> [~] # mysqldump �uadmin74 �p4353234 asdf_db > asdf_db.sql
[root!tty2] -> [~] #
veya
[root!tty2] -> [~] # mysqldump �user=admin74 �-p=4353234 asdf_db > asdf_db.sql
[root!tty2] -> [~] #
evet yedek aldık. şimdi bakalım sql dosyasını içine
[root!tty2] -> [~] # more asdf_db.sql
# MySQL dump 7.1
#
# Host: localhost Database: asdf_db
#--------------------------------------------------------
# Server version 3.22.32
#
# Table structure for table 'bilmem_ne'
#
CREATE TABLE bilmem_ne (
id int(11) NOT NULL auto_increment, ,
metin varchar(250),
dev varchar(20),
reg1 varchar(40) NOT NULL,
reg2 varchar(40) NOT NULL,
ht char(2) NOT NULL,
PRIMARY KEY (id),
UNIQUE fname (id),
KEY id_2 (ht)
);
#
# Dumping data for table 'forums'
#
INSERT INTO bilmem_ne VALUES ('1',' llull;jj;dheyhd','dev5','324_3','45_3','55');
INSERT INTO bilmem_ne VALUES ('2',' dlasdl;jj;dasdd','dev3','214_3','75_3','54');
Sanırım oldu bu iş.
Birde mysqldump'ın --opt opsiyonu var onu kullanmakta fayda var zira kendisi dump işlemlerinde çıkacak sorunlar için tedbir alınması anlamına geliyor bir miktar, --opt'yi aşağıdaki opsiyonların birleşimi gibide düşünebiliriz.
--quick --add-drop-table --add-locks --extended-insert --lock-tables
[root!tty2] -> [~] # mysqldump �uadmin74 �p4353234 --opt asdf_db > asdf_db.sql
[root!tty2] -> [~] #
[root!tty2] -> [~] # more asdf_db.sql
# MySQL dump 7.1
*
*
# Table structure for table 'bilmem_ne'
DROP TABLE IF EXISTS bilmem_ne;
CREATE TABLE bilmem_ne (
*
*
# Dumping data for table 'forums'
LOCK TABLES bilmem_ne WRITES;
INSERT INTO bilmem_ne VALUES ('1',' llull;jj;dheyhd','dev5','324_3','45_3','55');
*
LOCK TABLES;
gördüğünüz gib "DROP TABLE IF EXISTS bilmem_ne;" ve "LOCK TABLES bilmem_ne WRITES;", "LOCK TABLES;" sql deyimleri sql dosyamıza eklendi.
Eveeet yedeklemeyi hallettik tabi bununla sınırlı değil mysqldump --help derseniz oda aynı şeyi söyleyecektir.Mesela bir kaç örnek :
Birden fazla database'i sql dosyamıza gömelim, tabi bu database'lere erişim haklarımızın olduğu varsayılıyor. Bu opsiyon MySQL dump 7.1 de yok haberiniz olsun. Lütfen daha yenileri...
[root!tty2] -> [~] # mysqldump --no-data database1 databsa2 > tum_database.sql
Tüm database'leri almak için ise (Bu opsiyon da MySQL dump 7.1 yok)
[root!tty2] -> [~] # mysqldump �uadmin74 �p4353234 --all-databases > asdf_db-bilmem_n.sql
Sadece istedigimiz table yada table' lerı alalım. table'ları databse isminden sonra yazmalısınız !
[root!tty2] -> [~] # mysqldump �uadmin74 �p4353234 --opt asdf_db bilmem_ne > asdf_db-bilmem_n.sql
Bu datalar çok fazla olabilir, bu yüzden sıkıştırarak yedekleyebilirsiniz. (açarken gunzip file)
[root!tty2] -> [~] # mysqldump �uadmin74 �p4353234 --opt asdf_db | gzip > asdf_db.sql.gz
örnekler arttırılabilir...
Mysqldump'ın geniş anlatımı [url=http://www.mysql.com/doc/m/y/mysqldump.html]http://www.mysql.com/doc/m/y/mysqldump.html[/url].
Tabi birde yedeleklediğimiz bu sql deyimlerini mysql de bulunan database'imize gerektiği zaman yüklememiz lazım bunun için;
[root!tty2] -> [~] # mysql �u admin74 �p asdf_db < asdf_db.sql
Enter Password:
[root!tty2] -> [~] #
yada
[root!tty2] -> [~] # mysql �u admin74 �p -e "source asdf_db.sql" asdf_db
Enter Password:
[root!tty2] -> [~] #
yedeklediğimiz dataları da yerlerine yerleştirdik. Artık içimiz rahat olabilir, tabi dahada güvende olabilmek için yedeklerinde yedeğini almakta fayda var, dahada da güvende olabilmek için yedeklerinde yedeğinin yedeğini alabilirsiniz. Daha da güvende olabilirmisiniz ?
Yazı bitmişdi ama bir püf daha vermekde fayda var. Bu yedekleme işini zırt pırt siz yapmak istemezsiniz elbet, brakın sistem yapsın ekleyin bunu cron'a yedeklensin dursun. Mesela her sabah saat 3 de yapsın.
[root!tty2] -> [~] # crontrab -e admin74
#If you don't ****
#*
#*
#*
0 3 * * * /usr/local/bin/mysqldump �uadmin74 �p4353234 --opt asdf_db | gzip > /yedek/asdf_db.sql.gz
~
~
3.Sonuç
Database ile çalışanlar bilirki heran bir sorun çıkabilir, çıkmayabilirde günlük hayatımızdaki gibi tedbiri elden bırakmamakta fayda var. Mysql datalarını yedeklemenin başka yöntemleri de var ancak. Bu yöntem genelde diğer yöntemlere kök teşkil eder...
13.09.2003(Son Güncelleme)
XX.XX.2001
ATILIM BOY
aboy ~ enderunix.org
[url=http://www.EnderUNIX.ORG/]http://www.EnderUNIX.ORG/[/url]
aboy ~ trunix.org
[url=http://www.Trunix.ORG/]http://www.Trunix.ORG/[/url]
Copyright (c) 2003 ATILIM BOY Kaynak gosterilmek şartıyla kullanılabilir.
EnderUNIX Software Development Team Member.
En temel yontem :
ÇIKTI:
1. mysqldump -uKullaniciadi -pSifre Veritabani_Ismi > Veritabani_Ismi.sql
Bu islem
ile veritabanini yeniden olusturacak veriler "Veritabani_Ismi.sql"
dosyasina yazilir.
Bu dosyayi sikistirarak saklamak icin (yaklasik 1/8 sikistirma gozlemledim)
asagidaki gibi bir komut kullanilabilir:
ÇIKTI:
1. mysqldump -uKullaniciadi -pSifre Veritabani_Ismi | gzip > Veritabani_Ismi.gz
Alinan yedeklerin veritabaninda tekrar yaratilmasi icin -gerekli oldugu takdirde- :
ÇIKTI:
1. mysql -uKullaniciadi -pSifre Veritabani_Ismi < Veritabani_Ismi.sql
Veya eger yedegi sikistirarak aldiysaniz :
ÇIKTI:
1. gunzip < Veritabani_Ismi.gz | mysql -uKullaniciAdi -p Veritabani_Ismi
Linux altinda yardim almak icin asagidaki gibi bir komut giriniz :
ÇIKTI:
1. man mysqldump
Resmi Mysqldump dokumanlari asagidaki linkten alinabilir :
[url=http://www.mysql.com/]http://www.mysql.com/[/url]
Yukarida anlatilan islemleri PHPMyAdmin programini kullanarak da yapabilirsiniz:
[url=http://www.phpwizard.com/]http://www.phpwizard.com/[/url]
[b]2007.12.14 cuma günü güncelleme: [/b]
>> [color=#0040FF]mysqldump[/color] [b]-p[/b] [color=#BF0000]db_ad[/color] [color=#FFBF80]>[/color] [color=#0080FF]db.sql[/color]
islem cok basit..
31.01.2007 - Hamdi