Author Topic: [Mod] Automatic Database Backup  (Read 19620 times)

0 Members and 1 Guest are viewing this topic.

Rembrandt

  • Guest
[Mod] Automatic Database Backup
« on: January 25, 2012, 02:33:01 PM »
Hi!

The idea com from here: http://www.4homepages.de/forum/index.php?topic=18747.msg160485#msg160485

Update: Step 6.) added...

This is my version,features:
 - in the ACP, you can set the time in hours in which an automatic database backup should be made...
 - if users with the User-ID login, start a automatic database backup...
 - send database-backup as e-Mail.
 - the automatic database-backup zip files are stored in a separate sub directory below database. "data/database/autobackup"
 - and non zip database-backup files are stored in data/database/
 - in "ACP"/"Database Backup" the automatically generated backups can be imported back into the database.
 
1.) copy the files from the Attachment,the folder structure according, in your galery.

2.) search in admin/settings.php:

show_form_footer
($lang['save_changes'], ""2);

insert above:

show_table_separator
($setting_group["db_backup"], 2"setting_group_db_backup");
show_setting_row("db_backup_time");
show_setting_row("db_backup_last_backup");
show_setting_row("db_backup_event");
show_setting_row("db_backup_email""radio");


3.) search in lang/YourLang/admin.php "?>" and insert above:
(deutsch)

$setting_group
["db_backup"]="Datenbank Backup";
$setting['db_backup_time'] = "Zeit in Stunden in den ein Automatisches Datenbank Backup gemacht werden soll ?";
$setting['db_backup_last_backup'] = "Letztes Automatisches Backup am:";
$setting['db_backup_event'] = "Automatisches DB-Backup soll gestartet werden wenn sich User mit der folgenden User-ID einloggen :<br><span class=\"smalltext\">Mehrere User-IDs mit einen ',' getrennt eingeben.</span>";
$setting['db_backup_email'] = "Letztes DB-Backup als eMail versenden ?";

(english)

$setting_group
["db_backup"]="Database Backup";
$setting['db_backup_time'] = "Time in hours in which an automatic database backup should be made ?";
$setting['db_backup_last_backup'] = "Last automatic database backup :";
$setting['db_backup_event'] = "Automatic database backup start, if users with the following User-ID login :<br><span class=\"smalltext\">Multiple User-IDs must be separated by commas.</span>";
$setting['db_backup_email'] = "Send last automatic database backup as eMail ?";

3.1) search in lang/YourLang/main.php "?>" and insert above:
(deutsch)

$lang
['db_backup_subject'] = "Automatisches Datenbank Backup";
$lang['db_backup_header'] = "Automatisches Datenbank Backup von ";
$lang['db_backup_file'] = "Dateiname:";
$lang['db_backup_done'] = "Automatisches Datenbank-Backup erfolgreich durchgeführt !";

(english)

$lang
['db_backup_done'] = "Automatic database backup completed successfully !";
$lang['db_backup_file'] = "File Name:";
$lang['db_backup_subject'] = "Automatic Database-Backup";
$lang['db_backup_header'] = "Automatic Database-Backup from ";


4.) search in includes/functions.php "?>" and insert above:

function makebackup($current_time){
 global 
$site_db$lang$config$db_name$site_mailtemplate;
  
$path ROOT_PATH.DATABASE_DIR."/autobackup";
  if(!
is_dir($path)){
    
mkdir($path,0777); 
    
chmod($path,0777); 
  }
  
  include(
ROOT_PATH.'includes/db_utils.php');
    
$db_tables = array(
      
CATEGORIES_TABLE,
      
COMMENTS_TABLE,
      
GROUP_ACCESS_TABLE,
      
GROUP_MATCH_TABLE,
      
GROUPS_TABLE,
      
IMAGES_TABLE,
      
IMAGES_TEMP_TABLE,
      
LIGHTBOXES_TABLE,
      
POSTCARDS_TABLE,
      
SESSIONS_TABLE,
      
SESSIONVARS_TABLE,
      
SETTINGS_TABLE,
      
USERS_TABLE
  
);
   
$tables_info = array();
  
$crlf = (get_user_os() == "WIN") ? "\r\n" : ((get_user_os() == "MAC") ? "\r" "\n");

  
$tables_info = array();
  
$db = (get_mysql_version() >= 32306)  ? "`$db_name`" $db_name;
  
$result $site_db->query("SHOW TABLE STATUS FROM $db");
  if (
$result) {
    while (
$row $site_db->fetch_array($result)) {
      
$tables_info[$row['Name']] = ((isset($row['Type'])) ? $row['Type'] : $row['Engine']);
    }
    
$site_db->free_result($result);
  }
  
  
ob_start();
  @
ob_implicit_flush(0);

  echo 
"#----------------------------------------------------------".$crlf;
  echo 
"# Database Backup for ".$config['site_name'].$crlf;
  echo 
"# ".date("Y-m-d H:i").$crlf;
  echo 
"#----------------------------------------------------------".$crlf;
  foreach (
$db_tables as $table) {
    @
set_time_limit(1200);
    echo 
$crlf."#".$crlf."# Structure for Table ".$table.$crlf."#".$crlf;
    
get_table_def_mysql($table$crlf);
    
get_table_content_mysql($table$crlf);
  }
 
  
$contents ob_get_contents();
  
ob_end_clean();
  @
umask(0111);
  if (
$config['gz_compress'] == && extension_loaded("zlib")) {
    
$file_name "autobackup".date("YmdHi",$current_time).".sql.gz";
    
$fp gzopen(ROOT_PATH.DATABASE_DIR."/".$file_name"w9");
    
$ok gzwrite($fp$contents);
    
gzclose($fp);
  }
  else {
    
$file_name "autobackup".date("YmdHi",$current_time).".sql";
    
$fp fopen(ROOT_PATH.DATABASE_DIR."/".$file_name"w");
    
$ok fwrite($fp$contents);
    
fclose($fp);
  }
  
  if ((
is_dir($path)) && $ok) {
   
/* include(ROOT_PATH."includes/zip.php");
    $zipfile = new zipfile();

    @set_time_limit(120);
    if (!$file_data = @file_get_contents(ROOT_PATH.DATABASE_DIR."/".$file_name)) {
      continue;
    }
    $zipfile->add_file($file_data, $file_name);
    unset($file_data);
    $zipfile->store($path."/".$file_name.".zip");
    $zipfile_name = $file_name.".zip"; */
    
$backup_ok 1;
  } 
    
  if (
$config['db_backup_email']){
    
$config['upload_emails'] = str_replace(" """$config['upload_emails']);
    
$email_to $config['site_email'].",".$config['upload_emails'];
    
$email_subject $lang['db_backup_subject'];
    
$email_attachment_path $path."/".$zipfile_name;
    
$email_attachment_name $zipfile_name;
    
    
$site_mailtemplate->register_vars(array(
      
"lang_db_backup_file" => $lang['db_backup_file'],
      
"lang_date" => $lang['date'],
      
"file_name" => $file_name,
      
"subject" => $lang['db_backup_subject'],
      
"lang_header" => $lang['db_backup_header'],
      
"current_time" => format_date($config['date_format']." ".$config['time_format'], $current_time),
    ));
    unset(
$file_name);
    
$email_template "auto_backup_html";
    include(
ROOT_PATH.'includes/email_bridge.php');
    
$backup_ok 1;
  }
  return 
$backup_ok;
}

function 
startbackup($current_time){
  global  
$config,$site_template,$site_db;
  if(!
$config['db_backup_last_backup']){
      
$sql "INSERT INTO ".SETTINGS_TABLE." (setting_value, setting_name)
              VALUES ('
$current_time', 'db_backup_last_backup')";
  }  
  if(((
strtotime($config['db_backup_last_backup']) + 60 60 $config['db_backup_time'])) < ($current_time)){ // <
    
$backup_time format_date($config['date_format']." ".$config['time_format'], $current_time);
    
$backup_ok makebackup($current_time);
     if(
$backup_ok){ 
        
$sql "UPDATE ".SETTINGS_TABLE."
                SET setting_value = '
$backup_time'
                WHERE setting_name = 'db_backup_last_backup'"
;
      }
      
$result $site_db->query($sql);
    }
  return 
$backup_ok;



5.) search in includes/page_header.php:

//-----------------------------------------------------
//--- User Box ----------------------------------------

insert above:

  
if($config['db_backup_time'] > 0){
    
$event_user_id explode(",",$config['db_backup_event']);
    if (
in_array($user_info['user_id'], $event_user_id)){
     
$current_time time();
     
$backup_ok startbackup($current_time);
     
$msg = ($backup_ok) ? $lang['db_backup_done']:"";
    }
  }


6.) search in root/global.php:

define
('ICON_PATH'ROOT_PATH.TEMPLATE_DIR."/".$config['template_dir']."/icons");

insert below:

define
('EMAIL_PATH'ROOT_PATH."lang/".$config['language_dir']."/email");

6.1) search:

$site_template 
= new Template(TEMPLATE_PATH);

insert below:

$site_mailtemplate 
= new Template(EMAIL_PATH);


mfg Andi
« Last Edit: March 27, 2012, 07:22:46 PM by Rembrandt »

Offline nobby

  • 4images Guru
  • *******
  • Posts: 2.873
    • View Profile
Re: [Mod] Automatic Database Backup
« Reply #1 on: January 25, 2012, 02:38:02 PM »
Hallo Andi,

wird das eventuell beim nächsten Release implementiert sein?

Trotzdem Danke!

nobby
« Last Edit: January 25, 2012, 03:19:27 PM by nobby »

Rembrandt

  • Guest
Re: [Mod] Automatic Database Backup
« Reply #2 on: January 25, 2012, 03:52:04 PM »
.wird das eventuell beim nächsten Release implementiert sein?
.
kann ich dir leider nicht sagen, das liegt an @jan und @kai.
wenns nach mir ginge hätte ich sicher die hälfte all meiner Mods schon eingebaut.

mfg Andi

Offline ante226

  • Newbie
  • *
  • Posts: 24
    • View Profile
Re: [Mod] Automatic Database Backup
« Reply #3 on: September 16, 2012, 06:50:53 PM »
welche email benutzt das programm ???

und was kommt dort rein Letztes Automatisches Backup am:

wenn ich fragen darf


m-f-g
ante

Rembrandt

  • Guest
Re: [Mod] Automatic Database Backup
« Reply #4 on: September 17, 2012, 10:20:01 AM »
Hi!
.....wenn ich fragen darf
darfst du :) nur verstehe ich deine frage nicht.
Hast du step 1.) nicht gelesen?

mfg Andi

Offline ante226

  • Newbie
  • *
  • Posts: 24
    • View Profile
Re: [Mod] Automatic Database Backup
« Reply #5 on: September 17, 2012, 11:08:55 AM »
hat sich erledigt die email die im ACP eingetragen ist würd benutzt
kann man auch sich das backup als anhang schicken lassen ???


mfg
ante
« Last Edit: September 17, 2012, 11:28:32 AM by ante226 »

Rembrandt

  • Guest
Re: [Mod] Automatic Database Backup
« Reply #6 on: September 17, 2012, 01:42:32 PM »
.....kann man auch sich das backup als anhang schicken lassen ???
....
die *.zip sind alle als anhang...

Offline kai

  • Administrator
  • Addicted member
  • *****
  • Posts: 1.421
    • View Profile
    • 4images - Image Gallery Management System
Re: [Mod] Automatic Database Backup
« Reply #7 on: September 19, 2012, 08:22:00 AM »
ah, sehr hilfreich!
Your first three "must do" before you ask a question:
1. Forum rules
2. FAQ
3. Search

Offline diva78

  • Pre-Newbie
  • Posts: 5
    • View Profile
Re: [Mod] Automatic Database Backup
« Reply #8 on: November 25, 2013, 01:37:49 PM »
Hey Rembrandt,
zunächst mal 1000 Dank für Deine Mods, bin immer wieder begeistert!!! Aber das hast du sicher auch schon 1000 Mal gelesen...
Ich nutze Deinen Auto-Backup-Mod nun schon eine ganze Weile und frage mich immer wieder, wer das Backup gerade angestoßen hat.
Hab auch schon an diversen Stellen probiert zu schrauben, bin aber noch nicht zum gewünschten Ergebnis gekommen. An welchen Stellen kann und muss ich den angemeldeten Usernamen mitgeben, damit der mir in der Email mit angezeigt wird?
Vielen Dank!
Beste Grüße
die diva

Rembrandt

  • Guest
Re: [Mod] Automatic Database Backup
« Reply #9 on: November 25, 2013, 07:22:00 PM »
Hi!

Möchtest du dir die Änderungen wirklich antun?
Das Problem ist wenn das Datenbank Backup mehrere MB hat, wird es nicht mehr per eMail versendet (kommt auf den Provider wieviel MB per email versendet/empfangen werden können).
Noch einige MB mehr und es wird nicht mehr gezippt, dann kannst du es nur noch Lokal auf den Galerie Server speichern.

mfg Andi
« Last Edit: November 25, 2013, 08:06:51 PM by Rembrandt »

Offline diva78

  • Pre-Newbie
  • Posts: 5
    • View Profile
Re: [Mod] Automatic Database Backup
« Reply #10 on: November 26, 2013, 09:21:06 AM »
Ja, eigentlich wollte ich das. Klingt aber, als sei das dann doch aufwendiger als ich dachte...