it-swarm-eu.dev

Spusťte MySQLDump bez zamykání tabulek

Chci zkopírovat živou produkční databázi do své databáze místního rozvoje. Existuje způsob, jak toho dosáhnout, aniž by byla uzamčena výrobní databáze?

Momentálně používám:

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

Ale blokuje každou tabulku, jak běží.

400
Greg

Pracuje volba --lock-tables=false?

Podle stránky man , pokud skládáte tabulky InnoDB, můžete použít volbu --single-transaction:

--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.

Pro innodb DB:

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

To je věk příliš pozdě, ale dobré pro každého, kdo hledá téma. Pokud nejste innoDB, a nemusíte se obávat, že zamknete, když skládáte, stačí použít tuto možnost:

--lock-tables=false
278
Warren Krewenki

Odpověď se liší v závislosti na tom, jaký úložný stroj používáte. Ideální scénář je, pokud používáte InnoDB. V tomto případě můžete použít příznak --single-transaction, který vám poskytne koherentní snímek databáze v době, kdy začíná výpis.

45
dvorak

--skip-add-locks mi pomohlo

31
Azamat Tokhtaev

Chcete-li vypsat velké tabulky, měli byste kombinovat volbu --single-transakce s --quick.

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

13
dgitman

Upřímně řečeno, já bych nastavit replikaci pro to, jako kdyby nemáte zamknout tabulky dostanete nekonzistentní data z výpisu.

Pokud výpis trvá déle, tabulky, které již byly dumpingové, se mohly změnit spolu s tabulkou, která má být pouze vyřazena.

Takže buď uzamkněte tabulky nebo použijte replikaci.

9
michal kralik

Pro InnoDB tabulky použijte --single-transakci

"vypíše konzistentní stav databáze v době, kdy byl BEGIN vydán bez blokování aplikací" MySQL DOCS

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

8
Lex

To je asi tak pozdě ve srovnání s chlapem, který řekl, že byl pozdě, když byl na původní odpověď, ale v mém případě (MySQL přes WAMP na Windows 7) jsem musel použít:

--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

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

Některé volby, jako například --opt (které je ve výchozím nastavení povoleno), automaticky povolují --lock-tables. Pokud chcete toto přepsat, použijte --skip-lock-tables na konci seznamu možností.

1
Dmytro Gierman

Pokud používáte MySQL Workbench, klepněte na položku Data Export (Export dat) na položku Advanced Options (Upřesnit možnosti) a zrušte zaškrtnutí políčka „lock-tables“.

 enter image description here

0
Samuel Diogo

Dnes I já jsem čelil stejnému problému, ale neměl jsem přístup k příkazové řádce.So jsem otevřel soubor sql v editoru Poznámkový blok a odstraněny pod řádek z tabulek 

LOCK TABLES `yourtable name` WRITE;

pak jsem importoval do mého vývojového prostředí. Pracuje v pořádku. doufám, že to někomu pomůže

0
iCoders

Další pozdní odpověď:

Pokud se pokoušíte vytvořit horkou kopii serverové databáze (v prostředí Linuxu) a databázový stroj všech tabulek je MyISAM vy by use mysqlhotcopy.

Podle dokumentace:

Používá FLUSH TABLES, LOCK TABLES a cp nebo scp k vytvoření zálohy databáze . Je to rychlý způsob, jak vytvořit zálohu databáze nebo jednotlivých tabulek , Ale lze ji spustit pouze na stejném počítači, kde jsou umístěny adresáře databáze . mysqlhotcopy funguje pouze pro zálohování tabulek MyISAM a ARCHIVE.

Doba LOCK TABLES závisí na čase, kdy může server kopírovat soubory MySQL (nevytváří výpis).

0
Andrés Morales