2016-03-27 6 views
2

ich meine gespeicherten IP-Adressen in der Datenbank konvertieren müssen diese Werte in ip2longWie gespeichert ip in der Datenbank konvertieren ip2long

konvertieren ip2long

IPs gespeichert werden wie gewohnt wie xxx.xxx.xxx.xxx Ich möchte Wie soll ich tun es ist alles online, ich kann nichts offline stellen, wie soll ich Änderungen sicher vornehmen?

Ich kenne diese Art und Weise

$query ="SELECT id,ip from table"; 
while ($row=mysqli_fetch_assoc($result)){ 
    $ip2long=ip2long($row['ip']); 
    $id=$row['id']; 
    $update="UPDATE table SET ip='$ip2long' WHERE id='$id'"; 
} 

Aber das ist kein guter Ansatz für mehr als 10 Millionen Zeilen

Bitte legen nahe, jede mögliche Art und Weise es schnell zu tun.

Dank

+0

extrahieren Sie die 2 Spalten zu einem CSV. Erstellen Sie eine App in C# oder Java, um die Datei zu lesen und schreiben Sie die 3 Spalten (naja, wirklich nur 2) auf eine zweite csv aus. Dann LOAD DATA von infil die zweite csv in einige Stub-Tabelle .. Welche enthält übrigens die ID und Ihre neue Zeichenfolge. Dann machen Sie ein "update with a join" -Muster zurück zu Ihrer realen Tabelle – Drew

+0

Während es nichts Schlimmes mit Drews Antwort oben ist, persönlich würde ich mit einem Shell-Skript gehen und würde es in IP-Gruppen tun.Auf diese Weise müssen Sie, wenn etwas schief geht, nicht von Anfang an neu starten. 10 Millionen Datensätze brauchen Zeit, egal was Sie tun. Sie müssen darüber nachdenken, wie Sie sich schnell von einem Fehler erholen können und eine PHP-Schleife wird bei dieser Datenmenge nicht gut funktionieren. – Tigger

+0

ok, ich werde versuchen, dass –

Antwort

0

, wenn ich dies tue

1- ich würde eine neue Spalte

ALTER TABLE table_name ADD ip_long bigint(20) unsigned; 

2- den PHP-Code ausführen erstellen ip konvertieren -> iplong und aktualisieren (setzen) Sie den Long-Wert in der neuen Spalte

$query ="SELECT id,ip from table"; 
while ($row=mysqli_fetch_assoc($result)){ 
    $ip2long=ip2long($row['ip']); 
    $id=$row['id']; 
    $update="UPDATE table SET ip_long='$ip2long' WHERE id='$id'"; 
} 
echo "conversion completed"; 

3.1 stellen Sie sicher, dass Ihre Website bereit ist, IP-Adresse als LONG zu behandeln: bereiten Sie den Mechanismus vor, den Sie verwenden werden, um neuen Wert zu verwenden (lang), könnte ein paar Zeilen auskommentieren, eine Bibliotheksdatei ersetzen dass enthält einige Methoden ... etc

3,2 - Drop alte Spalte ip, und benennen Sie neue Spalte ip_long zu ip

ALTER TABLE table_name DROP COLUMN ip; 
ALTER TABLE table_name CHANGE ip_long ip bigint(20) unsigned; 

3.2 Hinweis: Für doppelte Sicherheit können Sie nur alte Spalte (ip) in etwas anderes umbenennen (ip_old) und behalten, falls der Prozess in keiner Phase erfolgreich war, oder Sie mussten für alle auf das normale IP-Format zurückkehren Deshalb können Sie unter Anweisung exeucte die Spalte umbenennen:

ALTER TABLE table_name CHANGE ip ip_old varchar(15); --replace varchar(15) with actual column definition ex: varchar(15) not null... etc. 

, wenn Sie sicher sind, der Prozess in Ordnung ist und Sie nicht mehr alte IP benötigen, ist es einfach fallen

ALTER TABLE table_name DROP COLUMN ip_old; 

Hinweis: Es wird empfohlen, die letzten 2 Anweisungen auf demselben P auszuführen HP Seite oder sogar auf einer Shell-Sitzung (wenn möglich), um sicherzustellen, dass keine Fehler für Benutzer erscheint, ex: Spalte nicht gefunden 'IP'

Verwandte Themen