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.
date=date(d_m_y_H_M_S)
filename="$date".gz
mysqldump --user=my_user --password=my_pass --default-character-set=utf8 my_database | gzip > "/var/www/vhosts/system/example.com/httpdocs/backups/$("filename")
/var/www/vhosts/system/example.com/httpdocs/backups/
, die älter als 8 Tage sind"/var/www/vhosts/system/example.com/httpdocs/backup_log.txt"
wird dieser Text geschrieben: Backup is created at $("date")
>/dev/null 2>&1
wird hinzugefügt.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"
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.
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
#!/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
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
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
#!/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
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:
Vollständige Offenlegung: ursprünglicher Matiri-Autor.