PHP 備份 Mysql 數據庫的實現

<?php
// 變量參數設置
$options = array(php

'db_host'   =>'localhost',
'db_user'   =>'root',
'db_pwd'    =>'',
'db_name'   =>'test',
'db_charset'=>'utf8',

);
// 鏈接數據庫
$conn = mysql_connect($options['db_host'], $options['db_user'], $options['db_pwd']);
mysql_select_db('test', $conn);
mysql_query("SET NAMES {$options['db_charset']}", $conn);
// 獲取數據庫的全部表
$tableArr = array();
$resource = mysql_query('SHOW TABLES FROM test', $conn);
while ($tempArr = mysql_fetch_row($resource)) {mysql

$tableArr[] = $tempArr[0];

}
// 循環操做每一個表
foreach ($tableArr as $table) {sql

// (1)獲取建立表的 SQL 語句
$resource = mysql_query('SHOW CREATE TABLE '.$table, $conn);
$tempArr = mysql_fetch_row($resource);
$sqlStr = 'DROP TABLE IF EXISTS '.$table.";\n";
$sqlStr .= $tempArr[1].";\n";
// (2)獲取數據表中的字段信息
$fieldArr = array();
$resource = mysql_query('SHOW COLUMNS FROM '.$table);
while ($tempArr = mysql_fetch_assoc($resource)) {
    if ($tempArr['Key'] == 'PRI') {
        $fieldArr['PRI'] = $tempArr['Field'];
    } else {
        $fieldArr[] = $tempArr['Field'];
    }
}
// (3)查詢每一個字段的內容, 拼成 SQL 字符串
$sql = 'SELECT * FROM '.$table;
if (!empty($fieldArr['PRI'])) $sql .= ' ORDER BY '.$fieldArr['PRI'].' ASC';
$resource = mysql_query($sql);
while ($tempArr = mysql_fetch_row($resource)) {//獲取每張表對應的 INSERT SQL 語句
    $sqlStr .= 'INSERT INTO '.$table.' VALUES (';
    foreach ($tempArr as $value) {
        $sqlStr .= '\''.addslashes($value).'\', ';//轉義特殊字符
    }
    $sqlStr = substr($sqlStr, 0, -2).");\n";
}
$sqlStr .= "\n\n-- =========================$table\n\n";
// (4)輸出內容到文件
$handle = fopen("db_bakup_{$options['db_name']}.sql", 'a+');
if (flock($handle, LOCK_EX)) {
    fwrite($handle, $sqlStr);
    flock($handle, LOCK_UN);
}
fclose($handle);

}
// 釋放Mysql資源, 關閉鏈接
mysql_free_result($resource);
mysql_close($conn);
?>數據庫

相關文章
相關標籤/搜索