File::Lock::Multi::MySQL - Lock multiple strings in MySQL to emulate taking out multiple locks on a single string.


This module uses MySQL's GET_LOCK() function on multiple strings to emulate taking out multiple locks on a single string.

It is very important that database handles are not used to take out any other locks, for your resource or for any other resource! From the MySQL documentation:

"If you have a lock obtained with GET_LOCK(), it is released when you execute RELEASE_LOCK(), execute a new GET_LOCK(), or your connection terminates (either normally or abnormally)."

See the dbh option below for more details.


In addition to the standard File::Lock::Multi options, the following additional options are available when calling new():


A sprintf() format string used to come up with the individual lockfile names. sprintf() will be passed the file's path and the lock number as the first and second parameters. (Default: "%s.%i").


Either a database handle, or a "factory" (code reference which returns a new database handle each time it is invoked). Because each MySQL lock is unique to a database handle, and each database handle may only have one lock, you almost always need a fresh database handle to hold onto a lock. Example:

  my $lock = File::Lock::Multi::MySQL->new(
    file => "limited.resource", limit => 5,
    dbh => sub { DBI->connect("DBI:mysql:", $user, $password) }


Copyright 2010 Tyler "Crackerjack" MacDonald <>

This is free software; You may distribute it under the same terms as perl itself.


File::Lock::Multi, "flock" in perlfunc