# phpman > perldoc > Apache::Session::Lock::MySQL

## NAME
    [Apache::Session::Lock::MySQL](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession%3A%3ALock%3A%3AMySQL/markdown) - Provides mutual exclusion using MySQL

## SYNOPSIS
     use [Apache::Session::Lock::MySQL](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession%3A%3ALock%3A%3AMySQL/markdown);

     my $locker = [Apache::Session::Lock::MySQL](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession%3A%3ALock%3A%3AMySQL/markdown)->new();

     $locker->acquire_read_lock($ref);
     $locker->acquire_write_lock($ref);
     $locker->release_read_lock($ref);
     $locker->release_write_lock($ref);
     $locker->release_all_locks($ref);

## DESCRIPTION
    [Apache::Session::Lock::MySQL](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession%3A%3ALock%3A%3AMySQL/markdown) fulfills the locking interface of [Apache::Session](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession/markdown). Mutual exclusion
    is achieved through the use of MySQL's GET_LOCK and RELEASE_LOCK functions. MySQL does not
    support the notion of read and write locks, so this module only supports exclusive locks. When
    you request a shared read lock, it is instead promoted to an exclusive write lock.

## CONFIGURATION
    The module must know how to connect to your MySQL database to acquire locks. You must provide a
    datasource name, a user name, and a password. These options are passed in the usual
    [Apache::Session](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession/markdown) style, and are very similar to the options for [Apache::Session::Store::MySQL](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession%3A%3AStore%3A%3AMySQL/markdown).
    Example:

     tie %hash, '[Apache::Session::MySQL](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession%3A%3AMySQL/markdown)', $id, {
         LockDataSource => 'dbi:mysql:database',
         LockUserName   => 'database_user',
         LockPassword   => 'K00l'
     };

    Instead, you may pass in an already opened DBI handle to your database.

     tie %hash, '[Apache::Session::MySQL](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession%3A%3AMySQL/markdown)', $id, {
         LockHandle => $dbh
     };

## AUTHOR
    This module was written by Jeffrey William Baker <<jwbaker@acm.org>>.

## SEE ALSO
    [Apache::Session](https://www.chedong.com/phpMan.php/perldoc/Apache%3A%3ASession/markdown)

