Bash Бакап MySQL баз

Вариаций данного скрипта на просторах сети очень много, вот мой, который я использую для сохранения копий MySQL баз данный, он сохраняет каждую базу в отдельности и пакует их при помощи gzip, так же есть возможность игнорировать определенные базы.

#!/bin/bash
#
#Buckup MySQL databases
#v0.1 base
#v0.11 Added chmod and chown
#v0.12 gzip bases MySQLuser="root"

MySQLuser="user" # username with Grand priveleges
MySQLuserPass="password"       # password for user
MySQLhost="localhost"          # hostname or IP of MySQL server # Linux bin paths change it if needed

# Linux bin paths change it if needed
MYSQL="mysql"
MYSQLDUMP="mysqldump"
GZIP="gzip"

# Backup dest directory
dest="/root/tmp"

# Main directory where backup will be stored
main="$dest/test"

# Get data in dd-mm-yyyy format
time_now="$(date +"%d-%m-%Y")"

# DO NOT BACKUP these databases, use space between bases.
ignore="test vmail"

[ ! -d $main ] && mkdir -p $main || :

# Only root can access it!
chown root:root -R $dest
chmod 0600 $dest # Get database list

#Starting buckup precess
enter="$($MYSQL -u $MySQLuser -h $MySQLhost -p$MySQLuserPass -Bse 'show databases')" #Buckup process
for db in $enter
do
skipdb=-1
if [ "$ignore" != "" ];
then
for i in $ignore
do
[ "$db" == "$i" ] && skipdb=1 || :
done
fi

if [ "$skipdb" == "-1" ] ; then
FILE="$main/$db.$MySQLhost.$time_now.gz"

# do all inone job in pipe,
# connect to mysql using mysqldump for select mysql database
# gzip after that
$MYSQLDUMP -u $MySQLuser -h $MySQLhost -p$MySQLuserPass $db | $GZIP -9 > $FILE
fi
done

Количество просмотров :2416

Bash Построчный реверс текстового файла

Иногда есть необходимость перевернуть текстовый файл, то есть, сделать так что бы, первая строка стала последней, а последняя стала первой, вторая стала предпоследней, а предпоследняя второй ну и так далее, для этого можно использовать вот такой скрипт:

#!/bin/bash
#
#Script to reverse text file v0.11
file="$1"
if [ $# -eq 0 ]; then
echo "$(basename $0) - file-name"
exit 1
fi  textArray[0]="" # hold text
c=0 # counter
# read whole file in loop
while read line
do
textArray[$c]=$line # store line
c=$(expr $c + 1) # increase counter by 1
done < $file
# get length of array
len=$(expr $c - 1 ) # use for loop to reverse the array
for (( i=$len; i>=0; i-- ));
do
echo ${textArray[$i]} >> $file".new"
done

Если сохранить данный скрипт в файле script, то запускаем мы его:

./script <имя обрабатываемого файла>

Количество просмотров :4198

Yum update Как исключить определенные пакеты?

Есть два способа, первый, когда запускаете yum, можно использовать опцию —exclude=

yum —exclude=package* update
yum —exclude=php* update
yum —exclude=*rrd* update
yum —exclude=kernel*,*snmp,perl* update

Второй, он более радикальный, можно  добавить исключение в конфиг файл /etc/yum.conf :

exclude=php* kernel*

Выглядеть это будет так:

[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude=php* kernel*

Количество просмотров :10153

MySQL Автоинкремент с определенного числа.

Обычно, MySQL начинает авто инкремент с 1. Это означает, что каждая первая запись в таблице имеет номер 1, вторая запись номер 2, и так далее. Иногда может быть полезным начать нумерацию с другого числа. Многие не знаю, что для есть простой способ для начала нумерации с определенного числа, необходимо выполнить такую команду:

ALTER TABLE table AUTO_INCREMENT = 100;

В примере нумерация начнется со 100.


Количество просмотров :4248

PhP Получаем дату будущего или прошлого. Unix Timestamp

Иногда нужно узнать дату через определенный период времени, в PhP для этого можно воспользоваться функцией strtotime(), как пример:

<?php
//Сегодня
$start = date("Y-m-d");

//1 месяц вперед
$time_m = date("Y-m-d",strtotime("+1 months"));

//25 дней вперед
$time_d = date("Y-m-d",strtotime("+25 days"));

//Дата через год
$time_d = date("Y-m-d",strtotime("+1 years"));
?>

Эту же функцию strtotime() можно применять для получения unix timestamp:

<?php
$start = date("Y-m-d");
$timestamp = strtotime($date);
?>

Количество просмотров :8981

Отключаем оповещение в Crontab

Ох уж эти оповещения, и ладно, если у вас крон запускает одно приложение в сутки, но если он это делает каждые пять минут, да еще и не одно а несколько скриптов и приложений, то через некоторое время эти оповещения начинают надоедать. Да можно настроить всяких фильтров в почтовой программе, но проще эти оповещения отключить. И так, есть два способа отключить оповещения, первый, в конце каждой строки запуска добавлять —

>/dev/null 2>&1 или &> /dev/null

Как пример:

0 1 5 10 * /path/to/script.sh >/dev/null 2>&1

или

0 1 5 10 * /path/to/script.sh &> /dev/null

Обязательно перезапустите крон.
Второй способ это изменить MAILTO= на:

MAILTO=»»

Количество просмотров :2026

Настраиваем Mailman на новом сервере. Переносим рассылки со старого.

И так, давайте подробно рассмотрим, как говориться шаг за шагом. Сразу хочу оговориться, что мой MTA — Postfix

Заходим в директорию mailman на старом сервере и создаем бакап нам необходимых директорий, это ./data ./archives ./lists:

tar -cvf move.tar ./data ./archives ./lists

Копируем этот файл на новый сервер, можно воспользоваться WinSCP например. Далее инсталлируем mailman. Загружаем и распаковываем последнюю версию mailman например отсюда.

Читать продолжении статьи: Настраиваем Mailman на новом сервере. Переносим рассылки со старого. »


Количество просмотров :5235

Perl скрипт — удаление одинаковых строк в файле

Мой почтовый релей уже почти готов, и думаю, что завтра я наконец-то смогу запустить его и у меня будет чуть больше времени на другие проекты. А пока, скрипт для удаления одинаковых строк в файле:

#!/usr/bin/perl -w
use strict;
my $origfile = shift;
my $outfile = "no_dupes_" . $origfile;
my %hTmp;
open (IN, "<$origfile") or die "Couldn't open input file: $!";
open (OUT, ">$outfile") or die "Couldn't open output file: $!";
while (my $sLine = <IN>) {
next if $sLine =~ m/^\s*$/; #remove empty lines
#Without the above, still destroys empty lines except for the first one.
print OUT $sLine unless ($hTmp{$sLine}++);
}
close OUT;
close IN;

Если сохранить данный скрипт в файле script.pl, то запускаем мы его:

perl script.pl <имя обрабатываемого файла


Количество просмотров :4947

Как в Mysql скопировать таблицу из одной базы в другую?

Все очень просто:

CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table SELECT * FROM db1.table;

db2 — база в которую копируем
db1 — база из которой копируем
table — название таблицы


Количество просмотров :16408

Bash скрипт для мониторинга хостов при помощи пинга

Не всегда есть необходимость городить огороды и настраивать всякие Исинги и Нагиосы, эти программы удобны если у вам необходимо мониторить действительно большое количество хостов и главное, большое количество параметров этих хостов. Если вам для мониторинга достаточно пинга, то вам пригодиться этот скрипт:

#!/bin/bash
# Ping monitoring script v0.12
# Добавляем ip или имена хостов через пробел.
HOSTS="172.16.0.1 eddnet.com 172.16.0.2"

# Количество пингов
COUNT=1

# Настройка почты
EMAILID="me@eddnet.org"
for mhost in $HOSTS
do
count=$(ping -c $COUNT $mhost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
SUBJECT="Проблемы с пингом на: $mhost"
# 100% failed
echo "[$date]: Host - $mhost не откликаеться" | mail -s "$SUBJECT" $EMAILID
fi
done

Количество просмотров :6752