hier offen für alles ist ein PHP-Skript, das ich für Sie zusammengestellt. Es ruft eine Liste aller Datenbanken ab und wendet die Aktualisierungen an, wenn der Datenbankname mit user
beginnt.
Ich habe auch jede Datenbank sichern, bevor es die Änderungen anwendet. Der Backup-Teil ist momentan spezifisch für Linux/Unix, aber er kann optimiert werden, um auf anderen Betriebssystemen zu funktionieren.
Es ist im Moment ziemlich ausführlich, so dass Sie es bei Bedarf ändern können. Sie können den Zeilenabschluss auch ändern, je nachdem, ob Sie ihn über die CLI oder einen Browser ausführen. Ich würde vorschlagen, dies in Ihr Skriptverzeichnis zu legen und es von der CLI aus auszuführen.
Lassen Sie mich wissen, ob Sie noch etwas brauchen oder ob das nicht für Sie funktioniert.
<?php
// Configure these as needed
$db_host = 'localhost';
$db_user = 'user';
$db_pass = 'password';
$datetime_pattern = date('Ymd.His');
$backup_file_path = "/path/to/db_backups/$datetime_pattern/";
$backup_file_format = "db_backup.%s.sql";
$backup_syntax_pattern = "/usr/bin/mysqldump --host=%s --user=%s --password=%s --opt %s > $backup_file_path/db_backup.%s.sql";
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!
// CHANGE THE PERMISSIONS!!!!!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!
$backup_file_permission = 0777;
// Choose how to terminate your lines
$line_end = "\n"; // Use for CLI
//$line_end = "<br/>"; // Use for browser
// Match words that begin with 'user', case-insensitive
$pattern = '/^user/i';
// What changes will we be applying?
$db_update_syntax = array("ALTER TABLE foo ADD baz1 VARCHAR(30) AFTER bar1",
"ALTER TABLE foo ADD baz2 VARCHAR(30) AFTER bar2",
"ALTER TABLE foo ADD baz3 VARCHAR(30) AFTER bar3",
);
// END OF CONFIGURATION
/////////////////////////////////////////////////////////////
// Create the database backup directory
if (!mkdir($backup_file_path, $backup_file_permission, true)) {
die('Failed to create backup directory...');
}
// Connecting to MySQL.
$conn = @mysql_connect($db_host, $db_user, $db_pass)
or die('Not connected : ' . mysql_errno() . ': ' . mysql_error());
$db_list = mysql_list_dbs($conn);
echo "{$line_end}Starting Database Update.{$line_end}";
while ($row = mysql_fetch_assoc($db_list)) {
$db_name = $row['Database'];
if (preg_match($pattern, $db_name)) {
echo "{$line_end}A match was found: [$db_name]{$line_end}";
echo "Backing up the database{$line_end}";
// Backup the database
$backup_syntax = sprintf($backup_syntax_pattern, $db_host, $db_user, $db_pass, $db_name, $db_name);
exec($backup_syntax);
$db_selected = mysql_select_db($db_name, $conn)
or die("Can't use [$db_name] : " . mysql_error());
foreach ($db_update_syntax as $each_update_syntax) {
echo "Altering using: [$alter_syntax]{$line_end}";
$update_status = mysql_query($alter_syntax);
if ($update_status) {
echo "Success!{$line_end}{$line_end}";
} else {
echo "Unable to update [$db_name] : " . mysql_error() . "{$line_end}{$line_end}";
}
}
} else {
echo "Ignoring: [$db_name]{$line_end}";
}
}
echo "Finished!{$line_end}";
// Free resources/Close MySQL Connection
mysql_free_result($db_list);
mysql_close($conn);
Sind diese Datenbanken alle auf demselben Server? –
Ja, alle Datenbanken befinden sich auf demselben Server! – Jorre