🢂Kopia (zrzut) bazy mysql do pliku ‑ PHP
Metody na robienie zrzutu bazy danych przez php
- Jak używać?
Kod do pliku i odpalać z crona albo przez wywołanie URLa.
Nazwa pliku z bazą w zmiennej $backup_file
Kod funkcji 1
<?php
// Import danych konfiguracyjnych z pliku wp-config.php (opcjonalnie, jeśli jest to potrzebne), zakomentuj stałe poniżej
// require_once __DIR__ . '/wp-config.php';
// Definicje stałych zawierających dane do połączenia z bazą danych
define('DB_NAME', 'bazadanych'); // Nazwa bazy danych
define('DB_USER', 'admin'); // Nazwa użytkownika bazy danych
define('DB_PASSWORD', 'admin00'); // Hasło do bazy danych
define('DB_HOST', 'localhost'); // Host bazy danych, tutaj lokalny serwer
define('DB_CHARSET', 'utf8mb4'); // Zestaw znaków używany w tabelach bazy danych
define('DB_COLLATE', ''); // Typ porównywania w bazie danych (domyślnie pusty)
// Pobieranie aktualnego dnia tygodnia
$day_of_week = date('w');
// Jeśli chcesz robić kopie w określony dzień tygodnia
// if ($day_of_week == 0) { // 0 oznacza niedzielę
// Tworzenie nazwy pliku kopii zapasowej, zawierającej nazwę bazy danych i aktualną datę oraz godzinę
$backup_file = '_baza_' . DB_NAME . '_' . date("Y-m-d_h:i:s") . '.sql';
// Konstrukcja polecenia mysqldump do wykonania kopii zapasowej
$command = "mysqldump --opt -h " . DB_HOST . " -u " . DB_USER . " -p" . DB_PASSWORD . " " . DB_NAME . " > $backup_file";
// Wykonanie polecenia w systemie
system($command);
// }
?>
Kod funkcji 2
Poprzednia funkcja na niektórych hostingach nie działa ze względów bezpieczeństwa.
Można zrobić to samo za pomocą mysqli
, a to już działa wszędzie.
<?php
//Można pobrać dane z configa WP, zakomentuj stałe poniżej
//require_once __DIR__ . '/wp-config.php';
// Definicje stałych zawierających dane do połączenia z bazą danych
define('DB_NAME', 'bazadanych'); // Nazwa bazy danych
define('DB_USER', 'admin'); // Nazwa użytkownika bazy danych
define('DB_PASSWORD', 'admin00'); // Hasło do bazy danych
define('DB_HOST', 'localhost'); // Host bazy danych, tutaj lokalny serwer
define('DB_CHARSET', 'utf8mb4'); // Zestaw znaków używany w tabelach bazy danych
define('DB_COLLATE', ''); // Typ porównywania w bazie danych (domyślnie pusty)
// Nawiąż połączenie
$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$backup_file = '_baza_' . DB_NAME . '_' . date("Y-m-d_h:i:s") . '.sql';
// Sprawdź połączenie
if ($conn->connect_error) {
die("Połączenie nieudane: " . $conn->connect_error);
}
// Wyeksportuj tabelę
$tables = array();
$result = $conn->query("SHOW TABLES");
while ($row = $result->fetch_row()) {
$tables[] = $row[0];
}
foreach ($tables as $table) {
$result = $conn->query("SELECT * FROM $table");
$num_fields = $result->field_count;
$return = "";
// $return = "DROP TABLE IF EXISTS $table;";
$row2 = $conn->query("SHOW CREATE TABLE $table")->fetch_row();
$return .= "\n\n" . $row2[1] . ";\n\n";
for ($i = 0; $i < $num_fields; $i++) {
while ($row = $result->fetch_row()) {
$return .= "INSERT INTO $table VALUES(";
for ($j = 0; $j < $num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace("\n", "\\n", $row[$j]);
if (isset($row[$j])) {
$return .= '"' . $row[$j] . '"';
} else {
$return .= '""';
}
if ($j < ($num_fields - 1)) {
$return .= ',';
}
}
$return .= ");\n";
}
}
$return .= "\n\n\n";
file_put_contents($backup_file, $return, FILE_APPEND | LOCK_EX);
}
// Zamknij połączenie
$conn->close();