MySQL Administrator> Backup Project. It is a great tool to allow you to select databases, and schedule it.
However my issue is:
Today got a few new websites (new database created) Tomorrow got a few more new websites (new databases created)
In this case, I have to always go into Backup Project> Select those remaining schema not in the backup list...
How to make it auto check for any new databases and include in the backup schedule list?
In other word, how to automate the backup of all the mysql databases (so that we don't need to worry when there's new databases created everyday).
Any way to make it happen?
I'm using Windows 2008 server, which is not sh friendly.
automysqlbackup /etc/automysqlbackup/automysqlbackup.conf This will create a backup of all MySQL databases on your server. If you wish to change the backup location, simply edit the configuration file (located in /etc/automysqlbackup/automysqlbackup. conf) and modify the BACKUPDIR variable.
To backup multiple MySQL databases with one command you need to use the --database option followed by the list of databases you want to backup. Each database name must be separated by space. The command above will create a dump file containing both databases.
Mysqldump is a command-line utility that is used to generate the logical backup of the MySQL database. It produces the SQL Statements that can be used to recreate the database objects and data.
The problem with the three answers posted so far is that they do not enable you to selectively restore the databases. This can be a real problem in all but a catastrophe.
Ideally, you should have a daily backup, with some history. It should be bulletproof (--force
), it should be logged (>> ...log
), it should be compressed (| gzip
), it should keep separate copies of each database, and it should automatically pick up any databases that are added.
Consider, rather, a shell script like this:
#!/bin/bash
Host=server.domain.com
BDir=/home/backup/backup/mysql
Dump="/usr/bin/mysqldump --skip-extended-insert --force"
MySQL=/usr/bin/mysql
Today=$(date "+%a")
# Get a list of all databases
Databases=$(echo "SHOW DATABASES" | $MySQL -h $Host)
for db in $Databases; do
date=`date`
file="$BDir/$Host-$db-$Today.sql.gz"
echo "Backing up '$db' from '$Host' on '$date' to: "
echo " $file"
$Dump -h $Host $db | gzip > $file
done
Which is assuming that you have a file ~/.my.cnf
(chmod 600), that has:
[client]
user = "BACKUP"
password = "SOMEPASS8342783492"
Make sure that whatever user you are using for BACKUP
has this grant statement:
GRANT
SELECT, SHOW VIEW ON *.*
TO BACKUP@localhost
IDENTIFIED BY 'SOMEPASS8342783492';
So simply add this to a nightly cronjob, and you have a daily backup that rotates each 7 days week.
0 3 * * * backup-mysql >> backup-mysql.log 2>> backup-mysql.log
The backup directory then contains:
-rw-r--r-- 1 backup backup 2217482184 Sep 3 13:35 base.appcove.net-VOS4_0-20090903.sql.gz
-rw-rw-r-- 1 backup backup 2505876287 Dec 25 00:48 base.appcove.net-VOS4_0-Fri.sql.gz
-rw-r--r-- 1 backup backup 2500384029 Dec 21 00:48 base.appcove.net-VOS4_0-Mon.sql.gz
-rw-r--r-- 1 backup backup 2506849331 Dec 26 00:48 base.appcove.net-VOS4_0-Sat.sql.gz
-rw-r--r-- 1 backup backup 2499859469 Dec 20 00:48 base.appcove.net-VOS4_0-Sun.sql.gz
-rw-rw-r-- 1 backup backup 2505046147 Dec 24 00:48 base.appcove.net-VOS4_0-Thu.sql.gz
-rw-rw-r-- 1 backup backup 2502277743 Dec 22 00:48 base.appcove.net-VOS4_0-Tue.sql.gz
-rw-r--r-- 1 backup backup 2504169910 Dec 23 00:48 base.appcove.net-VOS4_0-Wed.sql.gz
-rw-r--r-- 1 backup backup 76983829 Dec 25 00:49 base.appcove.net-VOS4_Mail_0-Fri.sql.gz
-rw-r--r-- 1 backup backup 76983829 Dec 21 00:49 base.appcove.net-VOS4_Mail_0-Mon.sql.gz
-rw-r--r-- 1 backup backup 76983829 Dec 26 00:49 base.appcove.net-VOS4_Mail_0-Sat.sql.gz
-rw-r--r-- 1 backup backup 76983829 Dec 20 00:48 base.appcove.net-VOS4_Mail_0-Sun.sql.gz
-rw-rw-r-- 1 backup backup 76983829 Dec 24 00:49 base.appcove.net-VOS4_Mail_0-Thu.sql.gz
-rw-rw-r-- 1 backup backup 76983829 Dec 22 00:49 base.appcove.net-VOS4_Mail_0-Tue.sql.gz
-rw-r--r-- 1 backup backup 76983829 Dec 23 00:49 base.appcove.net-VOS4_Mail_0-Wed.sql.gz
-rw-r--r-- 1 backup backup 304803726 Dec 25 00:49 base.appcove.net-WeSell_0-Fri.sql.gz
-rw-r--r-- 1 backup backup 303480087 Dec 21 00:49 base.appcove.net-WeSell_0-Mon.sql.gz
-rw-r--r-- 1 backup backup 304710121 Dec 26 00:49 base.appcove.net-WeSell_0-Sat.sql.gz
-rw-r--r-- 1 backup backup 303791294 Dec 20 00:49 base.appcove.net-WeSell_0-Sun.sql.gz
-rw-rw-r-- 1 backup backup 305315415 Dec 24 00:49 base.appcove.net-WeSell_0-Thu.sql.gz
-rw-rw-r-- 1 backup backup 302516217 Dec 22 00:49 base.appcove.net-WeSell_0-Tue.sql.gz
-rw-r--r-- 1 backup backup 303314217 Dec 23 00:49 base.appcove.net-WeSell_0-Wed.sql.gz
-rw-r--r-- 1 backup backup 135301 Dec 25 00:30 dc40.appcove.net-mysql-Fri.sql.gz
-rw-r--r-- 1 backup backup 135301 Dec 21 00:30 dc40.appcove.net-mysql-Mon.sql.gz
-rw-r--r-- 1 backup backup 135301 Dec 26 00:30 dc40.appcove.net-mysql-Sat.sql.gz
-rw-r--r-- 1 backup backup 135301 Dec 20 00:30 dc40.appcove.net-mysql-Sun.sql.gz
-rw-rw-r-- 1 backup backup 135301 Dec 24 00:30 dc40.appcove.net-mysql-Thu.sql.gz
-rw-rw-r-- 1 backup backup 135301 Dec 22 00:30 dc40.appcove.net-mysql-Tue.sql.gz
-rw-r--r-- 1 backup backup 135301 Dec 23 00:30 dc40.appcove.net-mysql-Wed.sql.gz
With MySQL Administrator you need to manually add databases to the backup.
If you approach this through a dump-command, you can use the --all-databases
option to include all databases into the dump.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With