PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: На что ругается PHP в скрипте дамба Mysql?
Поиск в теме | Версия для печати
Seruy
Отправлено: 25 Августа, 2009 - 15:20:59
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2009
Помог: 0 раз(а)
На что то ругается PHP в скрипте дамба Mysql, непойму что ему не нравится.
Сама ошибка выводится в консоли при дампе, цитата:
# ./mysqldbbackup.php
PHP Notice: Use of undefined constant _ROTATE_ - assumed '_ROTATE_' in /var/backup/mysqldbbackup.php on line 88
[ Processing database id 'dle' ]
Removing old backups...
Dumping database 'dle'...
Restoring owner...
[ Processing database id 'magneto' ]
Removing old backups...
Dumping database 'magneto'...
Restoring owner...
Всё успешно задампилось, но ошибка грозит на строку 88 а line 88 такова:
define(_ROTATE_, 1);
Весь скрипт дампа:
Спойлер (Отобразить )
CODE (
text ):
скопировать код в буфер обмена
#!/usr/bin/php
<?php
###########################################################################################
## MySQL DB Backup v 1.0 ##
###########################################################################################
## Copyright (c) 2008, Silver Ghost ##
## ##
## Это программа является свободным программным обеспечением. Вы можете ##
## распространять и/или модифицировать её согласно условиям Стандартной ##
## Общественной Лицензии GNU, опубликованной Фондом Свободного Программного ##
## Обеспечения, версии 3 или, по Вашему желанию, любой более поздней версии. ##
## Эта программа распространяется в надежде, что она будет полезной, но БЕЗ ##
## ВСЯКИХ ГАРАНТИЙ, в том числе подразумеваемых гарантий ТОВАРНОГО СОСТОЯНИЯ ПРИ ##
## ПРОДАЖЕ и ГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОГО ПРИМЕНЕНИЯ. Смотрите Стандартную ##
## Общественную Лицензию GNU для получения дополнительной информации. ##
## Вы должны были получить копию Стандартной Общественной Лицензии GNU вместе ##
## с программой. В случае её отсутствия, посмотрите <http://www.gnu.org/licenses/>. ##
## ##
###########################################################################################
#########################################################################################
## НЕ РЕДАКТИРУЙТЕ НИЧЕГО НИЖЕ ЭТОЙ СТРОКИ, если не знаете, что Вы делаете !!!
#########################################################################################
GetConfig();
if(_ROTATE_){
echo "!!! NOTICE: Rotate of files not configured in this day.\n";
}
# Разбираем массив со списком баз
while(list($id, $db) = each($dblist)){
# Установлены ли переменные
if($db['db'] && $db['archpath']){
# Удаляем последний слеш в пути к бекапу
RemoveTS($db['archpath']);
# Существует ли путь и есть ли возможность записи
if(file_exists($db['archpath']) && is_writable($db['archpath'])){
echo "\n[ Processing database id '".$id."' ]\n";
$file = $db['archpath']."/".$db['db']."_".date("Y-m-d").".sql.bz2";
# Необходима ли ротация
if(_ROTATE_){
echo " Removing old backups...\n";
Rotate($db);
}
echo " Dumping database '".$db['db']."'...\n";
exec("mysqldump --user=".$config['dbuser']." --password=".$config['dbpass']." ".$db['db']." | bzip2 -".$config['compress']." > ".$file);
echo " Restoring owner...\n";
exec("chown ".$db['owner']." ".$file);
} else {
echo " ERROR: Directory ".$db['archpath']." not exist or not writable.\n";
}
} else {
echo " ERROR: Check database name or path for backup for database id ".$id."\n";
}
}
# Читаем файл конфигурации
function GetConfig(){
global $config, $dblist, $bd;
# Читаем ini-файл
$pathtoini = dirname(__FILE__);
$ini = parse_ini_file($pathtoini."/var/backup/mysqldbbackup.ini", true);
# Переносим в конфиг опции
$config = $ini['Options'];
}
}
# Прибиваем переменную. Она больше не нужна
unset($ini);
# Парсим дни для ротации файлов и проверяем необходимость ротации
# Если в конфиге "*", то ставим флаг ротации
if($config['removedays'] == '*'){
define(_ROTATE_, 1);
# если нет, то вызываем функцию проверки необходимости ротации
} else {
$bd = split(',', str_replace(' ', '', trim($config['removedays'])));
VerifyRotateDay($bd);
}
}
# Проверяем совпадение дня ротации
function VerifyRotateDay(&$bd){
if (in_array(date('w'), $bd)){
define(_ROTATE_, 1);
} else {
define(_ROTATE_, 0);
}
}
# Производим ротацию
function Rotate(&$opt){
global $config;
# Вычитываем список файлов
$files = split("\n", trim(`ls -lt ${opt['archpath']} | awk {'print($8)'} | grep ${opt['db']} | grep sql | grep bz2`));
$i = count($files);
while($config['nob'] < $i){
# Удаляем лишнее
unlink($opt['archpath']."/".$files[$i-1]);
echo " Removed file ".$files[$i-1]."\n";
$i--;
}
}
?>
Скрипт делает дампы, всё номруль, но хочется ошибку убить, подскажите что ему не нравится в ROTATE?(Отредактировано автором: 26 Августа, 2009 - 10:13:57)
Seruy
Отправлено: 25 Августа, 2009 - 17:07:46
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2009
Помог: 0 раз(а)
Roler пишет: define("_ROTATE_", 1);
Премного багодарен вам сударь, пошёл править
Спустя 5 минут: Низкий поклон вам, и респект за помощь и терпение к нам смертным ;) Всё работает без запиночки
(Отредактировано автором: 26 Августа, 2009 - 10:12:45)
Seruy
Отправлено: 17 Сентября, 2009 - 10:07:33
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2009
Помог: 0 раз(а)
Парни а что в этом скрипте нужно поправить, чтобы бекапы сохранялись не ежедневно а ежемесячно.
Щас он в крон записан на ежедневное исполнение и хранит исправно 30 бекапов за 30 последних дней, и я его оставлю в работе.
Но хочу его переименовать, подправить\изменить на ежемесячное исполнение в кроне, и чтобы он подстраховал скажем делая бекапы раз в месяц за последние пол года.
mysqldbbackup.php выглядит так:
Спойлер (Отобразить )
CODE (
text ):
скопировать код в буфер обмена
#!/usr/bin/php
<?php
###########################################################################################
## MySQL DB Backup v 1.0 ##
###########################################################################################
## Copyright (c) 2008, Silver Ghost ##
## ##
## Это программа является свободным программным обеспечением. Вы можете ##
## распространять и/или модифицировать её согласно условиям Стандартной ##
## Общественной Лицензии GNU, опубликованной Фондом Свободного Программного ##
## Обеспечения, версии 3 или, по Вашему желанию, любой более поздней версии. ##
## Эта программа распространяется в надежде, что она будет полезной, но БЕЗ ##
## ВСЯКИХ ГАРАНТИЙ, в том числе подразумеваемых гарантий ТОВАРНОГО СОСТОЯНИЯ ПРИ ##
## ПРОДАЖЕ и ГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОГО ПРИМЕНЕНИЯ. Смотрите Стандартную ##
## Общественную Лицензию GNU для получения дополнительной информации. ##
## Вы должны были получить копию Стандартной Общественной Лицензии GNU вместе ##
## с программой. В случае её отсутствия, посмотрите <http://www.gnu.org/licenses/>. ##
## ##
###########################################################################################
#########################################################################################
## НЕ РЕДАКТИРУЙТЕ НИЧЕГО НИЖЕ ЭТОЙ СТРОКИ, если не знаете, что Вы делаете !!!
#########################################################################################
GetConfig();
if(!_ROTATE_){
echo "!!! NOTICE: Rotate of files not configured in this day.\n";
}
# Разбираем массив со списком баз
while(list($id, $db) = each($dblist)){
# Установлены ли переменные
if($db['db'] && $db['archpath']){
# Удаляем последний слеш в пути к бекапу
RemoveTS($db['archpath']);
# Существует ли путь и есть ли возможность записи
if(file_exists($db['archpath']) && is_writable($db['archpath'])){
echo "\n[ Processing database id '".$id."' ]\n";
$file = $db['archpath']."/".$db['db']."_".date("Y-m-d").".sql.bz2";
# Необходима ли ротация
if(!_ROTATE_){
echo " Removing old backups...\n";
Rotate($db);
}
echo " Dumping database '".$db['db']."'...\n";
exec("mysqldump --user=".$config['dbuser']." --password=".$config['dbpass']." ".$db['db']." | bzip2 -".$config['compress']." > ".$file);
echo " Restoring owner...\n";
exec("chown ".$db['owner']." ".$file);
} else {
echo " ERROR: Directory ".$db['archpath']." not exist or not writable.\n";
}
} else {
echo " ERROR: Check database name or path for backup for database id ".$id."\n";
}
}
# Читаем файл конфигурации
function GetConfig(){
global $config, $dblist, $bd;
# Читаем ini-файл
$pathtoini = dirname(__FILE__);
$ini = parse_ini_file($pathtoini."/mysqldbbackup.ini", true);
# Переносим в конфиг опции
$config = $ini['Options'];
# Составляем список баз для бекапа
while(list($key, $val) = each($ini)){
if($key != 'Options'){
$dblist[$key] = $val;
}
}
# Прибиваем переменную. Она больше не нужна
unset($ini);
# Парсим дни для ротации файлов и проверяем необходимость ротации
# Если в конфиге "*", то ставим флаг ротации
if($config['removedays'] == '*'){
define("_ROTATE_", 1);
# если нет, то вызываем функцию проверки необходимости ротации
} else {
$bd = split(',', str_replace(' ', '', trim($config['removedays'])));
VerifyRotateDay($bd);
}
}
# Проверяем совпадение дня ротации
function VerifyRotateDay(&$bd){
if (in_array(date('w'), $bd)){
define(_ROTATE_, 1);
} else {
define(_ROTATE_, 0);
}
}
# Производим ротацию
function Rotate(&$opt){
global $config;
# Вычитываем список файлов
$files = split("\n", trim(`ls -lt ${opt['archpath']} | awk {'print($8)'} | grep ${opt['db']} | grep sql | grep bz2`));
$i = count($files);
while($config['nob'] < $i){
# Удаляем лишнее
unlink($opt['archpath']."/".$files[$i-1]);
echo " Removed file ".$files[$i-1]."\n";
$i--;
}
}
# Удаляем замыкающий слеш
function RemoveTS(&$str){
if(substr($str, -1, 1) == '/'){
return substr($str, 0, -1);
}
}
?>
Файл настроек бекапа mysqldbbackup.ini выглядит так:
Спойлер (Отобразить )
CODE (
text ):
скопировать код в буфер обмена
## Настройки создания резервных копий
[Options]
removedays = *
nob = 30
compress = 9
dbuser = root
dbpass = pass
## Список баз данных для создания резервных копий
[magneto]
db = magneto
archpath = /var/backup/
owner = root:root
[forum]
db = forum
archpath = /var/backup/
owner = root:root
[mysql]
db = mysql
archpath = /var/backup/
owner = root:root
[verlihub]
db = verlihub
archpath = /var/backup/
owner = root:root
- removedays отвечает за настройку дня недели, в которые будет проводиться удаление
старых файлов резервных копий. Дни недели указываются через запятую (0 - воскресенье). Можно
указать "*", что означает каждый день;
- nob (number of backups) отвечает за количество хранимых бекапов;
- compress - коэффициент сжатия (0 - 9);
- dbuser - имя суперполльзователя (обычно root);
- dbpass - пароль для указанного пользователя.
(Отредактировано автором: 17 Сентября, 2009 - 10:10:17)
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB