Mysql de bir database'in yedeklenmesi

1.Giriş

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.

7 yorum

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

[url=http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html]http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html[/url]

--compatible=name


mysql 4.0 verisoyonu kullanan servere , mysql 41 den veri aktarmak istedigimde karakter hatasi veriyordu. bunun icin mysql41 de mysqldump yaparken 40 a göre yedeklemem gerekiyordu komut ise söyle:


mysqldump -u <kullaniciAdi> -p --opt <veritabani> | --compatible=mysql40 > kaynakyer.sql

tiklayinca sifre sorar yazarsiniz ve yedekleme baslar:)

kolay gelsin

31.01.2007 - Hamdi

Re: Mysql de bir database'in yedeklenmesi

Anlattıklarından zerre kadar bir şey anlamadım
:lol:

29.09.2007 - miftahulkuluub

Re: Mysql de bir database'in yedeklenmesi

[quote author="miftahulkuluub"]Anlattıklarından zerre kadar bir şey anlamadım
:lol:[/quote]


[color=#8000FF][b]Ben anlasam herhalde kendi sitemi kurardım şimdiye.[/b][/color]

02.10.2007 - ankebut-57

Re: Mysql de bir database'in yedeklenmesi

[quote author="miftahulkuluub"]Anlattıklarından zerre kadar bir şey anlamadım
:lol:[/quote]


Kusuruma bakma bir kac hafta sonra okuyabildim mesajini

yapmangereken islem cok basit.


1. ssh diye bir program var bunu googlede aratip download et

2. bu programi kurma islemini yap

3. Daha sonra ftp ile baglanir gibi bu programla serverdeki sitene baglan. Dreamhost ta ssh baglantisi izin veriliyor. girebilirsin yani

4. baglanti sonrasi yeni bir terminal ac:)) Terminal kullandigin programda göreceksin. mantigi windowsta dos sayfasi varya onun gibi bisi ama bu simsiyah degil beyaz ekran olarak karsina cikar

5. ssh terminalini actiktan sonra. yukaridaki islemleri yapabilirsiniz.

[b]
Kisaca yukaridaki islemi yapabilmek icin önce SSH nedir bunu ögrenmek gerekiyor. bu konu ile alakali yazilar linux sayfasinda yer aliyor olmasi lazim.[/b]

FTP bir sofrada yemek yemek oluyorsa. SSH kral sofrasi oluyor:))

sadece ögrenmen gereken sey kral sofrasinin adabi;))

Gerisi mi bir elin yagda diger elinde balda olacak mi:)


[quote]Ben anlasam herhalde kendi sitemi kurardım şimdiye.[/quote]

Bu site kurmaktan öte birislem.cok basit bilgilerle site kurulabilir. bu islemler ise biraz daha özele kaciyor. Profosyanellesmek icin bir adim diyebiliriz:)

08.10.2007 - Hamdi

Re: Mysql de bir database'in yedeklenmesi

aslında resimli anlatım olsa daha kolay anlaşılır

22.10.2007 - hayalbekcisi

Re: Mysql de bir database'in yedeklenmesi

[quote author="hayalbekcisi"]aslında resimli anlatım olsa daha kolay anlaşılır[/quote]

evet dogru:)) cok süper fikirde kim resimliyecek :wink:

28.10.2007 - Hamdi

Konular

Hanci.org sizlere daha iyi hizmet sunmak için çerezleri kullanıyor.
Hanci.org sitesini kullanarak çerez politikamızı kabul etmiş olacaksınız.
Detaylı bilgi almak için Gizlilik ve Çerez Politikası metnimizi inceleyebilirsiniz.