The First Cry of Atom Today is the first day of the rest of my life.

Conditional mysqldump

mysqldump is a useful tool for migration of database. This tool enables us to move a data into another database through human readable format, SQL. But as default mysqldump dumps all records in all tables in database. I wanted to use mysqldump as a tool to move only specified record to another table. We can assume a situation when a data in production environment to development envinment or vice versa. So how can we achieve this with mysqldump.

I found a several options of mysqldump to do that. You can type command like below when you want to dump all.

$ mysqldump <database name> > dump.sql

I’ll introduce some way to restrict dump records with given conditions.

Dump specified table

If you want to dump only specified table records, you can do this.

$ mysql <database name> <table name> > dump.sql

dump.sql includes all records in a table specified as <table name>.

Dump records specified by WHERE clause

If you want to restrict dumped records with given conditions like you use in WHERE clause, you can do this.

$ mysqldump <database name> <table name> \
  --where="id like '12345'" > dump.sql

So dump.sql only includes a record whose id is ‘12345’. One thing to note here is you can not use ‘=’ in --where option, I don’t know the reason. So if you want to match column value exactly, it’s better to use like.

Not to create table every time.

When you move records one by one with above queries, you might not want to recreate table every time because records inserted before are also deleted. Although this is default behaviour of mysqldump there is an option not to DROP TABLE and recreate table every time.

$ mysqldump <database name> <table name> \
  --where="id like '12345'" --no-create-info

By using --no-create-info, you can omit DROP TABLE and CREATE TABLE queries in your dump file.

After all, you can move records one by one with mysqldump. What make me happy in this time is mysqldump can also dump binary type column correctly. This is biggest reason why I tried to use mysqldump to move records one by one. So if you want to move a record including binary type value such as blob, let’s try it.

Thank you.