ඔබ විශේෂිත වගු (ය) mysqldump කරන්නේ කෙසේද?


427

ඉතිරි ඩීබී වගු ඇතුළත් නොකර නිශ්චිත වගුවක් හෝ වගු කට්ටලයක් දමන්නේ කෙසේද?


Answers:


577

ඔබ mydb වෙතින් t1, t2 සහ t3 වගු දමන්නේ නම්

mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql

ඔබට mydb හි මේස ටොන් ගණනක් තිබේ නම් සහ ඔබට t1, t2 සහ t3 හැර අනෙක් සියල්ල ඉවත දැමීමට අවශ්‍ය නම්, මෙය කරන්න:

DBTODUMP=mydb
SQL="SET group_concat_max_len = 10240;"
SQL="${SQL} SELECT GROUP_CONCAT(table_name separator ' ')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='${DBTODUMP}'"
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
TBLIST=`mysql -u... -p... -AN -e"${SQL}"`
mysqldump -u... -p... ${DBTODUMP} ${TBLIST} > mydb_tables.sql

එය උත්සාහ කර බලන්න !!!

UPDATE 2014-03-06 10:15 EST

OryRoryDonohue මට පෙන්වා දුන්නේ GROUP_CONCAT ශ්‍රිතයට එහි උපරිම දිග දිගු කළ යුතු බවයි. සැසි විචල්‍යය group_concat_max_len මගේ පිළිතුරට උපරිම 10K දිගකින් එකතු කළෙමි . ස්තූතියි, oryRoryDonohue.


44
වගු කිහිපයක් බැහැර කිරීම සඳහා ඔබට භාවිතා කළ හැකිය --ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3 etc.
codewaggle

@codecowboy, ඔබට වෙනස් කළ හැකිය SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"කිරීමට SQL="${SQL} AND table_name NOT LIKE 'foo\_%'". මම එය අත්හදා බැලූ අතර එය ක්‍රියාත්මක වේ. 'Foo' අඩංගු සියලුම වගු ඔවුන්ගේ නම් වලින් ඕනෑම තැනකට ලබා ගැනීම සඳහා ඔබට තත්වය '% foo%' ලෙස වෙනස් කළ හැකිය ('ආහාර', 'මෝඩයා' ආදිය).
බට්ල් බට්කස්

1
මෙහි වගු බැහැර කිරීමේ ප්‍රවේශය අතිරික්තයක් සහ අතිරික්තයක් --ignore-tableතර්කයේ පැවැත්මට අනුව නොවේද? එසේ නම්, ඔබේ පිටපත පිළිතුරෙන් ඉවත් කර --ignore-tableඒ වෙනුවට නිර්දේශ කිරීම වඩා හොඳ නොවේ ද ?
මාර්ක් අමරි

odecodewaggle Illegal use of option --ignore-table=<database>.<table>මා විසින් වගුව සඳහන් නොකරන්නේ නම් එය දෝෂය ලබා දෙයි schemaname.tablename.
ඩබ්ලිව්.ඒ.එෆ්

සිසිල් දේවල්, කිසියම් හේතුවක් නිසා SQL විචල්‍යය බහු රේඛාවක් නොවේද?
sdkks

75

RolandoMySQLDBA විසින් පිළිතුර පුළුල් කිරීම සඳහා සටහනක් .

ඔහු ඇතුළත් කළ පිටපත ( and table_name in) හෝ ( and table_name NOT in) වගු ලැයිස්තුවක් ඇතුළත් කිරීම සඳහා හොඳ ප්‍රවේශයකි .

ඔබට වගු එකක් හෝ දෙකක් බැහැර කිරීමට අවශ්‍ය නම්, ඔබට --ignore-tableවිකල්පය සමඟ ඒවා තනි තනිව බැහැර කළ හැකිය:

mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql

මෙය හොඳම පිළිතුරයි!
unbreak

31

ඔබට වගු කිහිපයකට වඩා ඇති විට එය මෙවැනි දෙයක් ධාවනය කිරීම වඩා හොඳය:

mysql databasename -u [user] -p[password] -e 'show tables like "table_name_%"' 
       | grep -v Tables_in 
       | xargs mysqldump [databasename] -u [root] -p [password] > [target_file]

නැත්නම් මේ වගේ දෙයක් ගැන සිතන්න:

mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';" 
       | mysql -u[user] -p[password] databasename 
       | sed '/Tables_in/d'` > [target_file]

එම විධානයන් එක් පේළියක පමණක් ටයිප් කළ යුතු බව මතක තබා ගන්න.


11

පහත විධානය භාවිතා කර ඔබට එය කළ හැකිය:

mysqldump -uusername -ppassword dbname \
  --ignore-table=schema.tablename1    \
  --ignore-table=schema.tablename2    \
  --ignore-table=schema.tablename3 > mysqldump.sql

5
--ignore-table යනු සමහර වගු mysqldump වෙතින් බැහැර කිරීම මිස ඇතුළත් කිරීම නොවේ. :)
ප්‍රවීන් ප්‍රසන්නන්

3
එහෙත් බැහැර කළ යුතු සියලු වගු ලැයිස්තුගත කළ හැකි අතර එය ඉතිරිව ඇති ඒවා පමණක් ඉවත දමනු ඇත :-)
කොලින් හාර්ට්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.