2011-05-06 166 views
1

是否有使用PHP只能從MySQL數據庫表使數據備份的方法嗎?備份mysql數據

+1

是的。就在這裏。 – 2011-05-06 10:53:43

+0

這當然是可能的。也就是說,你可以在你的操作環境中執行標準的'mysqldump'命令嗎? (如果你可以使用這種方法,這將會是一個很大的麻煩。) – 2011-05-06 10:54:51

+0

我可以,但是mysqldump也需要這個結構 - 不是嗎? – user398341 2011-05-06 10:55:58

回答

1

使用SHOW TABLES(http://dev.mysql.com/doc/refman/5.0/en/show-tables.html)來獲取每個表格,使用SELECT * FROM -tablename-通過PHP循環它們。然後循環記錄集,使用implode(',' $results)獲取數據(CSV)。你可能想爲每個表格創建一個獨立的或某物。

0

您同意,你想「要的原始數據(例如:如CSV),而不是任何形式的INSERT語句」 - 但你已經接受了答案確實恰恰是後者,例如使用這行代碼:

$return.= 'INSERT INTO '.$table.' VALUES('; 

這很好,如果這是真的,你想要什麼,但如果我是你,我會再只是做一個系統調用來代替mysqldump的。您可以使用mysqldump以安全,穩健的方式生成一組INSERT INTO語句,而無需擔心「我是否關閉了雙引號?是否應該在此處添加逗號?」等

我不知道爲什麼你不想要導出模式,以及 - 如果指定--add-drop-table在那麼你的數據庫轉儲成爲了一個漂亮,整潔,如果你的整個數據庫的恢復最壞的情況發生 - 但如果你只是想導出數據,並可以進行系統調用在PHP腳本mysqldump的,you could run

mysqldump --skip-triggers --compact --no-create-info db_name | gzip -c > /tmp/db_name_backup.sql.gz 

--no創建,信息不包括所有的CREATE TABLE語句;但正如我所說的,我寧願包括CREATE和DROP IF EXISTS,所以你有一個完整的數據和模式備份。

我真的推薦使用mysqldump生成的SQL進行備份 - MySQL天生理解,並且正確處理編碼,空白等 - 而不是像CSV那樣 - AFAIK實際上沒有任何一種國際公認的標準,並且可以「T通過管道輸送回的MySQL在以後的日子來恢復數據庫:

gunzip -c < /tmp/db_name_backup.sql.gz | mysql db_name 

如果您的備份是不是爲每一臺單獨的CSV文件,恢復備份成爲一個更爲艱鉅的任務。

+0

我可以在沒有壓縮的情況下完成嗎?此外 - 我正在使用PDO - 任何示例我應該如何使用它? – user398341 2011-05-06 16:06:58

+0

另一個問題是關係 - 恢復時 - 表之間的關係可能會造成問題,如果命令不按照正確的順序執行 - 因此手動備份讓我對如何對其進行備份一下表爲了多一點的控制和使用。是否有一個選項可以將所有帶有FOREIGN KEYS的ALTER語句放在文件末尾? – user398341 2011-05-06 16:09:50

+0

對不起 - 通過原始數據我的意思是 - 只包含數據的sql語句 - 沒有數據庫結構 - 所以它會包含INSERT語句。 – user398341 2011-05-06 16:11:09