mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 03:06:37 +00:00
93_DbRep: dumpMySQL clientSide: add create database to dump file
git-svn-id: https://svn.fhem.de/fhem/trunk@28134 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
830b9aeb44
commit
bd309cccfe
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- change: 93_DbRep: dumpMySQL clientSide: add create database to dump file
|
||||||
- change: 93_DbRep: dumpMySQL clientSide: change dump file to stricter rights
|
- change: 93_DbRep: dumpMySQL clientSide: change dump file to stricter rights
|
||||||
- bugfix: 47_OBIS: Implement "nohacks" attribute
|
- bugfix: 47_OBIS: Implement "nohacks" attribute
|
||||||
- bugfix: 36_Shelly: undefinded values on restart
|
- bugfix: 36_Shelly: undefinded values on restart
|
||||||
|
@ -59,6 +59,7 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
|
|||||||
|
|
||||||
# Version History intern
|
# Version History intern
|
||||||
my %DbRep_vNotesIntern = (
|
my %DbRep_vNotesIntern = (
|
||||||
|
"8.52.13" => "07.11.2023 dumpMySQL clientSide: add create database to dump file ",
|
||||||
"8.52.12" => "05.11.2023 dumpMySQL clientSide: change the dump file to stricter rights ",
|
"8.52.12" => "05.11.2023 dumpMySQL clientSide: change the dump file to stricter rights ",
|
||||||
"8.52.11" => "17.09.2023 improve the markout in func DbRep_checkValidTimeSequence, Forum:#134973 ",
|
"8.52.11" => "17.09.2023 improve the markout in func DbRep_checkValidTimeSequence, Forum:#134973 ",
|
||||||
"8.52.10" => "09.07.2023 fix wrong SQL syntax for PostgreSQL -> DbRep_createSelectSql, Forum:#134170 ",
|
"8.52.10" => "09.07.2023 fix wrong SQL syntax for PostgreSQL -> DbRep_createSelectSql, Forum:#134170 ",
|
||||||
@ -8249,10 +8250,7 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
my $hash = $paref->{hash};
|
my $hash = $paref->{hash};
|
||||||
my $name = $paref->{name};
|
my $name = $paref->{name};
|
||||||
|
|
||||||
my $dbname = $hash->{DATABASE};
|
|
||||||
my $dump_path = AttrVal ($name, "dumpDirLocal", $dbrep_dump_path_def);
|
my $dump_path = AttrVal ($name, "dumpDirLocal", $dbrep_dump_path_def);
|
||||||
$dump_path = $dump_path."/" unless($dump_path =~ m/\/$/);
|
|
||||||
|
|
||||||
my $optimize_tables_beforedump = AttrVal ($name, "optimizeTablesBeforeDump", 0);
|
my $optimize_tables_beforedump = AttrVal ($name, "optimizeTablesBeforeDump", 0);
|
||||||
my $memory_limit = AttrVal ($name, "dumpMemlimit", 100000);
|
my $memory_limit = AttrVal ($name, "dumpMemlimit", 100000);
|
||||||
my $my_comment = AttrVal ($name, "dumpComment", "");
|
my $my_comment = AttrVal ($name, "dumpComment", "");
|
||||||
@ -8261,16 +8259,13 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
my $ead = AttrVal ($name, "executeAfterProc", undef);
|
my $ead = AttrVal ($name, "executeAfterProc", undef);
|
||||||
|
|
||||||
my $mysql_commentstring = "-- ";
|
my $mysql_commentstring = "-- ";
|
||||||
my $character_set = "utf8";
|
|
||||||
my $repver = $hash->{HELPER}{VERSION};
|
my $repver = $hash->{HELPER}{VERSION};
|
||||||
my $sql_text = '';
|
my $dbname = $hash->{DATABASE};
|
||||||
my $sql_file = '';
|
$dump_path = $dump_path."/" unless($dump_path =~ m/\/$/);
|
||||||
my $dbpraefix = "";
|
|
||||||
|
|
||||||
my ($sth,$tablename,$sql_create,$rct,$insert,$first_insert,$backupfile,$drc,$drh,$e,
|
my ($sth,$tablename,$rct,$insert,$backupfile,$drc,$drh,$filesize,$totalrecords);
|
||||||
$sql_daten,$inhalt,$filesize,$totalrecords,$status_start,$status_end);
|
my (@ar,@tablenames,@tables,@ctab);
|
||||||
my (@ar,@tablerecords,@tablenames,@tables,@ergebnis);
|
my (%db_tables, %db_tables_views);
|
||||||
my (%db_tables);
|
|
||||||
|
|
||||||
my $bst = [gettimeofday]; # Background-Startzeit
|
my $bst = [gettimeofday]; # Background-Startzeit
|
||||||
|
|
||||||
@ -8279,7 +8274,7 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
##################### Beginn Dump ########################
|
##################### Beginn Dump ########################
|
||||||
############################################################
|
############################################################
|
||||||
|
|
||||||
undef(%db_tables);
|
undef %db_tables;
|
||||||
|
|
||||||
# Startzeit ermitteln
|
# Startzeit ermitteln
|
||||||
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
|
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
|
||||||
@ -8305,42 +8300,46 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
|
|
||||||
my @mysql_version = $sth->fetchrow;
|
my @mysql_version = $sth->fetchrow;
|
||||||
my @v = split(/\./,$mysql_version[0]);
|
my @v = split(/\./,$mysql_version[0]);
|
||||||
|
my $collation = '';
|
||||||
|
my $dbcharset = '';
|
||||||
|
|
||||||
if ($v[0] >= 5 || ($v[0] >= 4 && $v[1] >= 1) ) { # mysql Version >= 4.1
|
if ($v[0] >= 5 || ($v[0] >= 4 && $v[1] >= 1) ) { # mysql Version >= 4.1
|
||||||
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, "SET NAMES '".$character_set."'"); # get standard encoding of MySQl-Server
|
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, qq(SHOW VARIABLES LIKE 'collation_database'));
|
||||||
return "$name|$err" if ($err);
|
|
||||||
|
|
||||||
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, "SHOW VARIABLES LIKE 'character_set_connection'");
|
|
||||||
return "$name|$err" if($err);
|
return "$name|$err" if($err);
|
||||||
|
|
||||||
@ar = $sth->fetchrow;
|
@ar = $sth->fetchrow;
|
||||||
$character_set = $ar[1];
|
|
||||||
|
if ($ar[1]) {
|
||||||
|
$collation = $ar[1];
|
||||||
|
$dbcharset = (split '_', $collation, 2)[0];
|
||||||
|
|
||||||
|
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, qq(SET NAMES "$dbcharset" COLLATE "$collation"));
|
||||||
|
return "$name|$err" if($err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else { # mysql Version < 4.1 -> no SET NAMES available
|
else { # mysql Version < 4.1 -> no SET NAMES available
|
||||||
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, "SHOW VARIABLES LIKE 'character_set'"); # get standard encoding of MySQl-Server
|
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, "SHOW VARIABLES LIKE 'dbcharset'"); # get standard encoding of MySQl-Server
|
||||||
return "$name|$err" if($err);
|
return "$name|$err" if($err);
|
||||||
|
|
||||||
@ar = $sth->fetchrow;
|
@ar = $sth->fetchrow;
|
||||||
|
|
||||||
if (defined($ar[1])) {
|
if ($ar[1]) {
|
||||||
$character_set = $ar[1];
|
$dbcharset = $ar[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3 ($name, 3, "DbRep $name - Characterset of collection set to $character_set. ");
|
Log3 ($name, 3, "DbRep $name - Characterset of collection set to $dbcharset. ");
|
||||||
|
|
||||||
undef(@tables);
|
|
||||||
undef(@tablerecords);
|
|
||||||
my %db_tables_views;
|
|
||||||
my $t = 0;
|
my $t = 0;
|
||||||
my $r = 0;
|
my $r = 0;
|
||||||
my $st_e = "\n";
|
|
||||||
my $value = 0;
|
my $value = 0;
|
||||||
my $engine = '';
|
my $engine = '';
|
||||||
|
my $dbpraefix = '';
|
||||||
my $query = "SHOW TABLE STATUS FROM `$dbname`"; # Eigenschaften der vorhandenen Tabellen ermitteln (SHOW TABLE STATUS -> Rows sind nicht exakt !!)
|
my $query = "SHOW TABLE STATUS FROM `$dbname`"; # Eigenschaften der vorhandenen Tabellen ermitteln (SHOW TABLE STATUS -> Rows sind nicht exakt !!)
|
||||||
|
|
||||||
if ($dbpraefix ne "") {
|
if ($dbpraefix ne "") {
|
||||||
$query .= " LIKE '$dbpraefix%'";
|
$query .= " LIKE '$dbpraefix%'";
|
||||||
|
|
||||||
Log3 ($name, 3, "DbRep $name - Searching for tables inside database $dbname with prefix $dbpraefix....");
|
Log3 ($name, 3, "DbRep $name - Searching for tables inside database $dbname with prefix $dbpraefix....");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -8351,7 +8350,7 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
return "$name|$err" if($err);
|
return "$name|$err" if($err);
|
||||||
|
|
||||||
while ( $value = $sth->fetchrow_hashref()) {
|
while ( $value = $sth->fetchrow_hashref()) {
|
||||||
$value->{skip_data} = 0; #defaut -> backup data of table
|
$value->{skip_data} = 0; # default -> backup data of table
|
||||||
|
|
||||||
Log3 ($name, 5, "DbRep $name - ......... Table definition found: .........");
|
Log3 ($name, 5, "DbRep $name - ......... Table definition found: .........");
|
||||||
|
|
||||||
@ -8426,7 +8425,7 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
return $err if($err);
|
return $err if($err);
|
||||||
}
|
}
|
||||||
|
|
||||||
$st_e .= "-- TABLE-INFO\n"; # Tabelleneigenschaften für SQL-File ermitteln
|
my $part = ''; # Tabelleneigenschaften für SQL-File ermitteln
|
||||||
|
|
||||||
for $tablename (@tablenames) {
|
for $tablename (@tablenames) {
|
||||||
my $dump_table = 1;
|
my $dump_table = 1;
|
||||||
@ -8437,24 +8436,28 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($dump_table == 1) { # how many rows
|
if ($dump_table == 1) {
|
||||||
$sql_create = "SELECT count(*) FROM `$tablename`";
|
|
||||||
|
|
||||||
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql_create);
|
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, qq(SELECT count(*) FROM `$tablename`));
|
||||||
return "$name|$err" if($err);
|
return "$name|$err" if($err);
|
||||||
|
|
||||||
$db_tables{$tablename}{Rows} = $sth->fetchrow;
|
$db_tables{$tablename}{Rows} = $sth->fetchrow; # how many rows
|
||||||
$sth->finish;
|
$sth->finish;
|
||||||
|
|
||||||
$r += $db_tables{$tablename}{Rows};
|
$r += $db_tables{$tablename}{Rows};
|
||||||
push(@tables,$db_tables{$tablename}{Name}); # add tablename to backuped tables
|
push @tables, $db_tables{$tablename}{Name}; # add tablename to backuped tables
|
||||||
$t++;
|
$t++;
|
||||||
|
|
||||||
if (!defined $db_tables{$tablename}{Update_time}) {
|
if (!defined $db_tables{$tablename}{Update_time}) {
|
||||||
$db_tables{$tablename}{Update_time} = 0;
|
$db_tables{$tablename}{Update_time} = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$st_e .= $mysql_commentstring."TABLE: $db_tables{$tablename}{Name} | Rows: $db_tables{$tablename}{Rows} | Length: ".($db_tables{$tablename}{Data_length}+$db_tables{$tablename}{Index_length})." | Engine: $db_tables{$tablename}{Engine}\n";
|
$part .= $mysql_commentstring;
|
||||||
|
$part .= "TABLE: $db_tables{$tablename}{Name} | ";
|
||||||
|
$part .= "Rows: $db_tables{$tablename}{Rows} | ";
|
||||||
|
$part .= "Length: ".($db_tables{$tablename}{Data_length} + $db_tables{$tablename}{Index_length})." | ";
|
||||||
|
$part .= "Engine: $db_tables{$tablename}{Engine}";
|
||||||
|
$part .= "\n";
|
||||||
|
|
||||||
if ($db_tables{$tablename}{Name} eq "current") {
|
if ($db_tables{$tablename}{Name} eq "current") {
|
||||||
$drc = $db_tables{$tablename}{Rows};
|
$drc = $db_tables{$tablename}{Rows};
|
||||||
@ -8466,28 +8469,40 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$st_e .= "-- EOF TABLE-INFO";
|
$part .= $mysql_commentstring."EOF TABLE-INFO";
|
||||||
|
|
||||||
Log3 ($name, 3, "DbRep $name - Found ".(@tables)." tables with $r records.");
|
Log3 ($name, 3, "DbRep $name - Found ".(@tables)." tables with $r records.");
|
||||||
|
|
||||||
# AUFBAU der Statuszeile in SQL-File:
|
## Headerzeilen aufbauen
|
||||||
# -- Status | tabellenzahl | datensaetze | Datenbankname | Kommentar | MySQLVersion | Charset | EXTINFO
|
##########################
|
||||||
#
|
my $sql_text = $mysql_commentstring."DB Name: $dbname";
|
||||||
$status_start = $mysql_commentstring."Status | Tables: $t | Rows: $r ";
|
$sql_text .= "\n";
|
||||||
$status_end = "| DB: $dbname | Comment: $my_comment | MySQL-Version: $mysql_version[0] ";
|
$sql_text .= $mysql_commentstring."DB Character set: $dbcharset";
|
||||||
$status_end .= "| Charset: $character_set $st_e\n".
|
$sql_text .= "\n";
|
||||||
$mysql_commentstring."Dump created on $CTIME_String by DbRep-Version $repver\n".$mysql_commentstring;
|
$sql_text .= $mysql_commentstring."MySQL Version: $mysql_version[0]";
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= $mysql_commentstring."Dump created on $CTIME_String by DbRep-Version $repver";
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= $mysql_commentstring."Comment: $my_comment";
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= $mysql_commentstring."TABLE-INFO";
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= $mysql_commentstring."TABLES: $t, Rows: $r";
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= $part;
|
||||||
|
$sql_text .= "\n\n";
|
||||||
|
|
||||||
$sql_text = $status_start.$status_end;
|
## neues SQL Ausgabefile mit Header anlegen
|
||||||
|
#############################################
|
||||||
|
my $sql_file = '';
|
||||||
|
|
||||||
# neues SQL-Ausgabefile anlegen
|
($err, $sql_file, $backupfile) = DbRep_NewDumpFilename ( { sql_text => $sql_text,
|
||||||
($err, $sql_text, $first_insert, $sql_file, $backupfile) = DbRep_NewDumpFilename ( { sql_text => $sql_text,
|
|
||||||
dump_path => $dump_path,
|
dump_path => $dump_path,
|
||||||
dbname => $dbname,
|
dbname => $dbname,
|
||||||
time_stamp => $time_stamp,
|
time_stamp => $time_stamp
|
||||||
character_set => $character_set
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($err) {
|
if ($err) {
|
||||||
Log3 ($name, 2, "DbRep $name - $err");
|
Log3 ($name, 2, "DbRep $name - $err");
|
||||||
$err = encode_base64 ($err, "");
|
$err = encode_base64 ($err, "");
|
||||||
@ -8497,56 +8512,109 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
Log3 ($name, 5, "DbRep $name - New dump file $sql_file was created");
|
Log3 ($name, 5, "DbRep $name - New dump file $sql_file was created");
|
||||||
}
|
}
|
||||||
|
|
||||||
##################### jede einzelne Tabelle dumpen ########################
|
my $first_insert = 0;
|
||||||
|
|
||||||
|
## DB Einstellungen
|
||||||
|
#####################
|
||||||
|
|
||||||
|
$sql_text = "/*!40101 SET NAMES '".$dbcharset."' */;";
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= "SET FOREIGN_KEY_CHECKS=0;";
|
||||||
|
$sql_text .= "\n\n";
|
||||||
|
|
||||||
|
DbRep_WriteToDumpFile ($sql_text, $sql_file);
|
||||||
|
|
||||||
|
## DB Create Statement einfügen
|
||||||
|
#################################
|
||||||
|
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, qq(SHOW CREATE DATABASE IF NOT EXISTS $dbname));
|
||||||
|
return "$name|$err" if($err);
|
||||||
|
|
||||||
|
my $db_create = $sth->fetchrow;
|
||||||
|
$sth->finish;
|
||||||
|
|
||||||
|
$sql_text = $mysql_commentstring;
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= $mysql_commentstring;
|
||||||
|
$sql_text .= "Create database";
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= $mysql_commentstring;
|
||||||
|
$sql_text .= "\n";
|
||||||
|
|
||||||
|
$sql_text .= $db_create.';';
|
||||||
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= "USE `$dbname`;";
|
||||||
|
$sql_text .= "\n\n";
|
||||||
|
|
||||||
|
DbRep_WriteToDumpFile ($sql_text, $sql_file);
|
||||||
|
|
||||||
|
## jede einzelne Tabelle dumpen
|
||||||
|
#################################
|
||||||
$totalrecords = 0;
|
$totalrecords = 0;
|
||||||
|
$sql_text = "";
|
||||||
|
|
||||||
for $tablename (@tables) { # first get CREATE TABLE Statement
|
for $tablename (@tables) { # first get CREATE TABLE Statement
|
||||||
if ($dbpraefix eq "" || ($dbpraefix ne "" && substr($tablename, 0, length($dbpraefix)) eq $dbpraefix)) {
|
if ($dbpraefix eq "" || ($dbpraefix ne "" && substr($tablename, 0, length($dbpraefix)) eq $dbpraefix)) {
|
||||||
Log3 ($name, 3, "DbRep $name - Dumping table $tablename (Type ".$db_tables{$tablename}{Engine}."):");
|
Log3 ($name, 3, "DbRep $name - Dumping table $tablename (Type ".$db_tables{$tablename}{Engine}."):");
|
||||||
|
|
||||||
$a = "\n\n$mysql_commentstring\n$mysql_commentstring"."Table structure for table `$tablename`\n$mysql_commentstring\n";
|
$part = $mysql_commentstring;
|
||||||
|
$part .= "\n";
|
||||||
|
$part .= $mysql_commentstring;
|
||||||
|
$part .= "Table structure of table `$tablename`";
|
||||||
|
$part .= "\n";
|
||||||
|
$part .= $mysql_commentstring;
|
||||||
|
$part .= "\n";
|
||||||
|
|
||||||
if ($db_tables{$tablename}{Engine} ne 'VIEW' ) {
|
if ($db_tables{$tablename}{Engine} ne 'VIEW' ) {
|
||||||
$a .= "DROP TABLE IF EXISTS `$tablename`;\n";
|
$part .= "DROP TABLE IF EXISTS `$tablename`;";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$a .= "DROP VIEW IF EXISTS `$tablename`;\n";
|
$part .= "DROP VIEW IF EXISTS `$tablename`;";
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql_text .= $a;
|
$sql_text .= $part;
|
||||||
$sql_create = "SHOW CREATE TABLE `$tablename`";
|
$sql_text .= "\n";
|
||||||
|
|
||||||
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql_create);
|
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, qq(SHOW CREATE TABLE `$tablename`));
|
||||||
return "$name|$err" if($err);
|
return "$name|$err" if($err);
|
||||||
|
|
||||||
@ergebnis = $sth->fetchrow;
|
@ctab = $sth->fetchrow;
|
||||||
$sth->finish;
|
$sth->finish;
|
||||||
$a = $ergebnis[1].";\n";
|
|
||||||
|
|
||||||
if (length($a) < 10) {
|
$part = $ctab[1].";";
|
||||||
$err = "Fatal error! Couldn't read CREATE-Statement of table `$tablename`! This backup might be incomplete! Check your database for errors. MySQL-Error: ".$DBI::errstr;
|
$part .= "\n";
|
||||||
|
|
||||||
|
if (length($part) < 10) {
|
||||||
|
$err = "Fatal error! Couldn't read CREATE-Statement for table `$tablename`! This backup might be incomplete! Check your database for errors. MySQL-Error: ".$DBI::errstr;
|
||||||
|
|
||||||
Log3 ($name, 2, "DbRep $name - $err");
|
Log3 ($name, 2, "DbRep $name - $err");
|
||||||
|
|
||||||
|
return "$name|$err";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$sql_text .= $a;
|
$sql_text .= $part;
|
||||||
Log3 ($name, 5, "DbRep $name - Create-SQL found:\n$a");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log3 ($name, 5, "DbRep $name - Create-SQL found:\n$part");
|
||||||
|
|
||||||
if ($db_tables{$tablename}{skip_data} == 0) {
|
if ($db_tables{$tablename}{skip_data} == 0) {
|
||||||
$sql_text .= "\n$mysql_commentstring\n$mysql_commentstring"."Dumping data for table `$tablename`\n$mysql_commentstring\n";
|
$sql_text .= "\n";
|
||||||
|
$sql_text .= "$mysql_commentstring\n";
|
||||||
|
$sql_text .= "$mysql_commentstring";
|
||||||
|
$sql_text .= "Dumping data of table `$tablename`\n";
|
||||||
|
$sql_text .= "$mysql_commentstring\n";
|
||||||
|
|
||||||
$sql_text .= "/*!40000 ALTER TABLE `$tablename` DISABLE KEYS */;";
|
$sql_text .= "/*!40000 ALTER TABLE `$tablename` DISABLE KEYS */;";
|
||||||
|
|
||||||
DbRep_WriteToDumpFile ($sql_text, $sql_file);
|
DbRep_WriteToDumpFile ($sql_text, $sql_file);
|
||||||
|
|
||||||
$sql_text = "";
|
$sql_text = "";
|
||||||
|
|
||||||
$fieldlist = "(";
|
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, qq(SHOW FIELDS FROM `$tablename`));
|
||||||
$sql_create = "SHOW FIELDS FROM `$tablename`"; # build fieldlist
|
|
||||||
|
|
||||||
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql_create);
|
|
||||||
return "$name|$err" if($err);
|
return "$name|$err" if($err);
|
||||||
|
|
||||||
while (@ar = $sth->fetchrow) {
|
$fieldlist = "(";
|
||||||
|
|
||||||
|
while (@ar = $sth->fetchrow) { # build fieldlist
|
||||||
$fieldlist .= "`".$ar[0]."`,";
|
$fieldlist .= "`".$ar[0]."`,";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8564,25 +8632,25 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
$insert = "INSERT INTO `$tablename` $fieldlist VALUES ("; # default beginning for INSERT-String
|
$insert = "INSERT INTO `$tablename` $fieldlist VALUES ("; # default beginning for INSERT-String
|
||||||
$first_insert = 0;
|
$first_insert = 0;
|
||||||
|
|
||||||
$sql_daten = "SELECT * FROM `$tablename` LIMIT ".$ttt.",".$dumpspeed.";"; # get rows (parts)
|
my $sql_daten = "SELECT * FROM `$tablename` LIMIT ".$ttt.",".$dumpspeed.";"; # get rows (parts)
|
||||||
|
|
||||||
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql_daten);
|
($err, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql_daten);
|
||||||
return "$name|$err" if($err);
|
return "$name|$err" if($err);
|
||||||
|
|
||||||
while ( @ar = $sth->fetchrow) { # Start the insert
|
while ( @ar = $sth->fetchrow) { # Start the insert
|
||||||
if ($first_insert == 0) {
|
if ($first_insert == 0) {
|
||||||
$a = "\n$insert";
|
$part = "\n$insert";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$a = "\n(";
|
$part = "\n(";
|
||||||
}
|
}
|
||||||
|
|
||||||
for $inhalt(@ar) { # quote all values
|
for my $cont (@ar) { # quote all values
|
||||||
$a .= $dbh->quote($inhalt).",";
|
$part .= $dbh->quote($cont).",";
|
||||||
}
|
}
|
||||||
|
|
||||||
$a = substr($a,0, length($a)-1).");"; # remove trailing ',' and add end-sql
|
$part = substr ($part, 0, length($part)-1).");"; # remove trailing ',' and add end-sql
|
||||||
$sql_text .= $a;
|
$sql_text .= $part;
|
||||||
|
|
||||||
if ($memory_limit > 0 && length($sql_text) > $memory_limit) {
|
if ($memory_limit > 0 && length($sql_text) > $memory_limit) {
|
||||||
($err, $filesize) = DbRep_WriteToDumpFile ($sql_text, $sql_file);
|
($err, $filesize) = DbRep_WriteToDumpFile ($sql_text, $sql_file);
|
||||||
@ -8590,12 +8658,15 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
$sql_text = "";
|
$sql_text = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$sth->finish;
|
$sth->finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql_text .= "\n/*!40000 ALTER TABLE `$tablename` ENABLE KEYS */;\n";
|
$sql_text .= "\n/*!40000 ALTER TABLE `$tablename` ENABLE KEYS */;\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
($err, $filesize) = DbRep_WriteToDumpFile ($sql_text, $sql_file); # write sql commands to file
|
($err, $filesize) = DbRep_WriteToDumpFile ($sql_text, $sql_file); # write sql commands to file
|
||||||
|
|
||||||
$sql_text = "";
|
$sql_text = "";
|
||||||
|
|
||||||
if ($db_tables{$tablename}{skip_data} == 0) {
|
if ($db_tables{$tablename}{skip_data} == 0) {
|
||||||
@ -8609,16 +8680,17 @@ sub DbRep_mysql_DumpClientSide {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# end
|
# end
|
||||||
|
|
||||||
DbRep_WriteToDumpFile("\nSET FOREIGN_KEY_CHECKS=1;\n", $sql_file);
|
DbRep_WriteToDumpFile("\nSET FOREIGN_KEY_CHECKS=1;\n", $sql_file);
|
||||||
($err, $filesize) = DbRep_WriteToDumpFile ($mysql_commentstring."EOB\n", $sql_file);
|
($err, $filesize) = DbRep_WriteToDumpFile ($mysql_commentstring."EOB\n", $sql_file);
|
||||||
|
|
||||||
# Datenbankverbindung schliessen
|
|
||||||
$sth->finish();
|
$sth->finish();
|
||||||
$dbh->disconnect();
|
$dbh->disconnect();
|
||||||
|
|
||||||
my $rt = tv_interval($st); # SQL-Laufzeit ermitteln
|
my $rt = tv_interval($st); # SQL-Laufzeit ermitteln
|
||||||
|
|
||||||
my $compress = AttrVal ($name, "dumpCompress", 0); # Dumpfile komprimieren wenn dumpCompress=1
|
my $compress = AttrVal ($name, "dumpCompress", 0); # Dumpfile komprimieren wenn dumpCompress=1
|
||||||
|
|
||||||
if ($compress) {
|
if ($compress) {
|
||||||
($err, $backupfile, $filesize) = DbRep_dumpCompress ($hash, $backupfile);
|
($err, $backupfile, $filesize) = DbRep_dumpCompress ($hash, $backupfile);
|
||||||
}
|
}
|
||||||
@ -9214,6 +9286,7 @@ sub DbRep_mysql_RestoreClientSide {
|
|||||||
|
|
||||||
if ($bfile =~ m/.*.gzip$/) { # Dumpfile dekomprimieren wenn gzip
|
if ($bfile =~ m/.*.gzip$/) { # Dumpfile dekomprimieren wenn gzip
|
||||||
($err,$bfile) = DbRep_dumpUnCompress($hash,$bfile);
|
($err,$bfile) = DbRep_dumpUnCompress($hash,$bfile);
|
||||||
|
|
||||||
if ($err) {
|
if ($err) {
|
||||||
$err = encode_base64($err,"");
|
$err = encode_base64($err,"");
|
||||||
$dbh->disconnect;
|
$dbh->disconnect;
|
||||||
@ -9242,7 +9315,7 @@ sub DbRep_mysql_RestoreClientSide {
|
|||||||
|
|
||||||
while (<FH>) {
|
while (<FH>) {
|
||||||
$tmp = $_;
|
$tmp = $_;
|
||||||
chomp($tmp);
|
chomp $tmp;
|
||||||
|
|
||||||
if (!$tmp || substr($tmp, 0, 2) eq "--") {
|
if (!$tmp || substr($tmp, 0, 2) eq "--") {
|
||||||
next;
|
next;
|
||||||
@ -9252,17 +9325,21 @@ sub DbRep_mysql_RestoreClientSide {
|
|||||||
|
|
||||||
if (substr($line,-1) eq ";") {
|
if (substr($line,-1) eq ";") {
|
||||||
if ($line !~ /^INSERT INTO.*$/) {
|
if ($line !~ /^INSERT INTO.*$/) {
|
||||||
|
Log3 ($name, 4, "DbRep $name - do query: $line");
|
||||||
|
|
||||||
eval { $dbh->do($line);
|
eval { $dbh->do($line);
|
||||||
};
|
}
|
||||||
if ($@) {
|
or do {
|
||||||
$e = $@;
|
$e = $@;
|
||||||
$err = encode_base64($e,"");
|
$err = encode_base64($e,"");
|
||||||
Log3 ($name, 1, "DbRep $name - last query: $line");
|
|
||||||
Log3 ($name, 1, "DbRep $name - $e");
|
|
||||||
close(FH);
|
close(FH);
|
||||||
$dbh->disconnect;
|
$dbh->disconnect;
|
||||||
|
|
||||||
|
Log3 ($name, 1, "DbRep $name - last query: $line");
|
||||||
|
Log3 ($name, 1, "DbRep $name - $e");
|
||||||
|
|
||||||
return "$name|$err";
|
return "$name|$err";
|
||||||
}
|
};
|
||||||
|
|
||||||
$line = '';
|
$line = '';
|
||||||
next;
|
next;
|
||||||
@ -9297,16 +9374,18 @@ sub DbRep_mysql_RestoreClientSide {
|
|||||||
$query = $query.";";
|
$query = $query.";";
|
||||||
|
|
||||||
eval { $dbh->do($query);
|
eval { $dbh->do($query);
|
||||||
};
|
}
|
||||||
if ($@) {
|
or do {
|
||||||
$e = $@;
|
$e = $@;
|
||||||
$err = encode_base64($e,"");
|
$err = encode_base64($e,"");
|
||||||
Log3 ($name, 1, "DbRep $name - last query: $query");
|
|
||||||
Log3 ($name, 1, "DbRep $name - $e");
|
|
||||||
close(FH);
|
close(FH);
|
||||||
$dbh->disconnect;
|
$dbh->disconnect;
|
||||||
|
|
||||||
|
Log3 ($name, 1, "DbRep $name - last query: $query");
|
||||||
|
Log3 ($name, 1, "DbRep $name - $e");
|
||||||
|
|
||||||
return "$name|$err";
|
return "$name|$err";
|
||||||
}
|
};
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$line =~ /INSERT INTO (.*) VALUES \((.*)\);/;
|
$line =~ /INSERT INTO (.*) VALUES \((.*)\);/;
|
||||||
@ -9323,17 +9402,20 @@ sub DbRep_mysql_RestoreClientSide {
|
|||||||
|
|
||||||
if (length($query) >= $i_max) {
|
if (length($query) >= $i_max) {
|
||||||
$query = $query.";";
|
$query = $query.";";
|
||||||
|
|
||||||
eval { $dbh->do($query);
|
eval { $dbh->do($query);
|
||||||
};
|
}
|
||||||
if ($@) {
|
or do {
|
||||||
$e = $@;
|
$e = $@;
|
||||||
$err = encode_base64($e,"");
|
$err = encode_base64($e,"");
|
||||||
Log3 ($name, 1, "DbRep $name - last query: $query");
|
|
||||||
Log3 ($name, 1, "DbRep $name - $e");
|
|
||||||
close(FH);
|
close(FH);
|
||||||
$dbh->disconnect;
|
$dbh->disconnect;
|
||||||
|
|
||||||
|
Log3 ($name, 1, "DbRep $name - last query: $query");
|
||||||
|
Log3 ($name, 1, "DbRep $name - $e");
|
||||||
|
|
||||||
return "$name|$err";
|
return "$name|$err";
|
||||||
}
|
};
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$query = '';
|
$query = '';
|
||||||
@ -9345,16 +9427,18 @@ sub DbRep_mysql_RestoreClientSide {
|
|||||||
}
|
}
|
||||||
|
|
||||||
eval { $dbh->do($query) if($i);
|
eval { $dbh->do($query) if($i);
|
||||||
};
|
}
|
||||||
if ($@) {
|
or do {
|
||||||
$e = $@;
|
$e = $@;
|
||||||
$err = encode_base64($e,"");
|
$err = encode_base64($e,"");
|
||||||
Log3 ($name, 1, "DbRep $name - last query: $query");
|
|
||||||
Log3 ($name, 1, "DbRep $name - $e");
|
|
||||||
close(FH);
|
close(FH);
|
||||||
$dbh->disconnect;
|
$dbh->disconnect;
|
||||||
|
|
||||||
|
Log3 ($name, 1, "DbRep $name - last query: $query");
|
||||||
|
Log3 ($name, 1, "DbRep $name - $e");
|
||||||
|
|
||||||
return "$name|$err";
|
return "$name|$err";
|
||||||
}
|
};
|
||||||
|
|
||||||
$dbh->disconnect;
|
$dbh->disconnect;
|
||||||
close(FH);
|
close(FH);
|
||||||
@ -12691,24 +12775,17 @@ sub DbRep_NewDumpFilename {
|
|||||||
my $dump_path = $paref->{dump_path};
|
my $dump_path = $paref->{dump_path};
|
||||||
my $dbname = $paref->{dbname};
|
my $dbname = $paref->{dbname};
|
||||||
my $time_stamp = $paref->{time_stamp};
|
my $time_stamp = $paref->{time_stamp};
|
||||||
my $character_set = $paref->{character_set};
|
|
||||||
|
|
||||||
my $part = "";
|
my $part = "";
|
||||||
my $sql_file = $dump_path.$dbname."_".$time_stamp.$part.".sql";
|
my $sql_file = $dump_path.$dbname."_".$time_stamp.$part.".sql";
|
||||||
my $backupfile = $dbname."_".$time_stamp.$part.".sql";
|
my $backupfile = $dbname."_".$time_stamp.$part.".sql";
|
||||||
|
|
||||||
$sql_text .= "/*!40101 SET NAMES '".$character_set."' */;\n";
|
|
||||||
$sql_text .= "SET FOREIGN_KEY_CHECKS=0;\n";
|
|
||||||
|
|
||||||
my ($err, $filesize) = DbRep_WriteToDumpFile ($sql_text, $sql_file);
|
my ($err, $filesize) = DbRep_WriteToDumpFile ($sql_text, $sql_file);
|
||||||
return $err if($err);
|
return $err if($err);
|
||||||
|
|
||||||
chmod (0664, $sql_file);
|
chmod (0664, $sql_file);
|
||||||
|
|
||||||
$sql_text = "";
|
return ($err, $sql_file, $backupfile);
|
||||||
my $first_insert = 0;
|
|
||||||
|
|
||||||
return ($err, $sql_text, $first_insert, $sql_file, $backupfile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
Loading…
x
Reference in New Issue
Block a user