Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen pt-table-syncp komutudur.
Program:
ADI
pt-table-sync - MySQL tablo verilerini verimli bir şekilde senkronize edin.
SİNOPSİS
Kullanım: pt-table-sync [SEÇENEKLER] DSN [DSN]
pt-table-sync, verileri MySQL tabloları arasında verimli bir şekilde senkronize eder.
Bu araç verileri değiştirir, bu nedenle maksimum güvenlik için kullanmadan önce verilerinizi yedeklemelisiniz.
o. Çoğaltma bağımlısı olan bir sunucuyu "--replicate" veya
"--sync-to-master" yöntemleri, her zaman çoğaltma yöneticisinde değişiklikleri yapar, asla
doğrudan çoğaltma kölesi. Bu genellikle bir kopya getirmenin tek güvenli yoludur.
efendisiyle tekrar senkronize olur; kopyadaki değişiklikler genellikle
problemler en başta. Ancak, master üzerinde yaptığı değişiklikler işlemsiz olmalıdır.
verileri geçerli değerlerine ayarlayan ve aslında yalnızca kopyayı etkileyen değişiklikler.
Ana bilgisayar1'deki db.tbl'yi ana bilgisayar2'ye eşitleyin:
pt-table-sync --execute h=ana bilgisayar1,D=db,t=tbl h=ana bilgisayar2
Host1'deki tüm tabloları host2 ve host3 ile senkronize edin:
pt-table-sync -- host1 host2 host3'ü çalıştır
Slave1'in çoğaltma yöneticisiyle aynı verilere sahip olmasını sağlayın:
pt-table-sync --execute --senkronizasyon-ana köle1
pt-table-checksum'un master1'in tüm slave'lerinde bulduğu farklılıkları çözün:
pt-table-sync --execute --replicate test.checksum master1
Yukarıdakiyle aynı, ancak yalnızca slave1'deki farklılıkları giderin:
pt-table-sync --execute --replicate test.checksum \
--ana köle ile senkronizasyon1
Master2'yi, master2'nin db.tbl kopyasının bulunduğu bir master-master replikasyon yapılandırmasında senkronize edin.
yanlış olduğu biliniyor veya şüpheleniliyor:
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
Master-master konfigürasyonunda aşağıdakilerin istediğinizi YAPMAYACAĞINA dikkat edin,
çünkü doğrudan master2'de değişiklik yapacak ve daha sonra çoğaltma yoluyla akacaktır.
ve master1'in verilerini değiştirin:
# Bunu master-master kurulumunda yapmayın!
pt-table-sync --execute h=master1,D=db,t=tbl master2
RİSKLER
UYARI: pt-table-sync verileri değiştirir! Bu aracı kullanmadan önce lütfen:
· Aracın belgelerini okuyun
· Aracın bilinen "HATALARI" gözden geçirin
· Aracı üretim dışı bir sunucuda test edin
· Üretim sunucunuzu yedekleyin ve yedekleri doğrulayın
pt-table-sync olgun, gerçek dünyada kanıtlanmış ve iyi test edilmiş, ancak kullanılıyorsa
uygun olmayan şekilde olumsuz sonuçlar doğurabilir. Senkronizasyonu her zaman önce şununla test edin:
"--kuru çalışma" ve "--baskı".
TANIM
pt-table-sync, tablo verilerinin tek yönlü ve çift yönlü senkronizasyonunu yapar. yapar değil
tablo yapılarını, dizinleri veya diğer şema nesnelerini senkronize edin. Devamındaki
tek yönlü senkronizasyonu açıklar. "ÇİFT YÖNLÜ SENKRONİZASYON" daha sonra açıklanacaktır.
Bu araç karmaşıktır ve birkaç farklı şekilde çalışır. Güvenli bir şekilde kullanmak ve
etkili bir şekilde, üç şeyi anlamalısınız: "--replicate" nin amacı, bulma
farklılıklar ve ana bilgisayarların belirtilmesi. Bu üç kavram yakından ilişkilidir ve belirleyicidir.
alet nasıl çalışacak. Aşağıdaki kısaltılmış mantıktır:
DSN'de varsa, yalnızca o tabloyu eşitleyin:
1 DSN ise:
--sync-to-master ise:
DSN bir köledir. Master'ına bağlanın ve senkronize edin.
1'den fazla DSN ise:
İlk DSN kaynaktır. Her DSN'yi sırayla senkronize edin.
başka ise --replicate:
--sync-to-master ise:
DSN bir köledir. Master'ına bağlanın, kayıtları bulun
farklılıklar ve düzeltme.
Başka:
DSN anadır. Köleleri bulun ve her birine bağlanın,
farklılıkların kayıtlarını bulun ve düzeltin.
Başka:
sadece 1 DSN ve --sync-to-master ise:
DSN bir köledir. Master'ına bağlanın, tabloları bulun ve
--databases vb. ile filtreleyin ve her tabloyu ana tabloyla senkronize edin.
Başka:
tabloları bulun, --databases vb. ile filtreleyin ve her birini senkronize edin
İlk DSN'ye.
pt-table-sync iki yoldan biriyle çalışabilir: "--replicate" ile veya onsuz. Varsayılan
pt-table-sync'in farklılıkları otomatik olarak bulmasına neden olan "--replicate" olmadan çalıştırmak
birkaç algoritmadan biriyle verimli bir şekilde (bkz. "ALGORITHMS"). Alternatif olarak, değer
"--replicate" öğesi belirtilirse, pt-table-sync'in zaten bulunan farklılıkları kullanmasına neden olur
daha önce pt-table-checksum'u kendi "--replicate" seçeneğiyle çalıştırarak. kesinlikle
konuşma, "--replicate" kullanmanıza gerek yok çünkü pt-table-sync farklılıkları bulabilir,
ancak birçok kişi, örneğin, pt-table- kullanarak düzenli olarak sağlama toplamı alıyorsa "--replicate" kullanır.
sağlama toplamı, ardından farklılıkları gerektiği gibi pt-table-sync ile düzeltin. Emin değilseniz, her birini okuyun
aletin belgelerini dikkatlice inceleyin ve kendiniz karar verin veya bir uzmana danışın.
"--replicate" kullanılıp kullanılmadığına bakılmaksızın, hangi ana bilgisayarların kullanılacağını belirtmeniz gerekir.
senkronizasyon. İki yol vardır: "--sync-to-master" ile veya olmadan. belirtme
"--sync-to-master", pt-table-sync'in komut satırında bir ve yalnızca bağımlı DSN beklemesini sağlar.
Araç, kölenin efendisini otomatik olarak keşfedecek ve verilerinin güncellenmesi için onu senkronize edecektir.
efendisi ile aynı. Bu, daha sonra master üzerinde değişiklikler yapılarak gerçekleştirilir.
replikasyon yoluyla ilerleyin ve farklılıklarını çözmek için köleyi güncelleyin. Be dikkatli
gerçi: bu seçenek tek bir köleyi belirtse ve eşitlese de, başka köleler varsa
aynı master üzerinde, köle için amaçlanan değişiklikleri çoğaltma yoluyla alacaklardır.
senkronize etmeye çalıştığınızı
Alternatif olarak, "--sync-to-master" belirtmezseniz, ekranda verilen ilk DSN
komut satırı kaynak ana bilgisayardır. Yalnızca bir kaynak ana bilgisayar vardır. sen de yapmazsan
"--replicate" belirtin, ardından hedef olarak en az bir başka DSN belirtmelisiniz
ev sahibi. Bir veya daha fazla hedef ana bilgisayar olabilir. Kaynak ve hedef ana bilgisayarlar olmalıdır
bağımsız; aynı çoğaltma topolojisinde olamazlar. pt-table-sync ile ölecek
değişiklikler yazıldığı için hedef ana bilgisayarın bağımlı olduğunu algılarsa bir hata
doğrudan hedef ana bilgisayarlara (ve doğrudan kölelere yazmak güvenli değildir). Ya da, eğer
"--replicate" (ancak "--sync-to-master" değil) belirtin, ardından pt-table-sync yalnızca bir tane bekler
komut satırında bir ana DSN. Araç, tüm master'ları otomatik olarak keşfedecektir.
köleler ve onları master ile senkronize edin. Bu, birkaç (tümü) köleyi aynı anda senkronize etmenin tek yoludur.
bir kez ("--sync-to-master" yalnızca bir bağımlı birimi belirtir).
Komut satırındaki her ana bilgisayar bir DSN olarak belirtilir. İlk DSN (veya vakalar için yalnızca DSN
"--sync-to-master" gibi) diğer DSN'ler için varsayılan değerler sağlar, diğer DSN'ler olsun ya da olmasın
komut satırında belirtilir veya araç tarafından otomatik olarak bulunur. Yani bu örnekte,
pt-table-sync --execute h=ana bilgisayar1,u=msandbox,p=msandbox h=ana bilgisayar2
host2 DSN, host1 DSN'den "u" ve "p" DSN parçalarını devralır. Kullan
pt-table-sync'in DSN'leri nasıl yorumlayacağını görmek için "--explain-hosts" seçeneği
Komut satırı.
ÇIKTI
"--verbose" seçeneğini belirtirseniz, farklar hakkında bilgi görürsünüz.
tablolar arasında. Tablo başına bir satır var. Her sunucu ayrı yazdırılır. İçin
örnek,
# Senkronizasyon h=host1,D=test,t=test1
# SİL DEĞİŞTİR EKLE GÜNCELLEME ALGORİTMASI BAŞLANGIÇ SON ÇIKIŞ VERİTABANI.TABLO
# 0 0 3 0 Parça 13:00:00 13:00:17 2 test.test1
Host1 üzerinde tablo test.test1 senkronize etmek için 3 "INSERT" deyimi gerektirdi ve
Chunk algoritması (bkz. "ALGORITHMS"). Bu tablo için senkronizasyon işlemi 13:00:00'da başladı
ve 17 saniye sonra sona erdi (zamanlar kaynak ana bilgisayardaki "NOW()" öğesinden alındı). Çünkü
farklılıklar bulundu, "ÇIKIŞ DURUMU" 2 idi.
"--print" seçeneğini belirtirseniz, komut dosyasının gerçek SQL ifadelerini görürsünüz.
"--execute" da belirtilmişse tabloyu senkronize etmek için kullanılır.
pt-table-sync'in parçaları seçmek için kullandığı SQL ifadelerini görmek istiyorsanız,
nibbles, satırlar, vb., ardından bir kez "--print" ve iki kez "--verbose" belirtin. Dikkat olmak
yine de: bu, birçok SQL ifadesi yazdırabilir.
"INSERT", "UPDATE" veya "DELETE" ifadelerinin hiçbir kombinasyonunun yapılamadığı durumlar vardır.
bazı benzersiz anahtarları ihlal etmeden farklılıkları çözün. Örneğin, varsayalım ki bir
a sütununda birincil anahtar ve b sütununda benzersiz bir anahtar. O zaman bunları senkronize etmenin bir yolu yok
basit UPDATE ifadeleri içeren iki tablo:
+---+---+ +---+---+
| bir | b | | bir | b |
+---+---+ +---+---+
| 1 | 2 | | 1 | 1 |
| 2 | 1 | | 2 | 2 |
+---+---+ +---+---+
Araç, bu durumda sorguları "DELETE" ve "REPLACE" olarak yeniden yazar. Bu otomatik olarak
ilk dizin ihlalinden sonra işlenir, bu nedenle endişelenmenize gerek yoktur.
Herhangi bir master-master kurulumunda pt-table-sync kullanırken dikkatli olun. Master-master çoğaltma
doğası gereği zor ve hata yapmak kolaydır. kullandığından emin olmalısın
aracı master-master çoğaltma için doğru şekilde kullanın. Genel bakış için "ÖZET"e bakın.
doğru kullanım.
Ayrıca "ON DELETE" veya "ON" ile yabancı anahtar kısıtlamaları olan tablolara da dikkat edin.
GÜNCELLEME" tanımları, çünkü bunlar alt tablolarda istenmeyen değişikliklere neden olabilir. Bkz.
"--[no]check-child-tables".
Genel olarak, bu araç, tablolarınız birincil anahtara veya benzersiz bir dizine sahip olduğunda en uygunudur.
Birincil anahtarı veya benzersiz bir dizini olmayan tablolardaki verileri senkronize edebilmesine rağmen,
bu verileri başka bir yolla senkronize etmek en iyisidir.
ÇOĞALTMA GÜVENLİK
Bir çoğaltma yöneticisini ve bağımlı birimi güvenli bir şekilde senkronize etmek, genel olarak önemsiz olmayan bir sorundur.
Verileri değiştiren diğer süreçler gibi düşünülmesi gereken her türlü sorun vardır.
hedef ve kaynak bir master-master olsun, köle üzerindeki verileri değiştirmeye çalışmak
çift ve çok daha fazlası.
Genel olarak, bunu yapmanın güvenli yolu, master üzerindeki verileri değiştirmek ve değişikliklere izin vermektir.
diğer değişiklikler gibi çoğaltma yoluyla köleye akar. Ancak, bu yalnızca şu durumlarda çalışır:
master üzerindeki masaya DEĞİŞTİRMEK mümkündür. DEĞİŞTİR yalnızca varsa çalışır
tablodaki benzersiz dizin (aksi takdirde sıradan bir INSERT gibi davranır).
Tablonuzun benzersiz anahtarları varsa, "--sync-to-master" ve/veya "--replicate" kullanmalısınız.
bir köleyi efendisiyle senkronize etme seçenekleri. Bu genellikle doğru olanı yapacaktır. Ne zaman
masada benzersiz bir anahtar yok, tablodaki verileri değiştirmekten başka seçenek yok.
köle ve pt-table-sync bunu yapmaya çalıştığınızı algılayacaktır. Şikayet edecek ve
"--no-check-slave" (bkz. "--[no]check-slave") belirtmediğiniz sürece ölür.
Bir ana-ana çift üzerinde birincil veya benzersiz anahtarı olmayan bir tabloyu senkronize ediyorsanız,
hedef sunucudaki verileri değiştirmelidir. Bu nedenle, belirtmeniz gerekir
güvenlik için "--no-bin-log" ("--[no]bin-log" bölümüne bakın). Bunu yapmazsanız, yaptığınız değişiklikler
hedef sunucu, kaynak sunucuya geri dönecek ve oradaki verileri değiştirecektir!
Bir master-master çiftinde yapılacak genel olarak güvenli olan şey, "--sync-to-master"ı kullanmaktır.
seçeneği, hedef sunucudaki verileri değiştirmemeniz için. Ayrıca ihtiyacınız olacak
pt-table-sync'in verileri değiştirdiğinden şikayet etmesini önlemek için "--no-check-slave" belirtin
bir köle üzerinde.
ALGORİTMALAR
pt-table-sync, bulmak için farklı algoritmalar kullanan genel bir veri senkronizasyon çerçevesine sahiptir.
farklılıklar. Araç, aşağıdakilere dayalı olarak her tablo için en iyi algoritmayı otomatik olarak seçer:
dizinler, sütun türleri ve "--algorithms" tarafından belirtilen algoritma tercihleri. bu
varsayılan tercih sırasına göre listelenen aşağıdaki algoritmalar mevcuttur:
yığın
İlk sütunu sayısal olan (tarih ve saat türleri dahil) bir dizin bulur ve
sütunun değer aralığını yaklaşık olarak "--chunk-size" satırlık parçalara böler.
Tüm parçayı sağlama toplamını yaparak bir seferde bir parçayı eşitler. Parça üzerinde farklıysa
kaynak ve hedef, hangi satırları bulmak için her bir parçanın satırlarını ayrı ayrı sağlama toplamları
farklılık.
Sütun, parçaların bitmesini sağlamak için yeterli kardinaliteye sahip olduğunda etkilidir.
doğru boyut hakkında.
Parça başına ilk sağlama toplamı oldukça küçüktür ve minimum ağ trafiği ile sonuçlanır
ve bellek tüketimi. Bir yığının satırlarının incelenmesi gerekiyorsa, yalnızca birincil anahtar
sütunlar ve bir sağlama toplamı, satırın tamamı değil, ağ üzerinden gönderilir. bir satır ise
farklı olduğu tespit edilirse, tüm satır getirilir, ancak daha önce değil.
Tüm değerlerin bulunduğu bir char sütununu parçalara ayırırsanız bu algoritmanın çalışmayacağını unutmayın.
aynı karakterle başlayın. Bu durumda, araç çıkar ve bir
farklı algoritma
ısırmak
Bir dizin bulur ve dizini "--chunk-size" satırlarının sabit boyutlu küçük parçaları halinde yükseltir,
geri izlemeyen bir algoritma kullanma (bu algoritma hakkında daha fazla bilgi için pt-archiver'a bakın). o
"Yığın"a çok benzer, ancak her birinin sınırlarını önceden hesaplamak yerine
tablonun indeks kardinalitesine dayalı parçası, her bir nibble'ın değerini tanımlamak için "LIMIT" kullanır.
üst limit ve alt limiti tanımlamak için önceki kemirmenin üst limiti.
Adımlar halinde çalışır: bir sorgu, bir sonraki kemirmenin üst kısmını tanımlayacak satırı bulur
sınır ve sonraki sorgu tüm nibble'ı kontrol eder. Eğer nibble farklıysa
kaynak ve hedef arasında, tıpkı "Chunk" gibi, kemirmeyi satır satır inceler.
yapar.
Gruplandıran
Bir COUNT(*) sütunu eklenmiş olarak, tüm sütunlara göre gruplandırılmış tüm tabloyu seçer.
Tüm sütunları karşılaştırır ve eğer aynılarsa COUNT(*) sütununun değerini şununla karşılaştırır:
hedefe kaç satır ekleneceğini veya silineceğini belirleyin. tablolar üzerinde çalışır
birincil anahtar veya benzersiz dizin olmadan.
dere
Tüm tabloyu tek bir büyük akışta seçer ve tüm sütunları karşılaştırır. Tümünü seçer
sütunlar. Diğer algoritmalardan çok daha az verimlidir, ancak hiçbir algoritma olmadığında çalışır.
kullanmaları için uygun indeks.
Gelecek planları
Gelecekteki algoritmalar için olasılıklar TempTable'dır (başlangıçta aşağıdan yukarıya dediğim şey
Bu aracın önceki sürümlerinde), DrillDown (başlangıçta yukarıdan aşağıya dediğim şey) ve
GroupByPrefix (SqlYOG Job Agent'ın nasıl çalıştığına benzer). Her algoritmanın güçlü yönleri vardır
ve zayıflıklar. Bulmak için favori tekniğinizi uygulamak isterseniz
muhtemelen farklı sunuculardaki iki veri kaynağı arasındaki farklar,
Yardım Edin. Algoritmalar, yazmayı oldukça kolaylaştıran basit bir arayüze bağlı
kendi.
ÇİFT YÖNLÜ SENKRONİZE
Çift yönlü senkronizasyon, yeni, deneysel bir özelliktir. Güvenilir bir şekilde çalışmasını sağlamak için
bir dizi katı sınırlama:
* yalnızca bir sunucuyu diğer bağımsız sunucularla senkronize ederken çalışır
* replikasyon ile hiçbir şekilde çalışmaz
* tablonun/tabloların Chunk algoritması ile parçalanabilmesini gerektirir
* N yönlü değildir, aynı anda iki sunucu arasında yalnızca çift yönlüdür
* DELETE değişikliklerini işlemez
Örneğin, üç sunucumuz olduğunu varsayalım: c1, r1, r2. c1 merkezi sunucudur, bir
diğer sunuculara pseudo-master (yani r1 ve r2, c1'in köleleri değildir). r1 ve r2
uzak sunucular Tablo foo'daki satırlar güncellenir ve üç sunucuya da eklenir ve biz
tüm değişiklikleri tüm sunucular arasında senkronize etmek istiyorum. Tablo foo'nun sütunları var:
id int BİRİNCİL ANAHTAR
ts zaman damgası otomatik güncellendi
isim varchar
Otomatik artış ofsetleri, herhangi bir sunucudan gelen yeni satırların çakışma oluşturmaması için kullanılır
birincil anahtar (id) değerleri. Genel olarak, ts sütunu tarafından belirlenen daha yeni satırlar,
çift yönlü eşitleme sırasında aynı ancak farklı bir satır bulunduğunda öncelik. "Aynı
ancak farklı", iki satırın aynı birincil anahtar (id) değerine sahip olduğu ancak farklı olduğu anlamına gelir
bu örnekteki ad sütunu gibi başka bir sütun için değerler. Aynı ama farklı
çatışmalar bir "çatışma" ile çözülür. Bir çatışma, rekabet eden bir sütunun bazı sütunlarını karşılaştırır.
Bir "kazanan" belirlemek için satırlar. Kazanan sıra kaynak olur ve değerleri kullanılır
diğer satırı güncellemek için
Çift yönlü senkronizasyonu sağlamak için kullanılan üç sütun arasında ince farklar vardır.
aşina olmanız gerekenler: yığın sütun ("--yığın-sütun"), karşılaştırma sütun(lar)ı
("--sütunlar") ve çakışma sütunu ("--çatışma-sütun"). Yığın sütunu yalnızca kullanılır
masayı parçalamak için; örneğin "WHERE id >= 5 AND id < 10". Parçalar sağlama toplamıdır ve ne zaman
yığın sağlama toplamları bir farkı ortaya çıkarır, araç o yığındaki satırları seçer ve sağlama toplamları
her satır için "--sütunlar". Bir sütun sağlama toplamı farklıysa, satırlarda bir veya daha fazla
çakışan sütun değerleri. Geleneksel bir tek yönlü senkronizasyonda, çatışma tartışmalıdır.
nokta, çünkü hedef satırın tamamı güncellenerek kolayca çözülebilir.
kaynak satırın değerleri. Ancak çift yönlü bir eşitlemede "--conflict-column" (içinde
aşağıdaki diğer "--conflict-*" seçenekleri listesine göre) karşılaştırılarak hangi
satır "doğru" veya "yetkili"; bu satır "kaynak" olur.
Üç sunucuyu da tamamen senkronize etmek için iki pt-table-sync çalışması gerekir. İlk
c1 ve r1 senkronizasyonlarını çalıştırın, ardından r1'deki değişiklikler dahil olmak üzere c2 ve r1'yi senkronize edin. Bu noktada c1
ve r2 tamamen senkronizedir, ancak c1 yapmadığı için r2'de r1'den herhangi bir değişiklik eksik
o ve r1 senkronize edildiğinde bu değişiklikleri yapın. Bu nedenle, senkronize eden ikinci bir çalıştırma gereklidir.
sunucular aynı sırada, ancak bu sefer c1 ve r1 senkronize edildiğinde r1, r2'nin değişikliklerini alır.
Araç, N-yolları senkronize etmez, yalnızca ekranda verilen ilk DSN arasında çift yönlü olarak
komut satırı ve ardından gelen her DSN. Yani bu örnekteki araç çalıştırılacak
iki kez beğen:
pt-table-sync --çift yönlü h=c1 h=r1 h=r2
"--çift yönlü" seçeneği bu özelliği etkinleştirir ve çeşitli akıl sağlığı kontrollerinin yapılmasına neden olur.
gerçekleştirildi. pt-table-sync'e nasıl çözüleceğini söyleyen diğer seçenekleri belirtmelisiniz.
aynı ancak farklı satırlar için çakışmalar. Bu seçenekler şunlardır:
* --çatışma sütunu
* --çatışma-karşılaştırma
* --çatışma değeri
* --çatışma eşiği
* --conflict-error"> (isteğe bağlı)
"--execute" işleminden önce bu seçeneği test etmek için "--print" kullanın. Yazdırılan SQL ifadeleri
kullandıysanız ifadenin hangi ana bilgisayar üzerinde yürütüleceğini söyleyen yorumlarınız var
"--uygulamak".
Teknik not: ilk DSN her zaman "sol" sunucudur ve diğer DSN'ler
her zaman "doğru" sunucu. Her iki sunucu da kaynak veya hedef olabileceğinden,
onları "src" ve "dst" olarak düşünmek kafa karıştırıcı. Bu nedenle, genel olarak adlandırılırlar
sol ve sağ olarak. Bunu hatırlamak kolaydır çünkü ilk DSN her zaman soldadır
komut satırındaki diğer sunucu DSN'lerinin.
EXIT DURUMU
Aşağıdakiler, pt- olduğunda çıkış durumlarıdır (dönüş değerleri veya dönüş kodları olarak da adlandırılırlar).
tablo senkronizasyonu bitirir ve çıkar.
DURUM ANLAMI
====== =========================================== ===========
0 Başarı.
1 Dahili hata.
2 Hedefte en az bir tablo farklıydı.
3 1 ve 2'nin kombinasyonu.
SEÇENEKLER
"--print", "--execute" veya "--dry-run" seçeneklerinden en az birini belirtin.
"--where" ve "--replicate" birbirini dışlar.
Bu araç, ek komut satırı bağımsız değişkenlerini kabul eder. "SYNOPSIS" ve kullanıma bakın
detaylar için bilgi.
--algoritmalar
tür: dize; varsayılan: Chunk,Nibble,GroupBy,Stream
Tabloları karşılaştırırken tercih sırasına göre kullanılacak algoritma.
Her tablo için, pt-table-sync, tablonun verilen tabloyla senkronize edilip edilemeyeceğini kontrol eder.
algoritmalar verildikleri sırayla. Senkronize edebilen ilk algoritma
tablo kullanılır. "ALGORİTMALAR" bölümüne bakın.
--ask-geçiş
MySQL'e bağlanırken bir şifre isteyin.
--çift yönlü
İlk ve sonraki ana bilgisayarlar arasında çift yönlü senkronizasyonu etkinleştirin.
Daha fazla bilgi için "ÇİFT YÖNLÜ SENKRONİZASYON" bölümüne bakın.
--[no]bin günlüğü
varsayılan: evet
İkili günlükte oturum açın ("SET SQL_LOG_BIN=1").
"--no-bin-log" belirtilmesi "SQL_LOG_BIN=0" ayarını yapacaktır.
--mysql'deki tampon
MySQL'e sorguları belleğinde arabelleğe alması talimatını verin.
Bu seçenek, karşılaştırma sorgularına "SQL_BUFFER_RESULT" seçeneğini ekler. Bu
MySQL'in sorguları yürütmesine ve bunları dahili olarak geçici bir tabloya yerleştirmesine neden olur
sonuçları pt-table-sync'e geri göndermeden önce. Bu stratejinin avantajı,
pt-table-sync, içinde çok fazla bellek kullanmadan satırları istediğiniz gibi getirebilir.
Perl işlemi, MySQL tablosundaki kilitleri serbest bırakırken (çekişmeyi azaltmak için
diğer sorgular). Dezavantajı MySQL sunucusunda daha fazla bellek kullanmasıdır.
yerine.
Muhtemelen "--[no]buffer-to-client" özelliğini de etkin bırakmak istersiniz, çünkü arabelleğe alma
geçici bir tabloya ve ardından hepsini Perl'in belleğine getirmek muhtemelen aptalca
yapılacak şey. Bu seçenek en çok GroupBy ve Stream algoritmaları için kullanışlıdır.
sunucudan çok fazla veri alabilir.
--[no]istemciye arabellek
varsayılan: evet
Karşılaştırma yaparken satırları MySQL'den tek tek alın.
Bu seçenek, MySQL'in seçili satırları üzerinde tutmasına neden olan "mysql_use_result"u etkinleştirir.
araç onları getirene kadar sunucu. Bu, aracın daha az bellek kullanmasına izin verir, ancak
satırları sunucuda daha uzun süre kilitli tutabilir.
Bu seçenek "--no-buffer-to-client" belirlenerek devre dışı bırakılırsa,
MySQL'in tüm seçili satırları araca göndermesine neden olan "mysql_store_result" kullanılır
bir kerede. Bu, "imleç" sonuçlarının daha kısa bir süre açık tutulmasına neden olabilir.
sunucuda, ancak tablolar büyükse, yine de uzun zaman alabilir ve
tüm hafızan.
Önemsiz olmayan veri boyutlarının çoğu için bu seçeneği etkin bırakmak istersiniz.
"--çift yönlü" kullanıldığında bu seçenek devre dışı bırakılır.
--karakter seti
kısa form: -A; tür: dize
Varsayılan karakter seti. Değer utf8 ise, Perl'in STDOUT üzerindeki ikili modunu utf8'e ayarlar,
mysql_enable_utf8 seçeneğini DBD::mysql'ye iletir ve ardından SET NAMES UTF8'i çalıştırır
MySQL'e bağlanma. Diğer herhangi bir değer, utf8 katmanı olmadan STDOUT'ta binmode ayarlar,
ve MySQL'e bağlandıktan sonra SET NAMES'i çalıştırır.
--[no]alt-tabloları kontrol et
varsayılan: evet
"--execute" ifadesinin alt tabloları olumsuz etkileyip etkilemeyeceğini kontrol edin. "--değiştir" olduğunda,
"--replicate" veya "--sync-to-master" belirtilirse, araç aşağıdakileri kullanarak tabloları senkronize edebilir:
"DEĞİŞTİR" ifadeleri. Senkronize edilen bir tabloda "ON DELETE" olan alt tablolar varsa
CASCADE", "ON UPDATE CASCADE" veya "ON UPDATE SET NULL", araç bir hata yazdırır ve
tabloyu atlar çünkü "DEĞİŞTİR" "SİL" ve ardından "EKLE" olur, bu nedenle "SİL"
alt tabloya kademelendirin ve satırlarını silin. En kötü durumda, bu silebilir
alt tablolardaki tüm satırlar!
Bu kontrolü devre dışı bırakmak için "--no-check-child-tables" belirtin. tamamen önlemek için
alt tabloları etkileyen, ayrıca "--no-yabancı-anahtar-kontrolleri" belirtin, böylece MySQL
üst tablodan alt tablolara herhangi bir işlemi basamaklandırın.
Bu kontrol yalnızca "--execute" ve "--replace", "--replicate" veya
"--sync-to-master" belirtildi. "--print" alt tabloları kontrol etmez.
Hata mesajı yalnızca "ON DELETE CASCADE" ile bulunan ilk alt tabloyu yazdırır,
"ON UPDATE CASCADE" veya "ON UPDATE SET NULL" yabancı anahtar kısıtlaması. Olabilir
diğer etkilenen alt tablolar.
--[hayır]ana kontrol
varsayılan: evet
"--sync-to-master" ile algılanan master'ın gerçek master olduğunu doğrulamaya çalışın.
--[no]kontrol kölesi
varsayılan: evet
Hedef sunucunun bir köle olup olmadığını kontrol edin.
Hedef sunucu bir bağımlıysa, üzerinde değişiklik yapmak genellikle güvenli değildir.
Ancak bazen yapmanız gereken; "--replace" benzersiz bir dizin olmadığı sürece çalışmaz,
örneğin, bu senaryoda master üzerinde değişiklik yapamazsınız. Varsayılan olarak pt-
bir köle üzerindeki verileri değiştirmeye çalışırsanız tablo senkronizasyonu şikayet eder. belirtmek
Bu kontrolü devre dışı bırakmak için "--no-check-slave". Kendi sorumluluğunuzda kullanın.
--[no]kontrol tetikleyicileri
varsayılan: evet
Hedef tabloda hiçbir tetikleyicinin tanımlanmadığını kontrol edin.
Tetikleyiciler MySQL v5.0.2'de tanıtıldı, bu nedenle eski sürümler için bu seçeneğin hiçbir özelliği yoktur.
etkisi çünkü tetikleyiciler kontrol edilmeyecektir.
--yığın-sütun
tür: dize
Bu sütundaki tabloyu parçalayın.
--parça indeksi
tür: dize
Bu dizini kullanarak tabloyu parçalayın.
--Parça boyutu
tür: dize; varsayılan: 1000
Parça başına satır sayısı veya veri boyutu.
"Chunk" ve "Nibble" algoritmaları için her bir satır öbeğinin boyutu. Boyut
satır sayısı veya veri boyutu olabilir. Veri boyutları bir sonek ile belirtilir
k=kibibayt, M=mebibayt, G=gibibayt. Veri boyutları birkaç satıra dönüştürülür
ortalama satır uzunluğuna bölerek.
--sütunlar
kısa biçim: -c; tür: dizi
Bu virgülle ayrılmış sütun listesini karşılaştırın.
--yapılandırma
tür: Dizi
Bu virgülle ayrılmış yapılandırma dosyalarının listesini okuyun; belirtilmişse, bu ilk olmalıdır
komut satırındaki seçenek.
--çatışma sütunu
tür: dize
"--çift yönlü" bir eşitleme sırasında satırlar çakıştığında bu sütunu karşılaştırın.
Aynı fakat farklı bir satır bulunduğunda, her satırdan bu sütunun değeri
"--çatışma-karşılaştırma", "--çatışma-değer" ve
Hangi satırın doğru verilere sahip olduğunu belirlemek için "--conflict-Threshold"
kaynak. Sütun, uygun olan herhangi bir tür olabilir.
"--conflict-comparison" (bu, örneğin bloblar dışında hemen hemen tüm türlerdir).
Bu seçenek yalnızca "--çift yönlü" ile çalışır. Daha fazla bilgi için "ÇİFT YÖNLÜ SENKRONİZASYON" bölümüne bakın
bilgiler.
--çatışma-karşılaştırma
tür: dize
Kaynak olarak bu özelliğe sahip "--çatışma-sütununu" seçin.
Seçenek, çakışan satırlardaki "--conflict-column" değerlerinin nasıl olduğunu etkiler.
karşılaştırıldı. Olası karşılaştırmalar şu MAGIC_karşılaştırmalarından biridir:
en yeni|en eski|en büyük|en az|eşittir|eşleşir
KARŞILAŞTIRMA İLE SATIR SEÇER
================================================= =================
en yeni En yeni zamansal --çatışma sütunu değeri
en eski En eski zamansal --çatışma sütunu değeri
en büyük En büyük sayısal "--çatışma sütunu değeri
en az En az sayısal --çatışma sütunu değeri
--conflict-sütun değeri eşittir --conflict-value
--conflict-column değeriyle eşleşen Perl normal ifade modeliyle eşleşir
--çatışma değeri
Bu seçenek yalnızca "--çift yönlü" ile çalışır. Daha fazla bilgi için "ÇİFT YÖNLÜ SENKRONİZASYON" bölümüne bakın
bilgiler.
--çatışma hatası
tür: dize; varsayılan: uyar
Çözülemeyen çakışmalar ve çakışma hataları nasıl bildirilir?
Bu seçenek, bir çakışma çözülemediğinde veya kullanıcıya bildirilme şeklini değiştirir.
bir tür hataya neden olur. Olası değerler şunlardır:
* uyar: Çözümlenemeyen çakışma hakkında STDERR'ye bir uyarı yazdırın
* die: Die, senkronizasyonu durdurun ve STDERR'ye bir uyarı yazdırın
Bu seçenek yalnızca "--çift yönlü" ile çalışır. Daha fazla bilgi için "ÇİFT YÖNLÜ SENKRONİZASYON" bölümüne bakın
bilgiler.
--çatışma eşiği
tür: dize
Bir "--çatışma-sütununun" diğerini aşması gereken miktar.
"--conflict-eşik", eğer mutlak bir durum varsa, bir çatışmanın çözülmesini engeller.
iki "--conflict-column" değeri arasındaki fark bu miktardan azdır. İçin
örneğin, iki "--çatışma sütunu"nun "2009-12-01 12:00:00" zaman damgası değerleri varsa ve
"2009-12-01 12:05:00" fark 5 dakikadır. "--çatışma eşiği" ayarlanmışsa
"5m" olarak çakışma çözülür, ancak "--conflict-eşik" "6m" olarak ayarlanırsa
fark daha büyük veya eşit olmadığı için çatışma çözülmeyecek
6 dakikaya kadar. Bu son durumda, "--conflict-error" başarısızlığı bildirecektir.
Bu seçenek yalnızca "--çift yönlü" ile çalışır. Daha fazla bilgi için "ÇİFT YÖNLÜ SENKRONİZASYON" bölümüne bakın
bilgiler.
--çatışma değeri
tür: dize
Belirli "--çatışma karşılaştırması" için bu değeri kullanın.
Bu seçenek "eşittir" ve "eşleşir" "--çatışma-karşılaştırma" değerini verir.
Bu seçenek yalnızca "--çift yönlü" ile çalışır. Daha fazla bilgi için "ÇİFT YÖNLÜ SENKRONİZASYON" bölümüne bakın
bilgiler.
--veritabanları
kısa biçim: -d; tür: karma
Yalnızca bu virgülle ayrılmış veritabanları listesini eşitleyin.
Yaygın bir istek, bir veritabanındaki tabloları başka bir veritabanındaki tablolarla senkronize etmektir.
aynı veya farklı sunucuda. Bu henüz mümkün değil. "--databases" yapmayacak
ve DSN'nin D kısmı ile de yapamazsınız çünkü bir
tablo adı, tüm sunucunun senkronize edilmesi gerektiğini ve yalnızca D bölümünün kontrol edilmesi gerektiğini varsayar.
bağlantının varsayılan veritabanı.
--defaults-dosyası
kısa form: -F; tür: dize
Yalnızca verilen dosyadan mysql seçeneklerini okuyun. Mutlak bir yol adı vermelisiniz.
--kuru çalışma
Analiz edin, kullanılacak senkronizasyon algoritmasına karar verin, yazdırın ve çıkın.
Sonuçları görebilmeniz için "--verbose" anlamına gelir. Sonuçlar aynı çıktıda
aracı çalıştırdığınızda göreceğiniz biçim, ancak bunun için sıfırlar olacaktır.
satırlar etkilenir. Bunun nedeni, aracın gerçekten çalışması, ancak ondan önce durmasıdır.
herhangi bir veriyi karşılaştırır ve sadece sıfırları döndürür. Sıfırlar hiçbir değişiklik olmadığı anlamına gelmez
yapılacak.
--motorlar
kısa form: -e; tür: karma
Yalnızca bu virgülle ayrılmış depolama motorları listesini eşitleyin.
--uygulamak
Tabloların aynı verilere sahip olmasını sağlamak için sorguları yürütün.
Bu seçenek, tüm sorguları yürüterek pt-table-sync'in tablo verilerini gerçekten senkronize etmesini sağlar.
tablo farklılıklarını çözmek için oluşturduğu. Öyleyse, the tablolar irade be değişti!
Ayrıca "--verbose" belirtmezseniz, değişiklikler sessizce yapılacaktır. Eğer bu
istediğiniz gibi değil, bkz. "--print" veya "--dry-run".
--açıkla-ana bilgisayarlar
Bağlantı bilgilerini yazdırın ve çıkın.
pt-table-sync'in bağlanacağı ana bilgisayarların bir listesini, tüm çeşitli seçeneklerle birlikte yazdırın.
bağlantı seçenekleri ve çıkış.
--float-hassas
tür: int
"FLOAT" ve "DOUBLE" sayıdan dizgiye dönüştürme için hassasiyet. FLOAT'a neden olur ve
Ondalık noktadan sonra belirtilen basamak sayısına yuvarlanacak ÇİFT değerler,
ile YUVARLAK() MySQL'de işlev. Bu, aşağıdakilerden kaynaklanan sağlama toplamı uyumsuzluklarının önlenmesine yardımcı olabilir:
farklı MySQL'de aynı değerlerin farklı kayan nokta gösterimleri
sürümler ve donanım. Varsayılan, yuvarlama olmamasıdır; değerler dönüştürülür
tarafından dizeler BİRLEŞTİR() işlev ve MySQL dize temsilini seçer. Eğer sen
örneğin 2 değerini belirtin, ardından 1.008 ve 1.009 değerleri yuvarlanacaktır
1.01 ve sağlama toplamı eşit olacaktır.
--[hayır]yabancı anahtar kontrolleri
varsayılan: evet
Yabancı anahtar kontrollerini etkinleştirin ("SET FOREIGN_KEY_CHECKS=1").
"--no-yabancı-anahtar denetimi"nin belirtilmesi, "YABANCI_ANAHTAR_CHECKS=0 AYARLANIR".
--işlev
tür: dize
Sağlama toplamları için kullanmak istediğiniz karma işlevi.
Varsayılan "CRC32"dir. Diğer iyi seçenekler arasında "MD5" ve "SHA1" bulunur. eğer varsa
"FNV_64" kullanıcı tanımlı işlevi yüklediğinde, "pt-table-sync" bunu algılayacak ve
Yerleşiklerden çok daha hızlı olduğu için kullanmayı tercih edin. Ayrıca kullanabilirsin
MURMUR_HASH bu kullanıcı tanımlı işlevi yüklediyseniz. Bunların ikisi de
Maatkit ile birlikte dağıtılır. Daha fazla bilgi ve kıyaslama için pt-table-checksum'a bakın.
--yardım et
Yardımı göster ve çık.
--[hayır]altıgen damla
varsayılan: evet
"HEX()" "BLOB", "METİN" ve "BINARY" sütunları.
Verileri eşitlemek için sorgular oluşturmak için kaynaktan satır verileri getirildiğinde (ör.
"--print" ile görülen ve "--execute" ile yürütülen sorgular), ikili sütunlar sarılır
in HEX() bu nedenle ikili veriler geçersiz bir SQL ifadesi üretmez. Yapabilirsiniz
bu seçeneği devre dışı bırakın, ancak muhtemelen yapmamalısınız.
--ev sahibi
kısa biçim: -h; tür: dize
Ana bilgisayara bağlanın.
--ignore-sütunlar
tür: Karma
Karşılaştırmalarda bu virgülle ayrılmış sütun adları listesini yok sayın.
Bu seçenek, sütunların karşılaştırılmamasına neden olur. Ancak, bir satır belirlenirse
tablolar arasında farklılık gösterirse, o satırdaki tüm sütunlar ne olursa olsun eşitlenir. (O değil
şu anda sütunları eşitleme işleminin kendisinden hariç tutmak mümkündür, yalnızca
karşılaştırmak.)
--ignore-veritabanları
tür: Karma
Bu virgülle ayrılmış veritabanları listesini yok sayın.
(sistem veritabanları gibi information_schema ve performans_şema tarafından görmezden gelinir
varsayılan)
--ignore-motorlar
tür: Karma; varsayılan: FEDERASYON,MRG_MyISAM
Bu virgülle ayrılmış depolama motorları listesini yok sayın.
--ignore-tabloları
tür: Karma
Bu virgülle ayrılmış tablo listesini yok sayın.
Tablo adları, veritabanı adıyla nitelenebilir.
--ignore-tablolar-regex
tür: dize; grup: Filtre
Adları Perl normal ifadesiyle eşleşen tabloları yoksay.
--[hayır]dizin ipucu
varsayılan: evet
Yığın ve satır sorgularına FORCE/USE INDEX ipuçları ekleyin.
Varsayılan olarak "pt-table-sync", zorlamak için her SQL deyimine bir FORCE/USE INDEX ipucu ekler
MySQL, senkronizasyon algoritması tarafından seçilen veya tarafından belirtilen dizini kullanmaya
"--yığın indeksi". Bu genellikle iyi bir şeydir, ancak nadir durumlarda dizin
sorgu için en iyisi, böylece dizin ipucunu belirterek bastırabilirsiniz.
"--no-index-ipucu" ve MySQL'in dizini seçmesine izin verin.
Bu, "--print" ile yazdırılan sorguları etkilemez; sadece öbeği etkiler ve
"pt-table-sync" öğesinin satırları seçmek ve karşılaştırmak için kullandığı satır sorguları.
--kilit
tür: int
Tabloları kilitle: 0=yok, 1=senkronizasyon döngüsü başına, 2=tablo başına veya 3=genel olarak.
Bu "KİLİT TABLOLARI" kullanır. Bu, siz çalışırken tabloların değiştirilmesini önlemeye yardımcı olabilir.
onları incelemek. Olası değerler aşağıdaki gibidir:
DEĞER ANLAMI
===== ============================================ ==========
0 Masaları asla kilitlemeyin.
1 Senkronizasyon döngüsü başına bir kez kilitleyin ve kilidini açın (uygulandığı gibi
senkronizasyon algoritması tarafından). Bu en ayrıntılı
kilitleme seviyesi mevcuttur. Örneğin, Chunk
algoritma her C parçasını kilitleyecektir satırlar ve ardından
kaynakta aynılarsa ve
hedef, bir sonraki parçaya geçmeden önce.
2 Her masadan önce ve sonra kilitleyin ve kilidini açın.
3 Senkronize edilen her sunucu (DSN) için bir kez kilitleyin ve kilidini açın.
C .
"--replicate" veya "--sync-to-master" ise, bir çoğaltma bağımlı birimi asla kilitlenmez.
teorik olarak ana tablonun kilitlenmesi herhangi bir değişikliği engellemesi gerektiğinden, belirtilen
yer almaktan. (Kölenizdeki verileri değiştirmiyorsunuz, değil mi?) "--wait" ise
verildiğinde, master (kaynak) kilitlenir ve ardından alet, slave'in yakalamasını bekler
devam etmeden önce ustaya
"--transaction" belirtilirse, "KİLİT TABLOLARI" kullanılmaz. Bunun yerine, kilitleyin ve kilidini açın
işlemleri başlatarak ve taahhüt ederek uygulanır. İstisna ise
"--lock" 3'tür.
"--no-transaction" belirtilirse, herhangi bir değer için "KİLİT TABLOLARI" kullanılır.
"--kilit". "--[no]işlem" bölümüne bakın.
--kilitle-ve-yeniden adlandır
Kaynak ve hedef tabloyu kilitleyin, senkronize edin, ardından adları değiştirin. Bu yararlı bir
daha az engelleyici ALTER TABLE, tablolar birbiriyle makul ölçüde senkronize olduğunda
(dökme ve yeniden yükleme dahil olmak üzere herhangi bir sayıda yolla gerçekleştirmeyi seçebilirsiniz)
hatta pt-archiver gibi bir şey). Tam olarak iki DSN gerektirir ve bunların olduğunu varsayar.
aynı sunucudalar, bu nedenle çoğaltma veya benzeri bir şey beklemez. Tablolar
KİLİT TABLOLARI ile kilitlenir.
--parola
kısa biçim: -p; tür: dize
Bağlanırken kullanılacak parola. Parola virgül içeriyorsa, bunlar kaçılmalıdır
ters eğik çizgi ile: "sınav\,ple"
--pid
tür: dize
Verilen PID dosyasını oluşturun. PID dosyası zaten mevcutsa araç başlamaz ve
içerdiği PID, mevcut PID'den farklıdır. Ancak, eğer PID dosyası
mevcutsa ve içerdiği PID artık çalışmıyorsa, araç PID'nin üzerine yazacaktır.
geçerli PID ile dosya. Araç çıktığında PID dosyası otomatik olarak kaldırılır.
--Liman
kısa biçim: -P; tür: int
Bağlantı için kullanılacak bağlantı noktası numarası.
--Yazdır
Farklılıkları çözecek sorguları yazdırın.
"pt-table-sync"e güvenmiyorsanız veya sadece ne yapacağını görmek istiyorsanız, bu
güvende olmak için iyi bir yol. Bu sorgular geçerli SQL'dir ve isterseniz bunları kendiniz çalıştırabilirsiniz.
tabloları manuel olarak senkronize etmek istiyorum.
--recursion-yöntemi
tür: dizi; varsayılan: işlem listesi, ana bilgisayarlar
Köleleri bulmak için kullanılan tercih edilen özyineleme yöntemi.
Olası yöntemler şunlardır:
YÖNTEM KULLANIMLARI
==============================
süreç listesi PROSES LİSTESİNİ GÖSTER
ana bilgisayarlar KÖLE KONAKLARI GÖSTER
hiçbiri köle bulma
SHOW SLAVE HOSTS güvenilir olmadığı için processlist yöntemi tercih edilir.
Ancak, sunucu standart olmayan bir bağlantı noktası kullanıyorsa (değil) hosts yöntemi gereklidir.
3306). Genellikle pt-table-sync doğru olanı yapar ve köleleri bulur, ancak
tercih edilen bir yöntem verin ve ilk önce kullanılacaktır. Herhangi bir köle bulamazsa,
diğer yöntemler denenecektir.
--yer değiştirmek
Tüm "INSERT" ve "UPDATE" ifadelerini "REPLACE" olarak yazın.
Bu, benzersiz dizin ihlalleri olduğunda gerektiğinde otomatik olarak açılır.
--tekrarlamak
tür: dize
Bu tabloda farklı olarak listelenen tabloları senkronize edin.
"pt-table-sync" öğesinin, aşağıdaki verileri bulmak için belirtilen tabloyu incelemesi gerektiğini belirtir.
farklılık gösterir. Tablo, aynı adı taşıyan pt-table- argümanıyla tamamen aynıdır.
sağlama toplamı. Yani, hangi tabloların (ve değer aralıklarının) farklı olduğuna dair kayıtları içerir.
efendi ve köle arasında.
Ana ve ana arasındaki farkları gösteren her tablo ve değer aralığı için
bağımlı, "pt-table-checksum", bu tabloyu uygun "WHERE" yan tümcesi ile senkronize eder,
onun efendisine.
Bu otomatik olarak "--wait"i 60'a ayarlar ve master üzerinde değişiklik yapılmasına neden olur.
köle yerine.
"--sync-to-master" belirtilirse, araç belirttiğiniz sunucunun
köle ve senkronizasyon için her zamanki gibi master'a bağlanın.
Aksi takdirde, seçtiğiniz sunucunun slave'lerini bulmak için "İŞLEM LİSTESİNİ GÖSTER" i kullanmaya çalışacaktır.
belirtildi. "PROSES LİSTESİNİ GÖSTER" ile herhangi bir slave bulamazsa, inceleme yapacaktır.
Bunun yerine "SLAVE SUNUCULARINI GÖSTER". Her kölenin "rapor ana bilgisayarını" yapılandırmanız gerekir,
"rapor-port" ve bunun doğru çalışması için diğer seçenekler. Köleleri bulduktan sonra,
eşitlenmesi gereken verileri bulmak için her bağımlı üzerinde belirtilen tabloyu inceleyin ve
senkronize et.
Araç, kalıbın ana kopya olduğunu varsayarak önce tablonun kalıbın kopyasını inceler.
potansiyel olarak da bir köle. Orada farklılıkları gösteren herhangi bir tablo DEĞİL be
köle(ler)de senkronize edilir. Örneğin, çoğaltmanızın A->B olarak ayarlandığını varsayalım,
B->C, B->D. Bu argümanı kullandığınızı ve sunucu B'yi belirlediğinizi varsayalım.
sunucu B'nin tablonun kopyasını inceleyin. Tablodaki sunucu B'nin verilerine benziyorsa
"test.tbl1", sunucu A'nın kopyasından farklıdır, araç bu tabloyu
sunucular C ve D.
--set-vars
tür: Dizi
MySQL değişkenlerini bu virgülle ayrılmış "değişken=değer" çiftleri listesinde ayarlayın.
Varsayılan olarak, araç şunları ayarlar:
bekleme_zaman aşımı=10000
Komut satırında belirtilen değişkenler bu varsayılanları geçersiz kılar. Örneğin,
"--set-vars wait_timeout=500" belirtmek, 10000 varsayılan değerini geçersiz kılar.
Araç bir uyarı yazdırır ve bir değişken ayarlanamıyorsa devam eder.
--priz
kısa formlar; tür: dize
Bağlantı için kullanılacak yuva dosyası.
--master-senkronizasyon
DSN'yi bir bağımlı olarak kabul edin ve onu efendisiyle eşitleyin.
Belirttiğiniz sunucuya köle olarak davranın. "SLAVE DURUMUNU GÖSTER" seçeneğini inceleyin,
sunucunun efendisi ve efendiye kaynak, köleye de sunucu gibi davranın.
hedef. Master üzerinde değişiklik yapılmasına neden olur. "--wait" değerini 60 olarak ayarlar
varsayılan olarak, "--lock" öğesini varsayılan olarak 1 olarak ayarlar ve varsayılan olarak "--[no]işlem" öğesini devre dışı bırakır.
Bu seçeneğin davranışını değiştiren "--replicate" bölümüne de bakın.
--tablolar
kısa biçim: -t; tür: karma
Yalnızca bu virgülle ayrılmış tablo listesini senkronize edin.
Tablo adları, veritabanı adıyla nitelenebilir.
--zaman aşımı-tamam
"--wait" başarısız olursa devam edin.
"--wait" seçeneğini belirlerseniz ve bağımlı, daha önce master'ın konumuna yetişemezse
bekleme zaman aşımına uğrar, varsayılan davranış iptal etmektir. Bu seçenek, aracın
neyse gidiyor. uyarı: arasında tutarlı bir karşılaştırma elde etmeye çalışıyorsanız
iki sunucu, muhtemelen bir zaman aşımından sonra devam etmek istemezsiniz.
--[hayır]işlem
"TABLOLARI KİLİTLE" yerine işlemleri kullanın.
İşlemleri başlatma ve gerçekleştirmenin ayrıntı düzeyi "--lock" tarafından kontrol edilir.
Bu, varsayılan olarak etkindir, ancak "--lock" varsayılan olarak devre dışı bırakıldığından,
etkisi.
Kilitlemeyi etkinleştiren seçeneklerin çoğu, işlemleri varsayılan olarak devre dışı bırakır, yani isterseniz
işlemsel kilitlemeyi kullanmak için ("PAYLAŞIM MODUNDA KİLİTLE" ve "GÜNCELLEME İÇİN" aracılığıyla,
"--transaction" ifadesini açıkça belirtin.
Açıkça "--transaction" belirtmezseniz, "pt-table-sync" bir per-
tablo bazında işlemler veya masa kilitleri kullanılıp kullanılmayacağı. Şu anda kullanıyor
InnoDB tablolarındaki işlemler ve diğer tüm tablo kilitleri.
"--no-transaction" belirtilirse, "pt-table-sync" şu adresteki işlemleri kullanmaz:
tümü (InnoDB tabloları için bile değil) ve kilitleme "--lock" ile kontrol edilir.
Açıkça veya dolaylı olarak etkinleştirildiğinde, işlem yalıtım düzeyi ayarlanır
"TEKRARLANABİLİR OKUMA" ve işlemler "TUTARLI SNAPSHOT İLE" başlatılır.
--kırpmak
"BIT_XOR" ve "ACCUM" modlarında "TRIM()" "VARCHAR" sütunları. MySQL'i karşılaştırırken yardımcı olur
4.1 ila >= 5.0.
Bu, MySQL arasındaki sondaki boşluk farklarını umursamadığınızda kullanışlıdır.
sondaki boşlukların işlenmesinde farklılık gösteren sürümler. MySQL 5.0 ve sonraki tüm
"VARCHAR" da sondaki boşlukları korurken, önceki sürümler bunları kaldırır.
--[no]benzersiz kontroller
varsayılan: evet
Benzersiz anahtar kontrollerini etkinleştirin ("SET UNIQUE_CHECKS=1").
"--unique-checks" belirtilmediğinde "UNIQUE_CHECKS=0" AYARLANIR.
--kullanıcı
kısa biçim: -u; tür: dize
Mevcut kullanıcı değilse oturum açmak için kullanıcı.
--ayrıntılı
kısa biçim: -v; kümülatif: evet
Eşitleme işlemlerinin sonuçlarını yazdırın.
Çıktı hakkında daha fazla ayrıntı için "ÇIKTI" bölümüne bakın.
--versiyon
Sürümü göster ve çık.
--[hayır]sürüm kontrolü
varsayılan: evet
Percona Toolkit, MySQL ve diğer programların en son sürümünü kontrol edin.
Bu, standart bir "güncellemeleri otomatik olarak kontrol et" özelliğidir ve iki ek
özellikleri. İlk olarak araç, yerel sistemdeki diğer programların sürümlerini şurada kontrol eder:
kendi versiyonuna ek olarak. Örneğin, her MySQL sunucusunun sürümünü kontrol eder.
Perl'e ve Perl modülü DBD::mysql'ye bağlanır. İkincisi, kontrol eder ve uyarır
bilinen sorunları olan sürümler hakkında. Örneğin, MySQL 5.5.25'te kritik bir hata vardı ve
5.5.25a olarak yeniden yayınlandı.
Tüm güncellemeler veya bilinen sorunlar, aracın normal çıktısından önce STDOUT'a yazdırılır.
Bu özellik asla aletin normal çalışmasına müdahale etmemelidir.
Daha fazla bilgi için ziyaret edin .
--Bekle
kısa biçim: -w; tip: zaman
Kölelerin efendilerine yetişmesi için ne kadar bekleyecekler.
Karşılaştırmadan önce, master'ın slave'in replikasyona yetişmesini beklemesini sağlayın.
tablolar. Değer, zaman aşımına uğramadan önce beklenecek saniye sayısıdır (ayrıca bkz.
"--zaman aşımı-tamam"). Varsayılan olarak "--lock" öğesini 1'e ve "--[no]işlem" öğesini 0'a ayarlar. Eğer sen
aşağıdaki gibi bir hata görün,
MASTER_POS_WAIT -1 döndürdü
Bu, zaman aşımının aşıldığı ve bunu artırmanız gerektiği anlamına gelir.
Bu seçeneğin varsayılan değeri diğer seçeneklerden etkilenir. Değerin ne olduğunu görmek için
aslında, "--help" ile çalıştırın.
Beklemeyi tamamen devre dışı bırakmak için (kilitler hariç), "--wait" 0 belirtin. Bu, aşağıdaki durumlarda yardımcı olur:
köle, senkronize edilmeyen tablolarda gecikiyor.
--nerede
tür: dize
Tablonun bir bölümüyle eşitlemeyi kısıtlamak için "WHERE" yan tümcesi.
--[no]sıfır yığın
varsayılan: evet
Sıfır veya sıfır eşdeğerli değerlere sahip satırlar için bir yığın ekleyin. Sadece ne zaman bir etkisi vardır
"--chunk-size" belirtilir. Sıfır yığının amacı, bir
ilkinin boyutunu dengesizleştirecek potansiyel olarak çok sayıda sıfır değeri
parça. Örneğin, işaretsiz bir kutuya çok sayıda negatif sayı eklendiyse
tamsayı sütununun sıfır olarak saklanmasına neden olur, ardından bu sıfır değerleri yakalanır
ilk yığın ve sıfır olmayan tüm değerleri yerine sıfır yığın tarafından.
DSN SEÇENEKLER
Bu DSN seçenekleri, bir DSN oluşturmak için kullanılır. Her seçenek "seçenek=değer" şeklinde verilir.
Seçenekler büyük/küçük harfe duyarlıdır, dolayısıyla P ve p aynı seçenek değildir. olamaz
boşluk "=" işaretinden önce veya sonra ve değer boşluk içeriyorsa alıntı yapılmalıdır.
DSN seçenekleri virgülle ayrılmıştır. Tüm ayrıntılar için percona-toolkit kılavuz sayfasına bakın.
Bir
dsn: karakter kümesi; kopya: evet
Varsayılan karakter seti.
· NS
dsn: veritabanı; kopya: evet
Senkronize edilecek tabloyu içeren veritabanı.
F
dsn: mysql_read_default_file; kopya: evet
Yalnızca verilen dosyadan varsayılan seçenekleri oku
· H
dsn: ana bilgisayar; kopya: evet
Ana bilgisayara bağlanın.
· P
dsn: şifre; kopya: evet
Bağlanırken kullanılacak parola. Parola virgül içeriyorsa, bunlar kaçılmalıdır
ters eğik çizgi ile: "sınav\,ple"
· P
dsn: bağlantı noktası; kopya: evet
Bağlantı için kullanılacak bağlantı noktası numarası.
· S
dsn: mysql_socket; kopya: evet
Bağlantı için kullanılacak yuva dosyası.
· T
kopya: evet
Senkronize edilecek tablo.
· sen
dsn: kullanıcı; kopya: evet
Mevcut kullanıcı değilse oturum açmak için kullanıcı.
ÇEVRE
"PTDEBUG" ortam değişkeni, STDERR'ye ayrıntılı hata ayıklama çıktısı sağlar. Etkinleştirmek
hata ayıklama ve tüm çıktıları bir dosyaya yakalama, aracı aşağıdaki gibi çalıştırın:
PTDEBUG=1 pt-table-sync ... > DOSYA 2>&1
Dikkatli olun: Hata ayıklama çıktısı hacimlidir ve birkaç megabayt çıktı üretebilir.
SİSTEM ŞARTLAR
Perl, DBI, DBD::mysql ve herhangi bir programa yüklenmesi gereken bazı çekirdek paketlere ihtiyacınız var.
Perl'in oldukça yeni versiyonu.
onworks.net hizmetlerini kullanarak pt-table-syncp'i çevrimiçi kullanın