Dưới đây là một kịch bản PHP mà tôi đặt lại với nhau cho bạn. Nó nhận danh sách tất cả các cơ sở dữ liệu và áp dụng các bản cập nhật nếu tên cơ sở dữ liệu bắt đầu bằng user
.
Tôi cũng có nó sao lưu từng cơ sở dữ liệu trước khi áp dụng các thay đổi. Phần sao lưu dành riêng cho Linux/Unix ngay bây giờ, nhưng nó có thể được tinh chỉnh để hoạt động trên các hệ điều hành khác.
Hiện tại là khá chi tiết, vì vậy bạn có thể thay đổi nếu cần. Bạn cũng có thể thay đổi trình kết thúc dòng, tùy thuộc vào việc bạn sẽ chạy nó từ CLI hay trình duyệt. Tôi sẽ đề nghị để đặt này trong thư mục kịch bản của bạn và chạy nó từ CLI.
Hãy cho tôi biết nếu bạn cần bất kỳ điều gì khác hoặc nếu điều này không hiệu quả với bạn.
<?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);
Các cơ sở dữ liệu này có trên cùng một máy chủ không? –
có, tất cả các dbase đều nằm trên cùng một máy chủ! – Jorre