Difference between revisions of "Mysqldump"
Jump to navigation
Jump to search
(improved file naming) |
|||
Line 1: | Line 1: | ||
− | quick recipe | + | When using MySQL, I always use a .my.cnf file to store my password so that I can switch to 'root' on the host, and execute whatever commands I need. |
+ | <pre> | ||
+ | [client] | ||
+ | user=root | ||
+ | password=SuperSecretSauce | ||
+ | </pre> | ||
+ | |||
+ | == Backup Script == | ||
+ | Here's a quick recipe using <code>mysqldump</code> | ||
+ | |||
− | |||
<code>cat ./backup.db.sh</code> | <code>cat ./backup.db.sh</code> | ||
<source lang="bash"> | <source lang="bash"> | ||
Line 25: | Line 33: | ||
ls -al $backup; | ls -al $backup; | ||
+ | </source> | ||
+ | |||
+ | |||
+ | == Backup One-liner == | ||
+ | For times when you need to enter a password | ||
+ | <source lang="bash"> | ||
+ | db=MYDATABASE; | ||
+ | mysqldump -u db_user $db -p > ./tmp/dump-$(date +%F).$(hostname)-$db.sql | ||
+ | </source> | ||
+ | |||
+ | For all databases on a host | ||
+ | <source lang="bash"> | ||
+ | mysql --execute="show databases" | awk '{print $1}' | grep -iv ^Database$ | sed 's/\(.*\)/mysqldump \1 > \1.'$(date +"%Y%m%d")'.sql/' | ||
+ | # Then just redo the command piped to sh | ||
</source> | </source> | ||
Line 31: | Line 53: | ||
mysql $DB < $backup | mysql $DB < $backup | ||
</source> | </source> | ||
+ | |||
+ | Using process substitution and <code>zcat</code>, you don't even need to uncompress your gzipped backups first. | ||
+ | <source lang="bash"> | ||
+ | mysql -p -u db_user db < <(zcat ./scheduled/eQualityTechnology-2015-03-15T23-11-50.mysql.gz) | ||
+ | |||
+ | </source> | ||
+ | |||
[[Category:Database]] | [[Category:Database]] | ||
[[Category:Bash]] | [[Category:Bash]] |
Revision as of 07:20, 8 April 2015
When using MySQL, I always use a .my.cnf file to store my password so that I can switch to 'root' on the host, and execute whatever commands I need.
[client] user=root password=SuperSecretSauce
Backup Script[edit | edit source]
Here's a quick recipe using mysqldump
cat ./backup.db.sh
#!/bin/sh
DB=wiki
backupdir="$HOME/backups";
if [ ! -d "$backupdir" ]; then
mkdir -p $backupdir;
fi
backup="$backupdir/dump-$(date +%F).$(hostname)-$DB.sql";
# increment the filename if it already exists
# http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
i=1
filename=$(basename "$backup") # foo.txt
extension=${filename##*.} # .txt
file=${filename%.*} # foo
while [ -f $backup ]; do
backup="$backupdir/${file}.${i}.${extension}"
i=$(( i+1 )) # increments $i
done
/usr/bin/mysqldump $DB > $backup;
ls -al $backup;
Backup One-liner[edit | edit source]
For times when you need to enter a password
db=MYDATABASE;
mysqldump -u db_user $db -p > ./tmp/dump-$(date +%F).$(hostname)-$db.sql
For all databases on a host
mysql --execute="show databases" | awk '{print $1}' | grep -iv ^Database$ | sed 's/\(.*\)/mysqldump \1 > \1.'$(date +"%Y%m%d")'.sql/'
# Then just redo the command piped to sh
Restore[edit | edit source]
mysql $DB < $backup
Using process substitution and zcat
, you don't even need to uncompress your gzipped backups first.
mysql -p -u db_user db < <(zcat ./scheduled/eQualityTechnology-2015-03-15T23-11-50.mysql.gz)