function backup_mysql_fn($shost, $suser, $spass, $sdb, $sdbfile) { //echo $shost.' == '. $suser.' == '. $spass.' == '. $sdb.' == '. $sdbfile; $link = mysql_connect($shost, $suser, $spass); mysql_query('SET CHARACTER SET utf8'); // Open and create a file handle for sql. $handle = fopen($sdbfile, 'w'); $s_def = $alter_queries = $sresponse = ''; $sql_alter = $tables = array(); $ser_ver = PMA_sversion(); $s_def = PMA_exportHeader($sdb, $ser_ver); fwrite($handle, $s_def); // List the tables $squery = mysql_query('SHOW TABLES FROM `' . $sdb . '`'); while ($row = mysql_fetch_row($squery)) { $tables[] = $row[0]; } // Sort the tables usort($tables, 'strnatcasecmp'); foreach ($tables as $table => $v) { // Get the table structure(table definition) $stable_defn = PMA_getTableDef($sdb, $v, "\n"); $s_def = $stable_defn['structure'] . "\n"; fwrite($handle, $s_def); // Get the table data(table contents) // We have added $handle so that we can write the INSERT queries directly when we get it. // Basically To avoid MEMORY EXHAUST FOR BIG INSERTS PMA_exportData($sdb, $v, "\n", $handle); // List of alter queries // We have changed this because the OLD method was putting the ALTER queries after CREATE table query which was causing issues. if (!empty($stable_defn['alter'])) { $alter_queries .= $stable_defn['alter']; } } fwrite($handle, $alter_queries); $sresponse = PMA_exportFooter(); // Just to add the finishing lines fwrite($handle, $sresponse); fclose($handle); // Just check that file is created or not ?? if (file_exists($sdbfile)) { return true; } return false; }
} // If this is an export of a single view, we have to export data; // for example, a PDF report if (isset($GLOBALS[$what . '_data'])) { if (!empty($sql_query)) { // only preg_replace if needed if (!empty($add_query)) { // remove trailing semicolon before adding a LIMIT $sql_query = preg_replace('%;\\s*$%', '', $sql_query); } $local_query = $sql_query . $add_query; PMA_DBI_select_db($db); } else { $local_query = 'SELECT * FROM ' . PMA_backquote($db) . '.' . PMA_backquote($table) . $add_query; } if (!PMA_exportData($db, $table, $crlf, $err_url, $local_query)) { break; } } // now export the triggers (needs to be done after the data because // triggers can modify already imported tables) if (isset($GLOBALS[$what . '_structure'])) { if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'triggers', $export_type)) { break 2; } } if (!PMA_exportDBFooter($db)) { break; } } if (!PMA_exportFooter()) {