it-swarm.com.de

Linux Shell-Skript für die Datenbanksicherung

Ich habe viele Skripte für die Datenbanksicherung ausprobiert, konnte es aber nicht erstellen. Ich möchte meine Datenbank stündlich sichern.
Ich habe Dateien zum Ordner "/etc/cron.hourly/" hinzugefügt, das chmod in 755 geändert, aber es ist nicht ausgeführt .. ..

Ich würde mich freuen, wenn Sie ein Skript für diese Operation schreiben und mir sagen könnten, was ich mehr tun soll? Nachdem Sie diese Skriptdatei in den Ordner /etc/cron.hourly/ eingefügt haben.

  • Aktuelles Datum abrufen und eine Variable erstellen, date=date(d_m_y_H_M_S)
  • Erstellen Sie eine Variable für den Dateinamen filename="$date".gz
  • Holen Sie sich den Dump meiner Datenbank wie folgt: mysqldump --user=my_user --password=my_pass --default-character-set=utf8 my_database | gzip > "/var/www/vhosts/system/example.com/httpdocs/backups/$("filename")
  • Löschen Sie alle Dateien im Ordner /var/www/vhosts/system/example.com/httpdocs/backups/, die älter als 8 Tage sind
  • In die Datei "/var/www/vhosts/system/example.com/httpdocs/backup_log.txt" wird dieser Text geschrieben: Backup is created at $("date")
  • Ändern Sie die Dateieigentümer (chown) von root in "my_user". Weil ich die Sicherungs- und Protokolldateien über das FTP-Konto "my_user" öffnen möchte.
  • Ich möchte keine E-Mail nach jedem Cron. >/dev/null 2>&1 wird hinzugefügt.
37
trante

Nach Stunden und Stunden habe ich eine Lösung wie die folgende erstellt. Ich kopiere Paste für andere Leute, die davon profitieren können.

Erstellen Sie zuerst eine Skriptdatei und erteilen Sie dieser Datei die Berechtigung zum Ausführen.

# cd /etc/cron.daily/
# touch /etc/cron.daily/dbbackup-daily.sh
# chmod 755 /etc/cron.daily/dbbackup-daily.sh
# vi /etc/cron.daily/dbbackup-daily.sh

Kopieren Sie dann die folgenden Zeilen mit Shift + Ins in die Datei

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown myuser "$fullpathbackupfile"
chown myuser "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

Bearbeiten:
Wenn Sie InnoDB verwenden und die Sicherung zu lange dauert, können Sie das Argument " single-transaction " hinzufügen, um das Sperren zu verhindern. Die mysqldump-Zeile sieht also so aus:

mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
          --single-transaction mydatabase | gzip > "$fullpathbackupfile"
91
trante

Erstellen Sie ein ähnliches Skript:

#!/bin/sh -e

location=~/`date +%Y%m%d_%H%M%S`.db

mysqldump -u root --password=<your password> database_name > $location

gzip $location

Dann können Sie die crontab des Benutzers bearbeiten, den das Skript ausführen soll:

$> crontab -e

Und den Eintrag anhängen

01 * * * * ~/script_path.sh

Dadurch wird es jeden Tag in der ersten Minute jeder Stunde ausgeführt.

Dann müssen Sie nur noch Ihre Brötchen und andere Funktionen hinzufügen, und Sie können loslegen. 

30
Peter Party Bus

Ich habe die gleiche Ausgabe ... aber ich schaffe es, ein Skript zu schreiben. 

#!/bin/bash
# Database credentials
user="username"
password="password"
Host="localhost"
db_name="dbname"
# Other options
backup_path="/DB/DB_Backup"
date=$(date +"%d-%b-%Y")
# Set default file permissions
umask 177
# Dump database into SQL file
mysqldump --user=$user --password=$password --Host=$Host $db_name >$backup_path/$db_name-$date.sql

# Delete files older than 30 days
find $backup_path/* -mtime +30 -exec rm {} \;


#DB backup log
echo -e "$(date +'%d-%b-%y  %r '):ALERT:Database has been Backuped"    >>/var/log/DB_Backup.log
6
#!/bin/sh
#Procedures = For DB Backup
#Scheduled at : Every Day 22:00

v_path=/etc/database_jobs/db_backup
logfile_path=/etc/database_jobs
v_file_name=DB_Production
v_cnt=0

MAILTO="[email protected]"
touch "$logfile_path/kaka_db_log.log"

#DB Backup
mysqldump -uusername -ppassword -h111.111.111.111 ddbname > $v_path/$v_file_name`date +%Y-%m-%d`.sql 
if [ "$?" -eq 0 ]
  then
   v_cnt=`expr $v_cnt + 1`
  mail -s "DB Backup has been done successfully" $MAILTO < $logfile_path/db_log.log
 else
   mail -s "Alert : kaka DB Backup has been failed" $MAILTO < $logfile_path/db_log.log
   exit
fi
2
kartavya soni

Hier ist mein mysql-Backup-Skript für Ubuntu, falls es jemandem hilft.

#Mysql back up script

start_time="$(date -u +%s)"

now(){
date +%d-%B-%Y_%H-%M-%S
}

ip(){
/sbin/ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'
}

filename="`now`".Zip
backupfolder=/path/to/any/folder
fullpathbackupfile=$backupfolder/$filename
db_user=xxx
db_password=xxx
db_name=xxx

printf "\n\n"
printf "******************************\n"
printf "Started Automatic Mysql Backup\n"
printf "******************************\n"
printf "TIME: `now`\n"
printf "IP_ADDRESS: `ip` \n"
printf "DB_SERVER_NAME: DB-SERVER-1\n"

printf "%sBACKUP_FILE_PATH $fullpathbackupfile\n"

printf "Starting Mysql Dump \n"

mysqldump -u $db_user -p$db_password $db_name| pv | Zip > $fullpathbackupfile

end_time="$(date -u +%s)"

elapsed=$(($end_time-$start_time))

printf "%sMysql Dump Completed In $elapsed seconds\n"

printf "******************************\n"

PS: Denken Sie daran, pv und zip in Ihrem Ubuntu zu installieren

Sudo apt install pv
Sudo apt install Zip

So setze ich crontab mit crontab -e in Ubuntu, um alle 6 Stunden zu laufen

0 */6 * * * sh /path/to/shfile/backup-mysql.sh >> /path/to/logs/backup-mysql.log 2>&1

Eine coole Sache ist, dass eine Zip-Datei erstellt wird, die einfacher von überall zu entpacken ist

1
Baljeet Bhinder

Als Datenbankadministrator müssen Sie die Sicherung der MySQL-Datenbank bei Problemen einplanen, damit Sie Ihre Datenbanken von der aktuellen Sicherung wiederherstellen können.

Hier verwenden wir mysqldump, um die Sicherung der mysql-Datenbanken zu erstellen, und Sie können dasselbe in das Skript einfügen.

[orahow @ oradbdb DB_Backup] $ cat .backup_script.sh

#!/bin/bash
# Database credentials
user="root"
password="1Loginxx"
db_name="orahowdb"
v_cnt=0
logfile_path=/DB_Backup
touch "$logfile_path/orahowdb_backup.log"
# Other options
backup_path="/DB_Backup"
date=$(date +"%d-%b-%Y-%H-%M-%p")
# Set default file permissions

Lesen Sie weiter .... MySQL Backup

0
Rosel
#!/bin/bash

# Add your backup dir location, password, mysql location and mysqldump        location
DATE=$(date +%d-%m-%Y)
BACKUP_DIR="/var/www/back"
MYSQL_USER="root"
MYSQL_PASSWORD=""
MYSQL='/usr/bin/mysql'
MYSQLDUMP='/usr/bin/mysqldump'
DB='demo'

#to empty the backup directory and delete all previous backups
rm -r $BACKUP_DIR/*  

mysqldump -u root -p'' demo | gzip -9 > $BACKUP_DIR/demo$date_format.sql.$DATE.gz

#changing permissions of directory 
chmod -R 777 $BACKUP_DIR
0
Shal

Sie könnten dieses Open Source-Tool, matiri, https://github.com/AAFC-MBB/matiri betrachten, bei dem es sich um ein gleichzeitiges Sicherungsskript für mysql mit Metadaten in Sqlite3 handelt. Eigenschaften:

  • Multi-Server: Mehrere MySQL-Server werden unterstützt, unabhängig davon, ob sie sich auf demselben oder separaten physischen Servern befinden.
  • Parallel: Jede Datenbank auf dem Server, die gesichert werden soll, wird separat und parallel ausgeführt (Parallelität einstellbar: Standard: 3).
  • Komprimiert: Jede Datenbanksicherung wurde komprimiert
  • Checksummed: SHA256 jeder komprimierten Sicherungsdatei und des Archivs aller Dateien
  • Archiviert: Alle Datenbanksicherungen werden in einer einzigen Datei zusammengefasst
  • Recorded: Sicherungsinformationen in der Sqlite3-Datenbank gespeichert

Vollständige Offenlegung: ursprünglicher Matiri-Autor.

0
ggg