Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I delete a table from a mysqldump

How do I delete the output for one big table inside a mysqldump with lots of tables in it?

I have a dump of a database that is 6 GB large, but 90% of it is only one logging-table "cache_entries", that I don’t need anymore inside my backup.

How can I easily remove that bit inside the dump, that describes the large logging-table?

I found this: http://gtowey.blogspot.de/2009/11/restore-single-table-from-mysqldump.html

Example:

grep -n 'Table structure' dump.sql

and then for example:

sed -n '40,61 p' dump.sql > t2.sql

But how can I change that for my needs?

like image 592
rubo77 Avatar asked Mar 27 '12 19:03

rubo77


People also ask

How do I delete a table in MySQL?

To permanently remove a table, enter the following statement within the MySQL shell: DROP TABLE table1; Replace table1 with the name of the table you want to delete. The output confirms that the table has been removed.

How do I dump just one table in MySQL?

mysqldump includes all the tables of the database by default. In order to dump only a specific set of tables using mysqldump , you need to specify the database name followed by the name of the tables you want to include in the dump. After running the command from the example above, the output file my_backup.

How do I purge old data in MySQL?

Learn MySQL from scratch for Data Science and Analytics To delete all rows older than 30 days, you need to use the DELETE with INTERVAL. Use < now() i.e. less than operator to get all the records before the current date.

Can I restore a single table from a full MySQL Mysqldump file?

Use the sed command on your bash shell to separate the data of the table that you want to restore. For example, if we want to restore only the “film_actor” table to “sakila” database we execute the script below.


2 Answers

You could use 'n,n d' to remove certain lines. I guess in your case you do want to have the table in question, but don't want the data?

Change the grep command to include "Dumping data for table":

grep -n 'Table structure\|Dumping data for table' dump.sql 
19:-- Table structure for table `t1`
37:-- Dumping data for table `t1`
47:-- Table structure for table `t2`
66:-- Dumping data for table `t2`
76:-- Table structure for table `t3`
96:-- Dumping data for table `t3`

Now, if you don't want the data for t2, you could use:

sed '66,75 d' dump.sql > cleandump.sql
like image 177
HighKing Avatar answered Oct 07 '22 04:10

HighKing


I found this bash script, that splits a dump of one database into separate filed for each table, using csplit (that splits a file into sections determined by context lines):

#!/bin/bash

####
# Split MySQL dump SQL file into one file per table
# based on http://blog.tty.nl/2011/12/28/splitting-a-database-dump
####

if [ $# -ne 1 ] ; then
  echo "USAGE $0 DUMP_FILE"
fi

csplit -s -ftable $1 "/-- Table structure for table/" {*}
mv table00 head

for FILE in `ls -1 table*`; do
      NAME=`head -n1 $FILE | cut -d$'\x60' -f2`
      cat head $FILE > "$NAME.sql"
done

rm head table*

Source: gist.github.com/1608062

and a bit enhanced: How do I split the output from mysqldump into smaller files?

once, you have separate files for each table, you can delete the unwanted tables and glue them together if needed with

cat table* >glued_sqldump.sql

like image 27
rubo77 Avatar answered Oct 07 '22 05:10

rubo77