it-swarm-tr.com

MySQLDump'ı Tabloları Kilitlemeden Çalıştır

Canlı bir üretim veritabanını yerel kalkınma veritabanıma kopyalamak istiyorum. Üretim veritabanını kilitlemeden bunu yapmanın bir yolu var mı?

Şu anda kullanıyorum:

mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1

Ancak her masayı çalıştırırken kilitliyor.

400
Greg

--lock-tables=false seçeneği çalışıyor mu?

man sayfasına göre InnoDB tablolarını atıyorsanız, --single-transaction seçeneğini kullanabilirsiniz:

--lock-tables, -l

Lock all tables before dumping them. The tables are locked with READ
LOCAL to allow concurrent inserts in the case of MyISAM tables. For
transactional tables such as InnoDB and BDB, --single-transaction is
a much better option, because it does not need to lock the tables at
all.

İnnodb DB için:

mysqldump --single-transaction=TRUE -u username -p DB
568
John Millikin

Bu çok geç yaşta, ancak konuyu arayan herkes için iyi. İnnoDB değilseniz ve dump yaparken kilitleme konusunda endişelenmiyorsanız bu seçeneği kullanın:

--lock-tables=false
278
Warren Krewenki

Cevap, hangi depolama motorunu kullandığınıza bağlı olarak değişir. İdeal senaryo InnoDB kullanıyorsanız. Bu durumda, dökümü başladığında size veritabanının tutarlı bir görüntüsünü verecek olan --single-transaction bayrağını kullanabilirsiniz.

45
dvorak

--skip-add-locks bana yardımcı oldu

31
Azamat Tokhtaev

Büyük tabloları boşaltmak için --single işlem seçeneğini --quick ile birleştirmelisiniz.

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction

13
dgitman

Dürüst olmak gerekirse, bunun için çoğaltmayı ayarlarım, tabloları kilitlemezseniz, çöplükten tutarsız veriler alırsınız.

Dökümü daha uzun zaman alırsa, zaten terk edilmiş olan tablolar, sadece dökülmek üzere olan bazı tablolarla birlikte değişmiş olabilir.

Bu yüzden ya tabloları kilitleyin ya da çoğaltmayı kullanın.

9
michal kralik

InnoDB tabloları için - tek işlem kullanın

"BEGIN'in herhangi bir uygulamayı engellemeden yayınlandığı tarihte, veritabanının tutarlı durumunu attı" MySQL DOCS

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction

8
Lex

Bu, orijinal cevabına olduğu gibi geç kaldığını söyleyen adamla kıyaslandığında geç kaldı, ancak benim durumumda (Windows 7'de WAMP aracılığıyla MySQL) kullanmak zorundaydım:

--skip-lock-tables
6
dtbarne
    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db
5
naveen_sfx

https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables nedeniyle

--Opt (varsayılan olarak etkindir) gibi bazı seçenekler otomatik olarak --lock-table'ları etkinleştirir. Bunu geçersiz kılmak istiyorsanız, seçenek listesinin sonunda --skip-lock-tabloları kullanın.

1
Dmytro Gierman

MySQL Workbench'i kullanırken, Veri Aktarımı'nda Gelişmiş Seçenekler'e tıklayın ve "kilit masaları" seçeneklerinin işaretini kaldırın.

 enter image description here

0
Samuel Diogo

Bugün bile aynı sorunla karşılaştım ancak komut satırına erişimim olmadı. Böylece sql dosyasını Not Defteri düzenleyicisinde açtım ve satırın altındaki tablolardan kaldırdım 

LOCK TABLES `yourtable name` WRITE;

daha sonra geliştirme ortamıma aktardım.

0
iCoders

Başka bir geç cevap:

Sunucu veritabanının (linux ortamında) sıcak bir kopyasını yapmaya çalışıyorsanız ve tüm tabloların veritabanı motoru MyISAM'dir, siz gerekir use mysqlhotcopy.

Belgelere göre:

Bir veritabanı yapmak için FLUSH TABLOLARI, KİLİT TABLOLARI ve cp veya scp kullanır. Yedekleme. Tek bir veritabanını veya veritabanını yedeklemek için hızlı bir yoldur. tabloları, ancak sadece veritabanındaki aynı makinede çalıştırılabilir. dizinler bulunur. MySQL, yalnızca yedekleme için çalışır. MyISAM ve ARCHIVE tabloları.

LOCK TABLES süresi, sunucunun MySQL dosyalarını kopyalayabildiği süreye bağlıdır (bu bir dökümü yapmaz).

0
Andrés Morales