2012-01-25 48 views
0

有沒有什麼辦法可以使用php 來轉儲整個數據庫,但不能使用CSV或XML,因爲我需要它以純SQL格式。轉儲如何使用PHP將MySQL表備份到轉儲?

例子,我需要:

CREATE TABLE 'table_name' etc..; 
INSERT INTO 'table_name' (field, field2) VALUES ('1','2'); 
INSERT INTO 'table_name' (field, field2) VALUES ('1','2'); 

我沒有EXEC的使用()系統()。 而無需手動創建INSERT語句.. 例子:

while($row = mysql_results) { 
$sql_dump = 'INSERT INTO ...'; 
} 

謝謝! :)

+0

見我的這個問題。你在這裏脫離主題。 http://webmasters.stackexchange.com/questions/24260/how-can-i-automate-retrieval-of-mysql-databases-from-shared-hosting-which-disall/24409#24409 – Palantir

+0

如果您不能運行'exec'或'system',並且你有關鍵的數據要備份我不得不問你爲什麼要託管關於什麼可能是共享服務器的關鍵數據(或者至少有一個你沒有完全訪問權限)?如果你對這個領域不熟悉,你可以試試[PHPMyAdmin](http://www.phpmyadmin.net/home_page/)。它使轉儲sql文件變得簡單。 – rdlowrey

+1

爲什麼不使用'mysqldump'? – xdazz

回答

1

您可以運行SHOW CREATE TABLE查詢。這是從一個MySQL客戶端內完成:

+-------+----------------------------------------------------------------+ 
| Table | Create Table             | 
+-------+----------------------------------------------------------------+ 
| test2 | CREATE TABLE `test2` (
    `AAA` varchar(1) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 
+-------+----------------------------------------------------------------+ 

當然,數據可以通過任何常規的選擇語句檢索,如果你正在使用一種腳本語言,這樣做你就可以但是存儲數據需要。

如果您在mysql客戶端是簡單和有機會獲得你可以運行一個選擇文件系統... INTO OUTFILE語句:

SELECT * INTO OUTFILE 'backup.tab' 
ENCLOSED BY '"' 
FROM <TableName>; 

以上將創建一個製表符分隔的文件。

要加載的數據返回到RUN:

LOAD DATA INFILE 'backup.tab' 
INTO TABLE <TableName> 
ENCLOSED BY '"'; 

試圖重新INSERT語句從MySQL中有超過轉義特殊字符之類的問題,將有可能結束。使用CSV或Tab分隔的數據文件被視爲導出和導入數據的完美標準。

+0

這是用於表結構,但不是用於實際數據:( – Marki555

+0

那麼你可以通過任何常規select statement。如果你有權訪問文件系統,你的mysql客戶端正在運行,你可以做一個Select ... Into Outfile。我將編輯我的答案來顯示這個。 – Ilion

+0

@llion你真的看過我的文章嗎?...如果你有,那麼你應該能夠注意到,我提到我想要一個SQL轉儲,而不是選項卡式輸出等...我想轉儲它包括: CREATE TABLE bla INSERT INTO bla(bla)VALUES(bla) INSERT INTO bla(bla)VALUES(bla) INSERT INTO bla(bla)VALUES(bla) etc ... 所以你的解決方案對我來說不好 – SniffWP

0

如果您有遠程訪問數據庫(MySQL端口不是ssh),您可以嘗試設置服務器之間的同步。你可以使用其他服務器,你有開放或需要訪問。本地主機上的設置就足夠了。
PHPMyAdmin的最新版本提供了設置同步的功能(將其安裝在本地計算機上)。另外SQLYog支持同步功能。

+0

我已經提到我需要這個沙丘的PHP :)但是,謝謝你的嘗試... – SniffWP

0

嘗試這樣的事情

$command="mysqldump --host=localhost --user=USER --password=***** DATABASENAME.table > db.sql"; 
system($command);