Question

I am facing a problem for a task I have to do at work. I have a MySQL database which holds the information of several clients of my company and I have to create a backup/restore procedure to backup and restore such information for any single client. To clarify, if my client A is losing his data, I have to be able to recover such data being sure I am not modifying the data of client B, C, ... I am not a DB administrator, so I don't know if I can do this using standard mysql tools (such as mysqldump) or any other backup tools (such as Percona Xtrabackup).

To backup, my research (and my intuition) led my to this possibile solution:

  1. create the restore insert statement using the insert-select syntax (http://dev.mysql.com/doc/refman/5.1/en/insert-select.html);
  2. save this inserts into a sql file, either in proper order or allowing this script to temporarily disable the foreign key checks to meet foreign keys' constraint;
  3. of course, I do this for all my clients on a daily base, using a file for each client (and day).

Then, in the case I have to restore the data for a specific client:

  1. I delete all his data left;
  2. I restore the correct data using his sql file I created during the backup.

This way I believe I may recover the right data of client A without touching the data of client B. Is my solution eventually working? Is there any better way to achieve the same result? Or do you need more information about my problem?

Please, forgive me if this question is not well-formed, but I am new here and this is my first question so I may be unprecise...thanks anyway for the help.

Note: we will also backup the entire database with mysqldump.

Was it helpful?

Solution

You can use the --where parameter, you could provide a condition like *client_id=N* . Of course I am making an assumption since you don't provide any information on your schema.

If you have a Star schema , then you could probably write a small script that backups all lookup tables (considering they are adequately small) by using this parameter --tables and use the --where condition for your client data table. For additional performance, perhaps you could partition the table by the client_id.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top