Page 1 of 1

Umstellen autoincrement nach Transport einer DB

Posted: 2006-01-26 09:03
by sir tom
Huhu,

ich bringe aktuell für eine Ligaseite deren Datenbanken auf einem anderen Server unter, problematisch dabei ist, das das Quellsystem mySQL 4.1.14 und das Zielsystem 4.0.21 als Version hat.

Mit der Option --compatible-mysql40 kann ich die DBs recht zügig transportieren, allerdings fehlen nach dem Transport die "auto increment" Settings in die ganzen Tabellen.

Folge: man muß "auto increment" nachträglich überall hinterlegen, was bei >130 Tabellen ne gute Arbeit ist.

Gibt es eine Möglichkeit diese Settings irgendwie mitzutransportieren? Ich habe keine (offentsichtliche) Möglichkeit gefunden (man mysql und man mysqldump durchgesehen).

Re: Umstellen autoincrement nach Transport einer DB

Posted: 2006-01-26 10:10
by metrax
verrat und halt mal den kompletten mysqldump befehl, evt. liegt dein fehler ja in einer der anderen optionen.

Re: Umstellen autoincrement nach Transport einer DB

Posted: 2006-01-26 10:12
by sir tom
mysqldump -uwebx -p123456 --compatible-mysql40 databaseX > backup.sql

So sieht mein Dump-Befehl aus... Zurückspielen mach ich so:

mysql -uwebY -p654321 databaseY < backup.sql

Re: Umstellen autoincrement nach Transport einer DB

Posted: 2006-01-26 20:07
by isotopp
Sir Tom wrote:Gibt es eine Möglichkeit diese Settings irgendwie mitzutransportieren? Ich habe keine (offentsichtliche) Möglichkeit gefunden (man mysql und man mysqldump durchgesehen).
In MySQL 5.0 geht es mit information_schema ganz leicht:

Code: Select all

root@localhost [sps]> use information_schema
Database changed
root@localhost [information_schema]> select concat("alter table ", table_name, " auto_increment = ", auto_increment) as command from tables where table_schema = "sps";
+---------------------------------------+
| command                               |
+---------------------------------------+
| alter table detail auto_increment = 6 |
| alter table users auto_increment = 4  |
+---------------------------------------+
2 rows in set (0.00 sec)
und das führtst Du dann aus. In MySQL 4.1 und älter gibt es information_schema nicht. Also mußt Du Dir ein kleines Perlscript selber hacken und auf "SHOW TABLE STATUS" vertrauen.

Code: Select all

kris@linux:/tmp> cat probe.pl
#! /usr/bin/perl -w

use DBI;

my $database = "sps";

my $dsn = "DBI:mysql:database=$database;host=127.0.0.1;port=3333";
my $dbh = DBI->connect($dsn, "root");

my $cmd = "show table status";
my $stmt = $dbh->prepare($cmd);
$stmt->execute();

while (my $res = $stmt->fetchrow_hashref) {
   my %row = %$res;

   my $table = $row{"Name"};
   my $count = $row{"Auto_increment"};

   print "alter table $table auto_increment = $countn";
}
kris@linux:/tmp> ./probe.pl
alter table detail auto_increment = 6
alter table users auto_increment = 4
Der Grad der Offensichtlichkeit variiert zugegeben mit dem Blicwinkel des Betrachters. :)