MySql Databaselerini Eşitleme

Başlatan alcolique, 29 Aralık 2010 - 14:03:12

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

alcolique

İyi Günler...

Birisi Windows Server 2003'de diğeride ubuntu 10.04.1'de  olmak üzere 2 tane MySql e sahibim.Ana sunucum 2003 üzerindeki verilerin hergün belirlerdiğim saatte eşitlenmesini istiyorum.Lakin ana sunucumdaki DB boyutu 7GB civarında.Hergün 7GB yedeklemektense gün içinde Ana sunucudaki DB e eklenen bilgileri çekme şansım var mı?

Biraz karışık anlattım heralde bir örnekle açıklamaya çalışayım problemimi;

Ana Sunucu(Windows Server 2003)                                                                                                             Yedek Sunucu(UBUNTU)

1.GÜN MySql Database Boyutu=7gb             >----------SAAT 2PM Yedekleme Boyutu =7GB -------->              MySql Database Boyutu:7gb

2.GÜN MySql Database Boyutu=7,2gb         >-----------SAAT 2PM Yedekleme Boyutu =0,2GB -------->           MySql Database Boyutu:7,2gb

3.GÜN MySql Database Boyutu=7,5gb         >-----------SAAT 2PM Yedekleme Boyutu =0,3GB -------->            MySql Database Boyutu:7,5gb


1. Gün 7Gb olan DB boyutumuz gün boyunda verilerin eklenmesiyle 2.Gün 7.2 GB olmuştur.2.Gün UBUNTU sunucumuz 2003 sunucuya gidip 7.2 gb veriyi çekeceğine sadece 0.2 gb lık alanı çekmiştir.

Açıklayabildiysem ne mutlu.

Yardımcı olucak arkadaşlara şimdiden çok teşekkürler...

eribol

Komut ve detay konusunda yardım edemem ama öneri verebilirim. crontab uygulaması ile belirli aralıklara mysql veritabanını kontrol edip farkı bir sql sorgu dosyasına yazıp gün sonunda da bu sorgu dosyasını Ubuntu'da ki veritabanına aktaran betik veya mysql fonksiyonları veya php komutları yazılabilir. Dediğim gibi detaylı bir bilgim yok ancak bu imkanlar mevcut.

alcolique

Teşekkür ederim yanıtınız için bahsetmiş olduğunuz uygulamasını inceleyeceğim hemen.

sem

PHP, C, Perl gibi diller ile yapılabilir diye düşünüyorum...

* Program Ubuntu sunucuda çalışacak. İkinci gün belirli bir saatte çalışacak program. Son 24 saat içerisinde olan değişikleri bütün tablolarda tarayacak. Var ise yenileri Ubuntu suncuya yükleyecek. Yapabilirsiniz gibi duruyor böyle söyleyince ama tablolarınızda yapılan işlem ile ilgili tarih olarak kayıt tutan bir sütun var mı? Çünkü son 24 saat taraması sizin tarih sütununuza göre belirlenecektir büyük ihtimalle....

* Tarih tablosu yok ise emin olmamak ile beraber; bir trigger yazarsanız. Bu trigger eklenen bütün kayıtları bir tabloda toplar. Daha sonra iki sunucu arasında yeni verileri arayacak olan program sadece bu tabloya bakacak şekilde düzenlenebilir diye düşünüyorum...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

eribol

Yalnız crontab, bildiğim kadarıyla sunucularda belirli aralıklarda bir betiği çalıştırma veya bir komutu işletme gibi özellikleri olan bir uygulama. Tek başına bir şey ifade etmez.

alcolique

Peki 2. * da belirttiğiniz uygulamayı nasıl gerçekleştirebilirim?

Birde bazı datalarda date olur eminim çünkü tutulan datalar telefon görüşmeleriyle ilgili * olacak...


Evet Eribol crontab işimize yarayacak bir uygulama gibi durmuyor

sem

Tabloları bilmediğim için farazi olarak konuşayım;

örneğin uyeler tablosunda kişinin;  adı, soyadı, adresi, telefonu tutuluyor. Bu trigger ile şöyle bir şey sağyalabilirsiniz sanırım;

uyeler tablosuna eklenenleri -> yedek_uyeler tablosuna ekle (kontrol etmek için oluşturulan tablo)

Serverlar arasındaki program ise şu şekilde çalışabilir; MS 2003'deki MySQL'e bak -> yeni_uyeler'de bir kayıt varsa Ubuntu Server'de uyeler tablosuna ekle. Hatta MS 2003'teki bir zaman sonra şişmesin diye okunan veriler silinirse daha güzel olabilir...


Bu gibi bir şey yapılabilir diye düşünüyorum. Tabii çok iyi C ve MySQL ve  MySQL C API bilen birisi olması gerekiyor bunu yazmak için... Ya da C yerine PHP, Perl gibi herhangi bir dil...

".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

alcolique

O bilgide bende yok malesef.Çok teşekkürler sem0900 biraz daha araştirayım olmazsa bir uzmana parası neyse verip yaptırmak gerekli...

sem

Belki sitede vardır bu konularda uzman arkadaşlar. Hatta uzman olan kişiler  daha kolay ve basit bir çözüm de önerebilirler. Ben çok hakim olmadığım için ilk aklıma gelen öneriyi sundum.

Uzman bir arkadaştan yardım alırsanız ne gibi bir öneri sunduğunu bildirebilirseniz sevinirim. Şimdiden kolay gelsin diyorum size...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

tiamin

Merhabalar...
Bir fikirde benden hatta 2 fikir :D
1) sem0900' un dediği gibi tarih tablosuna baktırıp bunu php ile yaptırabilirsiniz.
2) Tarih kayıtları tutulmuyor ise bunu id kayıtlarına baktırarak yaptırmanız mümkün.
Bu iki çözümde de php işinizi görecektir. Buraya yedeklemek istediğiniz tablo yapısını yazarsanız ufak bir php scripts örneği ekleyebilirim. Tabi bu php dosyası istediğiniz zamanda cron ile çalışmalı.
İyi çalışmalar.
Sudo ve Su kardeşler :)

risperdal

Ben de alternatif bir fikir vereyim. 2 günde bir yedeklemektense bir kerelik 7gb i Ubuntu sunucuya yükleyin. Sonra Ubuntu sunucunuzda mysql için uzaktan erişimi açın. Windows Server 2003 ' de ki sitenizde de sitenizin kodlarında değişiklik yaparak her sorgu da kayıtların hem Windows Server üzerindeki mysql'e hem de Ubuntu sunucudaki mysql'e eklenmesini sağlayın.

tiamin

Alıntı yapılan: risperdal - 29 Aralık 2010 - 18:19:16
Ben de alternatif bir fikir vereyim. 2 günde bir yedeklemektense bir kerelik 7gb i Ubuntu sunucuya yükleyin. Sonra Ubuntu sunucunuzda mysql için uzaktan erişimi açın. Windows Server 2003 ' de ki sitenizde de sitenizin kodlarında değişiklik yaparak her sorgu da kayıtların hem Windows Server üzerindeki mysql'e hem de Ubuntu sunucudaki mysql'e eklenmesini sağlayın.
Merhabalar...
Bence bu yöntem sıkıntı çıkarabilir. Scripts aynı anda 2 mysql yazmaya calışacak ve her kayıtta kasma ihtimali yoğunluğa ve yapısına göre artacaktır. Bunun yerine yoğunlugun az olduğu bir anda yedeklemek en iyisi gibi geliyor bana.
Sudo ve Su kardeşler :)

risperdal


tiamin

Merhabalar...
Aynı anda kayıt sorun cıkartır diye düşündüm. Mesajımda da görüldüğü üzere olasılık üzerine konuştum ve kendi fikrim olduğunu söyledim.  ;)
Verdiğiniz linki inceledim. Mysql de hiç iyi değilim ve en kötüsü ingilizcem yok :(
Google amcadan translate şeklinde aldığım yardımda
There are two possibilities to get the existing tables and data from exampledb from the master to the slave. The first one is to make a database dump, the second one is to use the LOAD DATA FROM MASTER; command on the slave. The latter has the disadvantage the the database on the master will be locked during this operation, so if you have a large database on a high-traffic production system, this is not what you want, and I recommend to follow the first method in this case. However, the latter method is very fast, so I will describe both here.

If you want to follow the first method, then do this:

mysqldump -u root -p<password> --opt exampledb > exampledb.sql (Replace <password> with the real password for the MySQL user root! Important: There is no space between -p and <password>!)

This will create an SQL dump of exampledb in the file exampledb.sql. Transfer this file to your slave server!

If you want to go the LOAD DATA FROM MASTER; way then there is nothing you must do right now.

2 yöntemden bahsettiğini anladım.
Bu yöntemlerden birisi ana sunucudaki db yi exampledb.sql şeklinde kayıt edip yedek sunucuya aktarmak. 2. yöntemi anlayamadım bile :)
Eger exampledb.sql şeklinde bir kayıt ve aktarma söz konusu olacak sa esas daha büyük bir sorun cıkar diye düşünüyorum. Ama sadece ben düşünüyorum yanlışta olabilir  ;D
Sudo ve Su kardeşler :)

risperdal

Ben aslında linki konuyu açan arkadaşa tavsiye olarak vermiştim yoksa fikrimi destekleyici olması açısından vermedim :D. Gerçi zaten benim düşüncemden çok farklı bir yol ile eşitlemeyi anlatmışlar linkte de.

Mysql'in sitesinden de şöyle bir kaynak buldum http://dev.mysql.com/doc/refman/5.0/en/replication.html