MySQL Backup: Schreibe jede Datenbank in eine eigene Datei

Dieses Script sichert alle MySQL-Tabellen und schreibt den Inhalt in jeweils eine eigene Datei.

Beschreibung der Funktionsweise

Das Skript sucht nach den ausführbaren Dateien mysql und mysqldump. Nach Eingabe des Passworts für den Datenbank Benutzer root wird mit der Sicherung begonnen. Der Inhalt einer Datenbank wird in eine eigene Datei im aktuellen Verzeichnis geschrieben.

Standard-Einstellungen

  • Datenbank-Benutzer: root
  • Datenbank-Server: localhost
  • Datenbank-Passwort: Eingabe erforderlich
  • Ausgeschlossene Datenbanken: information_schema performance_schema"
  • Backup Files werden in das aktuelle Verzeichnis geschrieben
  • Backup File Prefix: Aktuelles Datum und Name des Servers, z.B. 20120205_example
  • Backup File Suffix: .sql
  • Komprimieren: Nach Backup werden Dateien mit bzip2 komprimiert

Die Einstellungen können im Skript geändert werden.

Das Script

  1. #!/usr/bin/env sh
  2. # Dump mysql databases via mysqldump and write
  3. # each database in a single file
  4. #
  5. # @copyright 2012 Stefan Konarski
  6. # @license BSD License
  7. # @version 0.1
  8. #
  9.  
  10. # Exclude the following databases
  11. edb="information_schema performance_schema"
  12.  
  13. # Use this prefix for backup file names
  14. prefix="$(date +'%Y-%m-%d')_$(hostname)_"
  15.  
  16. # Use this suffix for backup file names
  17. suffix=".sql"
  18.  
  19. # Compress backup files
  20. pack=$(which bzip2)
  21.  
  22. dump=$(which mysqldump)
  23. if [ ! -x $dump ]; then
  24. echo "$dump not executable"
  25. exit 1
  26. fi
  27.  
  28. mysql=$(which mysql)
  29. if [ ! -x $mysql ]; then
  30. echo "$mysql not executable"
  31. exit 1
  32. fi
  33.  
  34. # Ask for password without prompt
  35. stty -echo
  36. read -p "Enter MySQL password for root: " pass; echo
  37. stty echo
  38.  
  39. if [ "" = "$pass" ]; then
  40. echo "Login without password"
  41. dblogin='-u root'
  42. else
  43. dblogin="-u root -p$pass"
  44. fi
  45.  
  46. ######################
  47. # Execute backup #
  48. ######################
  49. out="$($mysql $dblogin -Bse 'show databases')"
  50. # List for compressing files
  51. fc=
  52.  
  53. # Loop over all databases
  54. for db in $out
  55. do
  56. # Don't skip any database as default
  57. skipdb=0
  58. # If excludable databases are defined
  59. if [ "$edb" != "" ]; then
  60. # Loop over excludable databases
  61. for n in $edb; do
  62. if [ "$db" = "$n" ]; then
  63. skipdb=1
  64. break;
  65. fi
  66. done
  67. fi
  68.  
  69. if [ "$skipdb" = "1" ] ; then
  70. echo "Skip database $db"
  71. continue
  72. fi
  73.  
  74. fn="./$prefix$db$suffix"
  75. echo "Dump database $db to $fn"
  76. $dump $dblogin --databases $db --result-file=$fn
  77. fc="$fc $fn"
  78. done
  79.  
  80. ######################
  81. # Compress backups #
  82. ######################
  83. if [ $pack ] && [ -x $pack ] && [ "$fc" != "" ]; then
  84. echo "Compress $fc"
  85. $pack $fc
  86. fi