Самы хуткі спосаб скапіяваць вялікую табліцу MySQL?

Які самы лепшы спосаб скапіяваць вялікую табліцу MySQL ў тэрмінах хуткасць і памяці выкарыстоўваць?

Option 1. Using PHP, select X rows from old table and insert them into the new table. Proceed to next iteration of select/insert until all entries are copied over.

Option 2. Use MySQL INSERT INTO ... SELECT without row limits.

Option 3. Use MySQL INSERT INTO ... SELECT with a limited number of rows copied over per run.

EDIT: I am not going to use mysqldump. The purpose of my question is to find the best way to write a database conversion program. Some tables have changed, some have not. I need to automate the entire copy over/conversion procedure without worrying about manually dumping any tables. So it would be helpful if you could answer which of the above options is best.

4

6 адказы

Існуе праграма, якая была напісана спецыяльна для гэтай задачы называецца туздЫшпр ,

7
дададзена
Гэта не працуе для мяне. См праўкі вышэй.
дададзена аўтар akanevsky, крыніца
дапамагае мне! Дзякуй!
дададзена аўтар Colleen, крыніца
Ды ў Linux тэрмінале: туздЫшпр -uUSER_NAME -p DB_NAME> /the/path/to/save/test.sql. Гэта стварае дамп вашай БД у SQL файл, а затым пры аднаўленні стварыць пусты БД і ў Linux тэрмінале: MySQL -uUSER_NAME -p DB_NAME
дададзена аўтар We0, крыніца

Off трох варыянтаў, пералічаных вышэй.

Я б выбраў другі варыянт , калі У вас ёсць унікальная абмежаванне па меншай меры адзін слупок, таму не стварае радкі, якія паўтараюцца, калі сцэнар павінен быць запушчаны некалькі разоў, каб выканаць сваю задачу ў выпадку сервера тайм-аўту.

У адваротным выпадку ваш трэці варыянт быў бы шлях, у той час як уручную, беручы пад увагу любы сервер таймаўту, каб вызначыць вашы ўстаўкі абярыце межы.

2
дададзена
Просьба ўдакладніць, чаму гэта патрабуе абмежаванняў унікальнасці? Як гэта будзе ствараць радкі, якія паўтараюцца, калі я ўсё, што я раблю гэта пытанне адзін INSERT ... SELECT запыт?
дададзена аўтар akanevsky, крыніца
Я толькі адрэдагаваў мой адказ падрабязна гэта няшмат. Я павінен быў перанесьці БД SQL ў фармат тузды ў апошні час. Я вываду кожнага радка ў табліцы SQL ў якасці запыту ўстаўкі ў файл, а затым выкарыстоўваецца PHP у цыкле праз файл і ўставіць у табліцу MySQL, гэтая табліца была 1 мільён плюс радкоў, і патрабуецца некалькі разоў, каб быць пабег для ўсіх радкоў у быць устаўлены ў табліцу прызначэння. Я выявіў, што табліцы з унікальнымі абмежаваннямі, я мог бы проста запусціць файл некалькі разоў, пакуль не будуць дададзеныя ўсе радкі. У выпадку, калі табліца не мае абмежаванні кожны раз, калі файл выбегла гэта будзе ўстаўляць радкі з самага пачатку (натуральна).
дададзена аўтар varubi, крыніца

Калі гэта магчыма, самы хуткі спосаб будзе браць базы дадзеных у аўтаномным рэжыме і проста скапіяваць файлы дадзеных на дыску.

З гэтай справы ёсць некаторыя патрабаванні:

  • Вы можаце спыніць базу дадзеных падчас капіявання.
  • Вы карыстаецеся рухавік захоўвання, які захоўвае кожную табліцу ў асобных файлах, MyISAM гэта робіць.
  • ў вас ёсць прывілеяваны доступ да сервера базы дадзеных (каранёвай імя або аналагічны)

Ах, я бачу, як вы адрэдагавалі свой пост, то я думаю, што гэта DBA-з-пекла падыход не варыянт ... але ўсё роўна, гэта хутка!

1
дададзена
Я не зацікаўлены ў капіяванні па ўсёй базе даных. Глядзіце мой пост вышэй.
дададзена аўтар akanevsky, крыніца
Вы можаце скапіяваць адну табліцу базы дадзеных, а не ўсё гэта, выкарыстоўваючы гэты метад. А на самай справе вы можаце зрабіць гэта ў той час як MySQL працуе. Усё, што вам трэба зрабіць, гэта заблакаваць табліцу, прамыйце яго, а затым скапіяваць файлы (TABLE.frm, TABLE.MYI і TABLE.MYD) да новых файлаў, выкарыстоўваючы схему паслядоўнай назвах (NEW_TABLE.frm, NEW_TABLE.MYI і NEW_TABLE .MYD).
дададзена аўтар Chris Seline, крыніца
капіраванне файлаў дадзеных не гарантуецца без праблем, нават калі база дадзеных ўніз.
дададзена аўтар Gung Foo, крыніца
Не, гэта не праблема бясплатна, гэта патрабуе, каб вы ведаеце, што вы робіце і залежнасці дадзеных. Але .. гэта хутка!
дададзена аўтар mogul, крыніца

<�Моцны> Выкарыстоўвайце захоўваемая працэдура

Варыянт два павінен быць хуткім, але гэта будзе магутным доўга здзелкай. Вы павінны глядзець у стварэнні захоўваемай працэдуры робіць копію. Такім чынам, вы маглі б разгрузіць частка разборы даных/апрацоўкі ад рухавіка MySQL.

1
дададзена

<�Код> загрузкі дадзеных у MySQL запыт хутчэй, чым што-небудзь яшчэ, аднак ён патрабуе экспарт кожнай табліцы ў файл CSV.

Звярніце асаблівую ўвагу, каб пазбегнуць знакаў і які прадстаўляе NULL значэння/двайковыя дадзеныя/і г.д. ў CSV, каб пазбегнуць страты дадзеных.

0
дададзена

Лепшы спосаб я знайшоў да гэтага часу ствараюць файлы як файлы дамп (.txt), выкарыстоўваючы выходной_файл да тэксту, то з дапамогай входной_файла ў MySQL, каб атрымаць тыя ж дадзеныя ў базу дадзеных

0
дададзена