URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6640
[ Назад ]

Исходное сообщение
"Автоматический ежедневный бекап всех баз данных"

Отправлено Arti , 02-Дек-09 19:13 
Если скрипты для создания автоматического ежедневного бекапа всех баз данных?

Собственно основная задача в том, чтобы скрипт делал бекапы всех баз данных, имеющихся на сервере (т.к. базы могут постоянно добавляться и добавлять их в бекап в ручную неудобно).
+ есть требование: чтобы для каждой базы создавался свой .sql файл.

Видела скрипты, которые позволяют реализовать все, кроме как - автоматическое построение спсика бд для бекапа (например: http://www.opennet.me/base/sys/mysql_backup.txt.html), но как я писала ранее, руками добавлять БД в список для бекапа не подходит.

Надеюсь на Вашу помощь :)


Содержание

Сообщения в этом обсуждении
"Автоматический ежедневный бекап всех баз данных"
Отправлено QuAzI , 02-Дек-09 19:54 
Насколько я помню, для бекапа InnoDB придётся всё равно стопать сервер. Так кто вам мешает бекапить всю /var/db/mysql - все MySQL-базы как правило внутрях, даже список не нужен. Список нужен если бекапить надо не все, а только конкретные. Вот чтобы sql-файл создавался это несколько сложнее и тормозно будет, а смысла как-то не улавливаю.

"Автоматический ежедневный бекап всех баз данных"
Отправлено TyLLIKAH , 02-Дек-09 20:16 
#!/bin/sh

backup_dir=/var/backups/mysql/

for i in `/usr/local/bin/mysql -ss -e "show databases;"`; do

    if [ $i != test ] && [ $i != information_schema ]
    then
        backup_name=$i.`date +%Y%m%d%H%M%S`.dump.bz
    /usr/local/bin/mysqldump $i | bzip2 > $backup_dir$backup_name
    fi
done

find $backup_dir*.bz -type f -a -mtime +7 -exec rm {}  \;

Только в дамп надо ключ добавить чтобы и процедуры тоже бекапил, если есть


"Автоматический ежедневный бекап всех баз данных"
Отправлено Arti , 03-Дек-09 00:35 
>[оверквотинг удален]
>        backup_name=$i.`date +%Y%m%d%H%M%S`.dump.bz
>    /usr/local/bin/mysqldump $i | bzip2 > $backup_dir$backup_name
>    fi
>done
>
>find $backup_dir*.bz -type f -a -mtime +7 -exec rm {}  \;
>
>
>Только в дамп надо ключ добавить чтобы и процедуры тоже бекапил, если
>есть

огромное спасибо!
буду сегодня тестировать

Процедур пока нет слава богу, если будут - можете написать пример как делать, если будут процедуры?


"Автоматический ежедневный бекап всех баз данных"
Отправлено Arti , 03-Дек-09 00:46 
подскажите пожалуйста еще, как задавать пароль при коннекте к серверу без промта?

просто вида:
/usr/local/bin/mysql --user=root -password=XXXXX

не получается (пишет, что доступ запрещен), хотя если делать просто
/usr/local/bin/mysql --user=root -password
(тогда он запрашивает и ввести пароль - нормально проходит)

а вот без промта не получается.


"Автоматический ежедневный бекап всех баз данных"
Отправлено Arti , 03-Дек-09 01:17 
с синтаксисом разобралась, протупила, для Mysqdump также нужен был логин и пароль :)

При дампе возникают ошибки вида:
mysqldump: Got error: 1049: Unknown database 'XXXXX' when selecting the database
mysqldump: Got error: 1556: You can't use locks with log tables. when using LOCK TABLES

из-за чего это может быть? и как бороться


"Автоматический ежедневный бекап всех баз данных"
Отправлено TyLLIKAH , 04-Дек-09 00:43 
>mysqldump: Got error: 1049: Unknown database 'XXXXX' when selecting the database

mysql> use 'XXXXX' работает ?


>mysqldump: Got error: 1556: You can't use locks with log tables. when using LOCK TABLES

это тоже можно отключить. только желательно представлять к чему это может привести.


"Автоматический ежедневный бекап всех баз данных"
Отправлено Alexander , 06-Дек-09 16:37 
Я попробовал написать на PHP следующий скрипт и у меня вывело на экран список баз MySQL... А дальше можно добавить mysqldump и имя файла db_name.sql... Мне интересно что будет дальше, поэтому сообщите мне, пожалуйста о ваших результатах... Если надо, то могу дописать скрипт до конца... Успехов!!!

#!/usr/bin/php
<?php
$db=mysql_connect('localhost','root','');
$rez=mysql_query('show databases');
echo mysql_error();
while ($row=mysql_fetch_assoc($rez))
{
echo $row['Database']."\n";
}

mysql_close($db);
?>