Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Jan 2006 09:50:03 -0500
From:      "N.J. Thomas" <njt@ayvali.org>
To:        Hans Nieser <h.nieser@xs4all.nl>
Cc:        freebsd-questions@freebsd.org
Subject:   mysql backups (was Re: Remote backups, reading from and writing to the same file)
Message-ID:  <20060113145003.GJ2451@ayvali.org>
In-Reply-To: <43C6E55A.8020500@xs4all.nl>
References:  <43C6E55A.8020500@xs4all.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
* Hans Nieser <h.nieser@xs4all.nl> [2006-01-13 00:25:14 +0100]:
> Among the things being backed up are my mysql database tables. This
> made me wonder wether the backup could possibly get borked when mysql
> writes to any of the mysql tables while tar is reading from them.

Yes. While MySQL is writing to the the database, it will put the files
on the disk in an inconsistent state. If you happen to copy those files
while they are in that state, MySQL will see a corrupted database.

> Do I really have to use MySQL's tools to do a proper SQL dump or stop
> MySQL (and any other services that may write to files included in my
> backup) before doing a backup? Do any of the more involved
> remote-backup solutions have ways of working around this? Or is it
> simply not possible to write to a file while it is being read?

Here are some methods that people use that I am aware of:

    - Turn off the MySQL db the entire time you are backing up. No new
      software/hardware needed, but you incur db downtime.

    - Use replication: have a slave that is a copy of the master,
      whenever you want to back up, break the replication for a little
      while, copy the slave, and then resume the replication. No
      downtime, but you will need another box for this, so you have the
      cost of new hardware.

    - Use OS snapshotting. On Linux systems with LVM, it is possible
      to take an exact "snapshot" of the filesystem at any point in time
      without too much disk usage (assuming the lifetime that the
      snapshot exists is relatively short).

      So what you do in this case is write a script that tells MySQL to
      write lock the entire database and flush the cache, this takes a
      second or two and will bring the db files on disk to a consistent
      state. You then take a snapshot of the filesystem, and immediately
      resume MySQL when you have done that. Now, you just backup off of
      the snapshot, destroying it when you are done.

      No new hardware, but you will need a snapshot capable filesystem
      and write the script to do this. I'm not sure exactly what
      snapshotting features FreeBSD has...perhaps someone else could
      fill in this information. Also, you will have a short period of
      downtime during which the MySQL db is write locked. This may or
      may not be acceptable for you.

hth,
Thomas

-- 
N.J. Thomas
njt@ayvali.org
Etiamsi occiderit me, in ipso sperabo



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060113145003.GJ2451>