[Perl/PHP] MySQL-Datenexport im CSV-Format via Scriptaufruf *erledigt*

justme69

Im RL-Dauerstress
ID: 99452
L
25 April 2006
676
13
Servus zusammen,

mit phpmyadmin ist es ja ein Leichtes, DB-Exports in unterschiedlichen Formaten einer Datenbank/Tabelle zu machen (CSV, Excel, etc.)

Ich bräuchte die DB-Daten im CSV-Format.

Allerdings will ich diesen Export ohne die manuelle Bedienung in phpmyadmin machen, sondern per Script-Aufruf. Ob das Script nun in PHP oder Perl geschrieben ist, ist letztendlich egal, lieber wäre mir in Perl.
Geht die Bedienung von phpmyadmin evtl. via Commandline ? Wie Wo ?

Perl hat ja ein MySQL-BachUp Modul, daß die DB-Daten in sql-Files exportiert, das kann ich an dieser Stelle leider nicht gebrauchen.

Kennt jemand passende Module oder ein passendes Script das in diese Richtung geht und evtl. nur erweitert geändert werden muß ?

Auf den DB-Server habe ich keinen direkten Zugriff, so daß ich nicht mit der MySQL-Server Commandline arbeiten kann.

Bin für Hilfen/Anregungen/Empfehlungen dankbar ;)
 
Zuletzt bearbeitet:
[...] da aber das auf'm Server ausgeführt und dort gespeichert wird, habe ich auf die Daten daher keinen Zugriff...
Und wenn du direkt in den WWW-Ordner speichern lässt ? Oder is das n reiner Datenbank-Server ? Wohl eher nicht, wenn phpMyAdmin auch drauf läuft. Oder funktioniert das nicht so ohne Weiteres ? *mich mit Serverrechten noch nicht wirklich gut auskenn*
 
Du kannst das entweder auf der Commandline ausführen (Serverseitig) - oder per SQL-Befehl. Du kannst aber keine Pfade angeben ! Zwar DAteinamen, aber keine Pfade. Der Owner der Datei ist der Server...
Also leider nix... ;)
 
PHP:
#!/usr/bin/perl
# ----------------------------------
# Perl MYSQL CSV Backup Script
# (c) 2007        92724.klamm.de
# ----------------------------------

$fields = ",";
$lines = "\n";

$database="";
$user="";
$pass="";
$host="";
$port="";

$database = &read_stdin("Database:") if($database eq "");
$user = &read_stdin("User:") if($user eq "");
$pass = &read_stdin("Pass:") if($pass eq "");
$host = &read_stdin("Host:") if($host eq "");
$port = &read_stdin("Port:") if($port eq "");

print "Content-Type:text/html\n\n";

use DBI;
our $dbh = DBI->connect("dbi:mysql:$database:$host:$port", "$user", "$pass", { RaiseError => 0, AutoCommit => 0 });

$sth = $dbh->prepare("USE `$database`;");
$sth->execute();

$sth = $dbh->prepare("SHOW TABLES FROM `$database`");
$sth->execute();

while(my @data = $sth->fetchrow_array)
{
  push @tables,$data[0];
}
$sth->finish() if (defined $sth);

foreach $table (@tables) 
{
	print "Erstelle Backup von: $table\n";
	open(TABLE, ">>" . $table . "\.csv");
	$sth = $dbh->prepare("SELECT * FROM `$table`;");
	$sth->execute();
	while(my @data = $sth->fetchrow_array)	
	{
		for($i=0;$i<$#data;$i++) {
			print TABLE $data[i] . $fields;
		}
		print TABLE $data[$#data] . $lines;
	}		
	close(TABLE);
	$sth->finish() if(defined $sth);
}
print "Backup komplett...";
$dbh->disconnect();
exit;

sub read_stdin($) {
	local ($text) = @_;
	print $text;
	my $var = <STDIN>;
	chop($var);
	return $var;
}

Mal in 5 Minuten was hinschribsel...

Falls du das Ding net lokal aufm Rechner ausführst... was natürlich auch möglich ist, musst du zwangsweise oben die Felder ausfüllen...
Ansonsten, viel Spaß damit.

Hoffe geholfen zu haben...

Refi
 
Zuletzt bearbeitet:
Mal in 5 Minuten was hinschribsel...

Falls du das Ding net lokal aufm Rechner ausführst... was natürlich auch möglich ist, musst du zwangsweise oben die Felder ausfüllen...
Ansonsten, viel Spaß damit.

Hoffe geholfen zu haben...

Refi
Wau, danke...
Werde mir das in Ruhe anschauen ;)

Auf den ersten Blick sieht's verdammt gut aus :)

EDIT:
Yep, auf der Basis kann ich gut weiter arbeiten, tausend Dank ;)
:arrow: erledigt.
 
Zuletzt bearbeitet: