ฉันจะดัมพ์ตารางเฉพาะหรือชุดของตารางโดยไม่รวมตาราง db ที่เหลือได้อย่างไร?
ฉันจะดัมพ์ตารางเฉพาะหรือชุดของตารางโดยไม่รวมตาราง db ที่เหลือได้อย่างไร?
คำตอบ:
หากคุณกำลังดัมพ์ตาราง t1, t2 และ t3 จาก mydb
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
ให้มันลอง !!!
@RoryDonohueชี้ให้ฉันเห็นว่าฟังก์ชั่นGROUP_CONCATต้องมีการขยายความยาวสูงสุด ฉันเพิ่มตัวแปรเซสชันgroup_concat_max_lenในคำตอบของฉันด้วยความยาวสูงสุด 10K ขอบคุณ @RoryDonohue
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
SQL="${SQL} AND table_name NOT LIKE 'foo\_%'"
ฉันเพิ่งทดสอบและใช้งานได้ คุณสามารถเปลี่ยนเงื่อนไขเป็น '% foo%' เพื่อรับตารางทั้งหมดที่มี 'foo' ที่ใดก็ได้ในชื่อของพวกเขา (รวมถึง 'อาหาร', 'คนโง่' ฯลฯ )
--ignore-table
อาร์กิวเมนต์? และถ้าเป็นเช่นนั้นจะดีกว่าไหมที่จะทำให้สคริปของคุณเสียจากคำตอบและเพียงแนะนำ--ignore-table
แทน?
Illegal use of option --ignore-table=<database>.<table>
schemaname.tablename
บันทึกการขยายตัวในคำตอบโดย 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
เมื่อคุณมีมากกว่าสองสามตารางมันจะทำงานได้ดีกว่าดังนี้:
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]
โปรดจำไว้ว่าคำสั่งเหล่านั้นจะต้องพิมพ์ในหนึ่งบรรทัดเท่านั้น
คุณสามารถทำได้โดยใช้คำสั่งด้านล่าง:
mysqldump -uusername -ppassword dbname \
--ignore-table=schema.tablename1 \
--ignore-table=schema.tablename2 \
--ignore-table=schema.tablename3 > mysqldump.sql