0. Backup site, Mysql and files www
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#!/bin/bash # #VARS TIMESTAMP=`date +%m-%d-%y-%H%M` HOST=localhost DBNAME="dbname" USER="dbuser" PASSWORD="dbPassw0rd" DUMP_PATH=/root/backup/sql BACK_PATH=/root/backup/www BACK_PATH_ETC=/root/backup/etc # BACKUP cd /root/backup # Backup mysql mysqldump --opt -c -e -Q -h$HOST -u$USER -p$PASSWORD $DBNAME > $DBNAME.sql tar czpf $DUMP_PATH/$DBNAME.$TIMESTAMP.tar.gz $DBNAME.sql rm -f $DBNAME.sql # Backing up files #tar cvzpf $BACK_PATH/www.$TIMESTAMP.tar.gz --same-owner --exclude=/var/www/site/gruzims/* /var/www tar cvzpf $BACK_PATH/www.$TIMESTAMP.tar.gz /var/www/html/name_site tar cvzpf $BACK_PATH_ETC/etc.$TIMESTAMP.tar.gz /etc # Clean DB # mysqldump -uuser -ppassword --add-drop-table --no-data databasename | grep ^DROP | mysql -uuser -ppassword databasename # Clean not work # drop databases mydatabasedump.sql; # create databases mydatabasedump.sql; # RESTORE # mysql -u root -p -f mydatabase < /home/myname/mydatabasedump.sql |
0.1 experements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#!/bin/bash #VAR TIMESTAMP=`date +%m-%d-%y-%H%M` HOST=localhost DBNAME="dbname" USER="dbuser" PASSWORD="dbPassw0rd" DUMP_PATH=/root/backup/sql BACK_PATH=/root/backup/www BACK_PATH_ETC=/root/backup/etc # BACKUP cd /root/backup # Backup mysql mysqldump --opt -c -e -Q -h${HOST} -u${USER} -p${PASSWORD} ${DBNAME} > ${DBNAME}.sql tar czpf ${DUMP_PATH}/${DBNAME}.${TIMESTAMP}.tar.gz ${DBNAME}.sql rm -f ${DBNAME}.sql # Backing up files #tar cvzpf $BACK_PATH/www.$TIMESTAMP.tar.gz --same-owner --exclude=/var/www/site/gruzims/* /var/www tar cvzpf ${BACK_PATH}/www.${TIMESTAMP}.tar.gz /var/www/html tar cvzpf ${BACK_PATH_ETC}/etc.${TIMESTAMP}.tar.gz /etc # CLEAN FOLDER BACKUP #!!! выполняем команду ls если выведет больше 2 то выполнится команда ls /etc/ #if (( `ls /home/ | wc -l` > 2)); then true ; else false ; fi && ls /etc/ # find /var/backup/www -name "*.tar.gz" -mtime +30 -delete - найти все файлы старше 30 дней и удалить ##### old cleaner ##for i in ${DUMP_PATH} ${BACK_PATH} ${BACK_PATH_ETC}; do ## if (( `ls ${i} | wc -l` > 2)); then true ; else false ; fi && find ${i} -name "*.tar.gz" -mtime +15 -delete ##done # Cleaner new delfiles(){ for i in $1 $2 $3 $4 $5 $6; do calc=$(ls ${i} | wc -l) if ((${calc} > 2)); then true ; else false ; fi && find ${i} -name "*.tar.gz" -mtime +15 -delete done } delfiles ${DUMP_PATH} ${BACK_PATH} ${BACK_PATH_ETC} #HINT # SYSTEMCTL # systemctl status wp-backup.service # systemctl status wp-backup.timer # Clean DB erase # mysqldump -uuser -ppassword --add-drop-table --no-data databasename | grep ^DROP | mysql -uuser -ppassword databasename # Clean not work # drop databases mydatabasedump.sql; # create databases mydatabasedump.sql; # RESTORE # mysql -u root -p -f mydatabase < /home/myname/mydatabasedump.sql # RSYNC to remote server # sync -avz /root/backup-wp user@YOU-server-IP-DNS:/home/user/backup-wp |
0.2 Systemd + скрипт для бэкапа
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
0. Создаем каталоги: mkdir -p /root/backup/{etc,www,sql} 1. Создаем скрипт для бэкапа и вносим изменения для переменных cat > /root/backup/backup.sh << "EOF" ---------------------------- #!/bin/bash #VAR TIMESTAMP=`date +%m-%d-%y-%H%M` HOST=localhost DBNAME="dbname" USER="dbuser" PASSWORD="dbPassw0rd" DUMP_PATH=/root/backup/sql BACK_PATH=/root/backup/www BACK_PATH_ETC=/root/backup/etc # BACKUP cd /root/backup # Backup mysql mysqldump --opt -c -e -Q -h${HOST} -u${USER} -p${PASSWORD} ${DBNAME} > ${DBNAME}.sql tar czpf ${DUMP_PATH}/${DBNAME}.${TIMESTAMP}.tar.gz ${DBNAME}.sql rm -f ${DBNAME}.sql # Backing up files #tar cvzpf $BACK_PATH/www.$TIMESTAMP.tar.gz --same-owner --exclude=/var/www/site/gruzims/* /var/www tar cvzpf ${BACK_PATH}/www.${TIMESTAMP}.tar.gz /var/www/html tar cvzpf ${BACK_PATH_ETC}/etc.${TIMESTAMP}.tar.gz /etc # CLEAN FOLDER BACKUP # выполняем только если файлов в каталогах для бекапа больше двух delfiles(){ for i in $1 $2 $3 $4 $5 $6; do calc=$(ls ${i} | wc -l) if ((${calc} > 2)); then true ; else false ; fi && find ${i} -name "*.tar.gz" -mtime +15 -delete done } delfiles ${DUMP_PATH} ${BACK_PATH} ${BACK_PATH_ETC} EOF 2. Создаем сервис в systemd cat > /etc/systemd/system/backup-wp.service << "EOF" [Unit] Description=backup [Service] Type=oneshot ExecStart=/root/backup/backup.sh Restart=on-failure [Install] WantedBy=multi-user.target EOF 3. Создаем таймер в systemd для будем бэкапить в 2 часа ночи cat > /etc/systemd/system/backup.timer << "EOF" [Unit] Description=backup [Timer] OnCalendar=02:00:00 [Install] WantedBy=timers.target EOF 4. Активируем сервисы для бекапа systemctl daemon-reload systemctl enable backup-wp.service systemctl enable backup-wp.timer systemctl status backup-wp.service systemctl status backup-wp.timer systemctl list-timers backup-wp.timer 5. Может пригодится: #HINT # SYSTEMCTL # systemctl status backup-wp.service # systemctl status backup-wp.timer # Clean DB erase # mysqldump -uuser -ppassword --add-drop-table --no-data databasename | grep ^DROP | mysql -uuser -ppassword databasename # Clean not work # drop databases mydatabasedump.sql; # create databases mydatabasedump.sql; # RESTORE # mysql -u root -p -f mydatabase < /home/myname/mydatabasedump.sql # RSYNC to remote server # sync -avz /root/backup-wp user@YOU-server-IP-DNS:/home/user/backup-wp |
1. BackUp MySQL
1 2 3 4 |
#!/bin/sh mkdir -p ${BKPDIR}/MySQL 2>/dev/null mysqldump --databases -uUSER -pDLINNIYPASSWORD mysql| gzip -f -9 - >"${BKPDIR}/MySQL/${DATEYMD}-mysql-MySQL.gzip" mysqldump --databases -uUSER -pESCHEODINPASSWORD phpmyadmin| gzip -f -9 - >"${BKPDIR}/MySQL/${DATEYMD}-phpmyadmin-MySQL.gzip" |
2. BackUp PostgreSQL
1 2 3 4 5 |
#!/bin/sh mkdir -p ${BKPDIR}/PostgreSQL 2>/dev/null (su - postgres -c "pg_dump postgres" <<EOF)| gzip -f -8 - >"${BKPDIR}/PostgreSQL/${DATEYMD}-postgres-PostgreSQL.gzip" TUT_NUZNO_PISAT_PASSWORD_DLYA_BAZY EOF |
3. BackUp MBR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/sh mkdir -p ${BKPDIR}/MBR 2>/dev/null dd if=/dev/sda of="${BKPDIR}/MBR/${DATEYMD}-sda-mbr.bin" bs=512 count=1 Для восстановления всей MBR надо запустить dd if=sda-mbr.bin of=/dev/sdX bs=1 Для восстановления таблицы разделов нужно использовать dd if= sda-mbr.bin of=/dev/sdX bs=1 count=64 skip=446 seek=446 Для восстановления только загрузчика запустите dd if=sda-mbr.bin of=/dev/sdX bs=1 count=446 Показывать прогресс dd status=progress if=NMA_YOU_IMAGE.img of=/dev/sdX |
4. BackUp копирования файлов по маске
1 2 3 4 |
#!/bin/sh find /www -name '*.php' -or -name '*.js' -or -name '*.pl' -or -name '*.ephtml' -or -name '.htaccess' -or -name 'htpasswd' -or -name 'htgroup'>${SCRIPTDIR}/www.bkp cat ${SCRIPTDIR}/${MAPFILE}|grep "www">/dev/null if [ "$?" -eq 1 ]; then echo "">>${SCRIPTDIR}/${MAPFILE}; echo www>>${SCRIPTDIR}/${MAPFILE}; fi |
5. BackUp system easy (tar)
1 2 3 4 5 6 7 8 |
без даты tar cvzpf /home/Backup.tgz --same-owner --exclude=/home/Backup.tgz --exclude=/home/error.log --exclude=/proc/* --exclude=/media/* --exclude=/dev/* --exclude=/mnt/* --exclude=/sys/* --exclude=/tmp/* / 2>/home/error.log с датой tar cvzpf /home/Backup_`date +%y_%m_%d`.tgz --same-owner --exclude=/home/Backup.tgz --exclude=/home/error.log --exclude=/proc/* --exclude=/media/* --exclude=/dev/* --exclude=/mnt/* --exclude=/sys/* --exclude=/tmp/* / 2>/home/error_`date +%y_%m_%d`.log восстановление tar xvzf /home/Backup.tgz -C / |
6. ssh \ ssh-keygen \ ssh-copy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Создать пользователя "USRER_NAME" с домашним каталогом "/backup/USRER_CATALOG_BACKUP": adduser --home /backup/USRER_CATALOG_BACKUP --disabled-password borg USRER_NAME Подключится пользователем sudo -i -u USRER_NAME ssh - поддержка авторизация без пароля с помощью RSA ключей Выполнять на клиенте с которого будем подключатся к серверу. ssh-keygen - создаем пару ключей на сервере с которого будем подключатся. ssh-copy-id sammy@IP_адрес_вашего_сервера - копирование открытого ключа На сервере куда будем класть бэкапы, пользователю в домашнем каталоге добавляем публичные ключи: .ssh/authorized_keys Если нет каталога .ssh можно его создать mkdir .ssh touch .ssh/authorized_keys chmod 700 .ssh chmod 600 .ssh/authorized_keys |
7. find
1 2 3 4 5 6 7 |
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 - поиск всех файлов, заканчивающихся на ".log" в директории /var/log, и упаковка их в bzip-архив find /home/user -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents - поиск в директории /home/user файлов, имена которых оканчиваются на ".txt", и копирование их в другую директорию find /var/backup/www -name "*.tar.gz" -mtime +30 |xargs /bin/rm -f {}; - найти все файлы старше 30 дней и удалить find /var/backup/www -name "*.tar.gz" -mtime +30 -delete - найти все файлы старше 30 дней и удалить |
8. rsync
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
rsync [опции] источник [приемник] rsync ключи: -p сохранить разрешения -A сохранить ACL -a режим архива -v подробный режим -z сжать данные файла во время передачи --exclude={'dir_name','file_name'} исключаем каталоги dir_name и файлы file_name --rsync-path="sudo rsync" подымаем rsync права до root --bwlimit=2048 ограничить скорость передачи rsync -avzpA --exclude={'proc','dev','lost+found','tmp','run','sys'} --rsync-path="sudo rsync" Имя_хоста_которыйбэкапим:/ /куда.бэкапим rsync -a /dir1/dir2 /dir3 - будет создана иерархия /dir3/dir2/файлы rsync -a /dir1/dir2/ /dir3 - будет создана иерархия /dir3/файлы rsync -a $srv/ $srv:src rsync -av --delete -e /dir/откуда/ /dir/куда/ - зеркалирование (v-вывод действий) rsync -avz --rsync-path="sudo rsync" user@host:/tmp/file /tmp - копируем user@host:/tmp/file в каталог /tmp, а параметр "sudo rsync" позволит выполнить от root (пользователь user должен быть в sudo) rsync --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync" --archive --acls --xattrs --one-file-system -e "ssh -T -c arcfour -o Compression=no -x" --exclude=".*" --size-only --log-file=/home/backup/rsync.log !!! Если удалять файлы, исчезнувшие в исходном каталоге, но присутствующие в целевом, не нужно — ключ --delete убрать. rsync -rogpav --delete /home /tmp - синхронизировать директории /tmp и /home rsync -az -e ssh --delete ip_addr:/home/public /home/local - синхронизировать локальную и удаленную директории через ssh туннель используя сжатие rsync -rogpav -e ssh --delete /home ip_address:/tmp - синхронизация через SSH туннель rsync -az -e ssh --delete /home/local ip_addr:/home/public - синхронизировать удалённую директорию с локальной используя ssh туннель со сжатием cсинхронизация каталогов ssh+rsync: rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда - изменяется удалённый каталог, копируем его на локальную машину rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда - изменяется локальный каталог, копируем его на удаленную машину |
9. dd
1 2 3 4 |
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' - создать "слепок" локального диска в файл на удалённом сервере используя ssh туннель dd if=/dev/hda of=/dev/fd0 bs=512 count=1 - создание копии MBR ( Master Boot Record ) с /dev/hda на флоппи-диск dd if=/dev/sda of=/tmp/backup - создание резервной копии содержимого жесткого диска в файл backup dd if=/dev/fd0 of=/dev/hda bs=512 count=1 - восстановить MBR с флоппи-диска на /dev/hda |
10. dump \ restore
1 2 3 4 |
dump -0aj -f /tmp/home0.bak /home - создать полную резервную копию директории /home в файл /tmp/home0.bak dump -1aj -f /tmp/home0.bak /home - создать инкрементную резервную копию директории /home в файл /tmp/home0.bak restore -if /tmp/home0.bak - восстановить данные из резервной копии /tmp/home0.bak |
11. tar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
tar cvzpf /home/Backup-etc`date +%y_%m_%d`.tgz /etc 2>/home/error.log - создание архива каталога с временной меткой tar -cvf archive.tar file1 file2 dir1 - создать tar архив archive.tar, упаковав в него файлы file1, file2 и директорию dir1 tar -cvf archive.tar file - упаковать в tar-архив archive.tar, файл file tar -cvzf archive.tar.gz dir1 - создать tar архив и сжать его с помощью программы gzip tar -cvjf archive.tar.bz2 dir1 - создать архив и сжать его с помощью bzip2 ( ключ -j работает не во всех *nix системах ) tar -tf archive.tar - вывести содержимое tar архива tar tfv viruses-2010-05-18.tar.bz2 1>zxcvirus.txt - просмотр архива и запись в файл описания tar -xvzf archive.tar.gz - разжать tar архив gz и распаковать его tar -xvjf archive.tar.bz2 - разжать архив bz и распаковать его ( ключ -j работает не во всех *nix системах ) tar -xvf archive.tar - распаковать tar архив в текущей директории ( в принципе указывать метод сжатия не обязательно, tar сам разберется) tar -xvf archive.tar -C /tmp - распаковать архив в /tmp tar -Puf backup.tar /home/user - создать инкрементную резервную копию директории /home/user в файл backup.tar сохраняя права доступа ( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' - упаковка в архив и копирование содержимого /tmp/local в директорию /home/share/ удалённого сервера, используя ssh туннель ( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' - упаковка в архив и копирование содержимого /home в директорию /home/backup-home удалённого сервера, используя ssh туннель tar cf - . | (cd /tmp/backup ; tar xf - ) - упаковка в архив и копирование одной директории в другую с сохранением прав доступа и ссылок |
11. SSH + TAR
1 2 3 4 5 6 7 8 9 |
#!/bin/sh CMD="/bin/tar" RCMD="ssh b14esh@linux" DIRS="zxc3/" DIRSN="zxc3" DATEYMD=`date "+%Y-%m-%dv%k-%M"` HOSTN=`hostname` echo Backup $DIRSN $DATEYMD cd /home/b14esh; $CMD -cjf - $DIRS | $RCMD "cat > $HOSTN.$DIRSN.$DATEYMD.tbz" |
12. borg
1 |
https://b14esh.com/nix/backup/borgbackup-backup-borg-debian-10.html |
12. rsnapshot
1 2 |
rsnapshot - создание снимков системы и файлов (backup) apt-get install rssnapshot sshfs - установка |