史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   論壇程式討論區 (http://forum.slime.com.tw/f79.html)
-   -   小弟請教有關mysql資料備份的問題 (http://forum.slime.com.tw/thread257269.html)

lutunhsiang 2010-02-25 08:28 PM

小弟請教有關mysql資料備份的問題
 
小弟因為要幫客戶mysql備份,客戶使用的mysql是4版,因為產品升級要使用新版的作業系統所以之後客戶端使用的mysql升級為5版,今天詢問負責產品的廠商說只要把mysql目錄給備份就好,也就是只要把mysql目錄複製到別台電腦備份,而不使用mysqldump
客戶端作業系統是linux,請問大家mysql版本不同能直接複製資料庫目錄嗎??還是一定要使用到mysqldump呢??
謝謝大家

ccutmis 2010-02-26 08:17 AM

try it~
 
MySQL Server 的日常維護中最重要的一項大概就是資料庫的定時備份,而 MySQL 資料庫的備份方式有很多但一般來說大致上可概分為二種:
Binary Copy (直接複製資料庫檔案)
Dump Database (將資料庫輸出成為文字檔)
 
一、Binary Copy (直接複製資料庫檔案)
開門見山的說,非常不建議你這樣子做。MySQL 支援許多種不同的 Storage Engine,但並不是每一種 Storage Engine 都是 Binary Portable,意思就是說不是每一種 Storage Engine 都可以讓你把資料庫檔案直接複製到另外一台 MySQL Server,然後還可以正常運作的。MySQL 預設的 MyISAM Storage Engine 是 Binary Portable 的,因此若你的資料庫只有使用 MyISAM Storage Engine 的話,那麼你大可以直接複製資料庫檔案來進行備份(當然還必須考慮到資料的一致性,比方說複製之前先關閉 MySQL Server)。但若您有使用到 InnoDB Storage Engine,那麼你就不能這麼做,因為 InnoDB Storage Engine "不是" Binary Portable,只要 CPU 的浮點運算架構不同,複製過去的資料將無法正常運作。除此之外,你複製起來的 InnoDB 資料庫檔案(share table space)若是還原到不同版本的 MySQL Server 上,也會有很大的機率無法正常運作。除非你很肯定備份(複製)起來的資料只會使用在 "同一台 Server" 並使用 "同一個版本" 的 MySQL Server,不然請勿使用此方法進行備份。
註:
對於 MyISAM Storage Engine,每個資料庫(Database)都是一個獨立的目錄,而資料庫中的資料表則會分別以三個檔案儲存在該目錄中,這三個檔案分別是:
FRM: 儲存這個資料表的結構
MYD: Row Data,也就是你存在資料表(table)裡的資料
MYI: 此資料表的索引
但對於 InnoDB Storage Engine 來說,所有的資料庫(Database)與資料表(Table)都是儲存在同一個(或同一系列)的檔案之中,例如 /var/lib/mysql/ibdata1。

二、Dump Database (將資料庫輸出成為文字檔)
MySQL 在安裝時即有提供一系列的客戶端程式(Client Program),這些程式其實就是各種功能不同的 Perl Scripts 的集合,其中包括有協助您操控 Server 的 mysqladmin、用來執行 SQL 指令的 mysql、轉換 binary log 用的 mysqlbinlog 等等。其中有一樣工具是專門讓您用來備份資料庫的,那就是 mysqldump。
mysqldump 的使用方式十分的簡易,其語法為:
引用:
mysqldump --lock-all-tables -u root -p 資料庫名稱 > example.sql
--lock-all-tables:進行備份時將正在備份的資料庫裡的資料表,全部鎖定以確保資料的一致性
-u root:使用 root 帳號進行備份
-p:需要輸入密碼,如果你的 root 帳號有密碼保護,而你又不加這個選項,就會直接 ACCESS DENIED
資料庫名稱:你要備份的資料庫名稱
example.sql:這個部份你想取什麼名字都行,總之這裡就是備份出來的檔案名稱
開啟備份出來的檔案看看,你會發現裡面其實是由許多 SQL 指令所組成,而這些 SQL 指令就是用來重建整個資料庫用的,因此當您還原資料庫的時候其實對 MySQL 來說,只是單純的重新執行備份檔裡面所有的 SQL 指令。由於備份出來的檔案是單純的文字檔案,因此它是 Binary Portable,你可以將它複製到任何一台 MySQL Server 上然後進行還原。
還原的方式也很簡單,只要使用以下的指令即可:
引用:
mysql -u root -p 資料庫名稱 < example.sql

大部份論壇程式都會提供資料庫備份機制來協助您備份論壇的資料庫,但除非您無法直接掌控伺服器(例如租用虛擬主機)或是你不具有使用 SHELL 執行指令的權限,否則不建議您使用那些第三方程式所提供的功能來備份資料庫,不然您有可能會遇到備份出來的東西還原不回去的情況。
 
來源網址:
http://blog.udn.com/wordred0227/1912227#reply_list

ccutmis 2010-02-26 09:20 AM

[轉][DataBase] 備份 MySQL 3.23.49 轉到 MySQL 5 latin1 轉換到 utf8
 
上面那篇是比較偏理論面的,底下這邊是以實務為導向的...

http://blog.wu-boy.com/2008/05/09/245/

lutunhsiang 2010-02-26 12:29 PM

引用:

作者: ccutmis (文章 2227040)
上面那篇是比較偏理論面的,底下這邊是以實務為導向的...

http://blog.wu-boy.com/2008/05/09/245/

謝謝您的幫忙,小弟測試看看

cwvdavid 2010-02-26 08:56 PM

mySQL4跟mySQL5 相差很多...(資料庫的檔案本身就不一樣了)

絕對不可以直接用copy的!!!!!!!

(我試過了)



能夠用dump的方式當然是最好(如果資料庫不大, 也可以直接用phpMyAdmin來匯出mySQL4的資料,
再拿到mySQL5匯入...


所有時間均為台北時間。現在的時間是 12:36 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1