Welcome to Dagon Design. In addition to free scripts, WordPress plugins, and articles, we offer a variety of services including custom theme design, plugin creation, and PHP scripting. Contact me for more information.

Version 2.1   Updated Thursday, May 3rd, 2007 at 8:08am

Automatic MySql Backup Script

This script finds all of the MySQL databases on your server, individually backs them up (for easy recovery of specific data), compresses them, and stores the file in a specified directory and/or emails it to you. It has been updated since the initial public release and includes several new features.

I would like to thank Oliver Mueller for his many contributions to this release, including additional features, fixes, and testing. Thanks Oliver!

Download v2.1

  If you have found this page useful, please consider donating. Thanks!

Other versions

Page Contents

Change log

  • v2.1 (May 3, 2007)

    New option added to allow comma separated list of databases to exclude

  • v2.0 (September 27, 2005)

    Completely rewritten in PHP
    Config is now in separate file
    New logging and error system
    Log files are time-stamped
    Log files can be sent with backup email
    Error log can be emailed to alternate address
    Windows support (more info below)
    Can set max execution time for script
    Option to flush and optimize databases
    Can be executed from browser, cron job, etc..

  • v1.2 (March 30, 2005 – First public release)

    Written in Perl for Unix-based systems
    Automatically finds all of your MySQL databases
    Databases are backed up individually
    The backup files are compressed into a single file
    Backups can be stored on the server and/or emailed

Requirements

There are very few requirements for this script to function. You must of course have PHP. You will also need to supply the script with a username and password for MySQL so that it can extract the databases. It is best to use the root MySQL account so it will be able to perform a complete backup.

This script was originally written for Unix-based systems, but this new version will work on Windows platforms, provided that you make the required configuration changes, and have an acceptable zip and tar replacement (that can properly handle the command line parameters).

Installation

To install the script, just download the two files above, renaming them from .txt to .php. You can put them anywhere on your server, as long as they are together. Since the script is now in PHP you can even run it directly from your browser, although if you do, a password-protected directory is recommended.

Configuration

Before running this script, open up the configuration file – backup_dbs_config.php – and make the required changes. Most of the options do not have to be changed, but some are required for the script to function properly (such as the MySQL connection info).

The logging / error system

Two log files are created every time the script runs. The standard log and error log. What happens to them depends on your configuration.

When you are performing an email backup, the standard log will be placed inside the body of the message. The backup file will of course be attached to this message. You can also choose if the backup file and standard log are left on the server after emailing.

Error messages are still shown in the standard log, but the separate error log allows you to receive notification (to a separate email address) in case of error. This can be useful if you want errors sent to your primary account, while backups are sent to an alternate (that you do not check every day). That way you can always be aware of problems.

Manually running the script

Depending on your configuration and user permissions, you may have to run this script as root.

From the command line, you can type: php /path_to_script/backup_dbs.php

You can also run it directly from your web browser: http://www.domain.com/path/backup_dbs.php

Setting up a cron job

Once again, depending on your configuration and user permissions, you may have to be logged in as root to create a cron job.

type crontab -e and add a new line. Here is an example:

30 0 * * * php /root/scripts/backup_dbs.php

That will configure cron to run the script every day at 12:30 am. To learn more about cron jobs, you can visit this cron guide.

After adding the new line, save the file and exit. Cron may have to be restarted before it will recognize the new job. To do this, simply type:

/etc/init.d/crond restart

On certain servers, emails are sent out containing the output of cron jobs. If you would like to prevent this, you can add the following code to the end of your new cron job line:

> /dev/null 2>&1

If you add this code, do not forget to restart cron again before testing. That line only prevents email notifications after cron jobs execute. This will not effect the script’s log file options.

Final notes

This script has been tested extensively, but I take no responsibility for any damages caused by misuse, improper configuration, or differences in server configurations. If you have any questions or comments, feel free to post them below!

Pages: « 15 14 13 12 [11] 10 9 8 7 6 51 » Show All

  1. 165
    Steve

    Does anyone know what to put for the $MYSQL_PATH variable if you’re being hosted on bluehost.com?

  2. 164
    Jason

    I’m using this only for the e-mail function, but am having an issue. It dumps the db and compresses with no issue, then says it is e-mailing to the address I specified, but I never get an e-mail. I have it set to delete after e-mailing, but upon checking via FTP, the backup files are still there (the tar is around 7 MB). However, it works fine with my smaller database. I’m sure this is an issue with the server (memory limit of some kind) and not the script, but is there anything I can do? This is a webserver, and not a server that I have shell access to or anything.

  3. 163
    Bob

    Using this script is it possible to turn off the compression and just get the .sql file dump instead?

  4. thanks its real good script

  5. You sir, are a lifesaver, I was halfway in, writing my own script before I found yours. Thanks for saving me a weeks worth of work!

  6. 160
    antialiasis

    Does this script work on IIS (with PHP and MySQL installed, obviously, but still IIS)?

  7. Only one thing to say, thanks a lot for all your scripts and WP plugins, you only made great, clean and usefull scripts ;)
    Thanks again for all your free work !

  8. 158
    Jack

    Man, I love you. I’m not gay but I really love you !

  9. 157
    arjen

    Hi all,

    I am installing this script on a W2k3 box.
    Everything seems fine exept the infamous “ZIP is not recognized as an internal or external command…” error.
    I have included ZIP in the PATH: (C:\Program Files\WinZip\WINZIP32.EXE)

    The config is like this:

    // Path to the mysql commands (mysqldump, mysqladmin, etc..)
    $MYSQL_PATH = ‘C:\MySQL\bin’;

    // Mysql connection settings (must have root access to get all DBs)
    $MYSQL_HOST = ‘localhost’;
    $MYSQL_USER = ‘root’;
    $MYSQL_PASSWD = ”;

    // Backup destination (will be created if not already existing)
    $BACKUP_DEST = ‘E:\80\backupdbs\db_backups’;

    // Temporary location (will be created if not already existing)
    $BACKUP_TEMP = ‘E:\80\backupdbs\tmp\backup_temp’;

    // Show script status on screen while processing
    // (Does not effect log file creation)
    $VERBOSE = true;

    // Name of the created backup file (you can use PHP’s date function)
    // Omit file suffixes like .tar or .zip (will be set automatically)
    $BACKUP_NAME = ‘mysql_backup_SCE’ . date(‘Y-m-d’);

    // Name of the standard log file
    $LOG_FILE = $BACKUP_NAME . ‘.log’;

    // Name of the error log file
    $ERR_FILE = $BACKUP_NAME . ‘.err’;

    // Which compression program to use
    // Only relevant on unix based systems. Windows system will use zip command.
    $COMPRESSOR = ‘bzip2′;

    Does anyone have any idea what to correct?

    Thanks in advance

  10. If you run manually from your browser you may find that you don’t have permission to write the directories in root /db_backups etc.

    If this is the case simply create db_backups amd tmp/backups_temp in the directory that the script is sitting. Be sure to chmod 777 them too.

  11. I have excluded from de databases a couple that i dont need, but i get the backup from those and from information_schem..

  12. Hi,

    I believe that I have the script set up correctly but I am having no success with it. Nice was not installed on the server so I have installed that. However, when the script is executed it is generating the following errors (one for each database):

    > Processing Databases..
    > sh: /mysqldump: No such file or directory
    > DUMP FAILED
    >
    > DUMP FAILED
    >
    > sh: /nice: No such file or directory
    > COMPRESSION FAILED
    >
    > COMPRESSION FAILED

    (Repeated 10 more times – presumably one for each database)

    and finishing up with:

    Archiving files..
    sh: /cd: No such file or directory
    FAILED

    FAILED

    *** ERRORS DETECTED! ***
    Check your email account ************** for more information!

    Emailing backup to ******************* ..
    PHP Warning: file_get_contents(): Unable to access /root/db_backups/mysql_backup_2008-08
    -12.tar in /root/scripts/backup_dbs.php on line 303
    PHP Warning: file_get_contents(/root/db_backups/mysql_backup_2008-08-12.tar): failed to
    open stream: No such file or directory in /root/scripts/backup_dbs.php on line 303

    There were errors!
    Emailing error log to *************** ..
    qmail-inject: fatal: unable to parse this line:
    From: ************>MIME-Version: 1.0
    FAILED to email error log.
    FAILED to email error log.

    (Despite the last few lines I am receiving an e-mail with the errors and an attached .tar file of 0 bytes).

    I am running under Plesk which seems to be problematical for some.

    Any help would be appreciated.

  13. Dear all,

    Could you please take a look http://saigon.whodigital.com/demo/bk/backup_dbs.php

    I give below error – do you have any idea for helping?

    Executing MySQL Backup Script v1.4
    Processing Databases..
    DUMP FAILED

    DUMP FAILED

    COMPRESSION FAILED
    zip warning: name not matched: C:\tmp/blog.sql

    zip error: Nothing to do! (C:/tmp/blog.sql.zip)
    COMPRESSION FAILED
    zip warning: name not matched: C:\tmp/blog.sql

    zip error: Nothing to do! (C:/tmp/blog.sql.zip)
    DUMP FAILED

  14. I too am having a issue with the zip portion on Windows. Winzip is installed on the server and included in the path. No matter what I try in the config or backup php I receive the messager ‘zip’ is not configured and an internal or external command.

  15. I manage to get it work, but now is the zip problem..I installed winzip but still have problem, is there a solution for this?

    appreciate for any help.

Pages: « 15 14 13 12 [11] 10 9 8 7 6 51 » Show All

Leave a Comment

Before you comment: If you are having an issue with a script, please make sure you have read the entire article. Also, please read through the comments because most common issues have already been discussed many times. Thanks.


Be sure to wrap all code in <code></code> tags.