Mysql дамп средствами php без shell
Встречаются ситуации, когда по каким-либо причинам у нас не работает команда mysqldump через exec.
Из такой ситуации можно выкрутится следующим кодом:
Недостатки метода:
1. Отсутствует create table
2. Избытычность insert into запросов
Преимущества:
1. Работает везде где есть php
2. Не требует знаний shell
п.с.: оба недостатка исправляются прямыми руками кодера =)
Из такой ситуации можно выкрутится следующим кодом:
<?php /*mysql_connect, mysql_select_db..Подключились к бд*/ function dump_sql($dump_dir) { $tables = "SHOW TABLES"; // Получаем список таблиц $res = mysql_query($tables) or die( "Ошибка при выполнении запроса: ".mysql_error() ); while( $table = mysql_fetch_row($res) ) { $fp = fopen( $dump_dir."/".$table[0].".sql", "a" ); // Sql файл таблицы (таблица.sql) if ( $fp ) { $query = "TRUNCATE TABLE `".$table[0]."`;\n"; // Чистим таблицу (будет в дампе) $un=false; fwrite ($fp, $query); $rows = 'SELECT * FROM `'.$table[0].'`'; // Получаем данные из таблицы $r = mysql_query($rows) or die("Ошибка при выполнении запроса: ".mysql_error()); while( $row = mysql_fetch_row($r) ) { $query = ""; foreach ( $row as $field ) { if ( is_null($field) ) $field = "NULL"; else $field = "'".mysql_escape_string( $field )."'"; if ( $query == "" ) $query = $field; else $query = $query.', '.$field; } $query = "INSERT INTO `".$table[0]."` VALUES (".$query.");\n"; // Вставка данных (будет в дампе) $un=true; fwrite ($fp, $query); } fclose ($fp); if (!$un) unlink($dump_dir."/".$table[0].".sql"); } } } # Вызываем функцию указав папку в которую сохранять дампы dump_sql('./sql_dumps'); ?>
Недостатки метода:
1. Отсутствует create table
2. Избытычность insert into запросов
Преимущества:
1. Работает везде где есть php
2. Не требует знаний shell
п.с.: оба недостатка исправляются прямыми руками кодера =)
4 ноября 2014, 07:12