要备份 MySQL 数据库主要分为兩個方法:
一、是將数据库目录完整备份;
二、是使用 MySQL 內建的 mysqldump程序。
一、备份数据库目录
MySQL 預設的儲存目录在 /var/lib/mysql 內容,底下會有以数据库名稱的目录,例如 mydb 目录便应该是 mydb 数据库的資料。MySQL预设的储存目录在/var/lib/mysql内容,底下会有以数据库名称的目录,例如mydb目录便应该是mydb数据库的资料。
如果 MySQL 正在運行,請先停止 MySQL,原因是可能會有資料未完全寫入,而 MySQL 會 lock 在使用中的 DB 檔案。如果MySQL正在运行,请先停止MySQL,原因是可能会有资料未完全写入,而MySQL会lock在使用中的DB档案。
01 /etc/rc.d/init.d/mysqld stop01/etc/rc.d/init.d/mysqld stop
02 cd /var/lib/mysql/02cd /var/lib/mysql/
03 tar zxcf mydb_backup.tgz mydb03tar zxcf mydb_backup.tgz mydb
04 /etc/rc.d/init.d/mysqld start04/etc/rc.d/init.d/mysqld start
以上指令會先停止 MySQL,然後把 mydb 数据库製作一個 taz 檔的备份,並儲存到 mydb_backup.tgz。以上指令会先停止MySQL,然后把mydb数据库制作一个taz档的备份,并储存到mydb_backup.tgz。
在使用以上指令時,請根據個別系統的設定作出修改。在使用以上指令时,请根据个别系统的设定作出修改。
好了,以上就麼 3 句指令就完成备份了,如果不幸的事情發生了,数据库發生錯誤而要恢复資料,可使用以下指令:好了,以上就么3句指令就完成备份了,如果不幸的事情发生了,数据库发生错误而要复原资料,可使用以下指令:
01 /etc/rc.d/init.d/mysqld stop01/etc/rc.d/init.d/mysqld stop
02 cd /var/lib/mysql/02cd /var/lib/mysql/
03 mv mydb mydb_error03mv mydb mydb_error
04 tar zxvf mydb_backup.tgz04tar zxvf mydb_backup.tgz
05 /etc/rc.d/init.d/mysqld start05/etc/rc.d/init.d/mysqld start
以上指令是先把 /var/lib/mysql/mydb 移到 /var/lib/mysql/mydb_error,然後將原先製作的备份檔解壓到 /var/lib/mysql/mydb。以上指令是先把/var/lib/mysql/mydb移到/var/lib/mysql/mydb_error,然后将原先制作的备份档解压到/var/lib/mysql/mydb。
二、使用mysqldump程序
雖然以上方法十分簡單,但有一個問題存在,那就是在备份及恢复時均需停止 MySQL 的運作,這樣對於實際應用十分不便。虽然以上方法十分简单,但有一个问题存在,那就是在备份及复原时均需停止MySQL的运作,这样对于实际应用十分不便。 再者,這樣备份出來的檔案,如果在相同版本的 MySQL Server 应该沒有問題,但移到版本不同的 Server 則不一定可以成功恢复。再者,这样备份出来的档案,如果在相同版本的MySQLServer应该没有问题,但移到版本不同的Server则不一定可以成功复原。
因为有以上的問題,MySQL 已經內建了备份工具,它就是mysqldump。因为有以上的问题,MySQL已经内建了备份工具,它就是mysqldump。
mysqldump 的备份方法是將数据库內的每個資料表結構及每筆資料產生 SQL 語句,然後存到文字檔。mysqldump的备份方法是将数据库内的每个资料表结构及每笔资料产生SQL语句,然后存到文字档。 而且它可以自訂每一個資料表一個檔案,以及將資料表結構及資料分開儲存,以下是使用例子:而且它可以自订每一个资料表一个档案,以及将资料表结构及资料分开储存,以下是使用例子:
Linux:mysqldump --user=root -p mydb > /backup/mydb.sql
Windows:mysqldump --user=root -p kingter_board > D:\kingter_board.sql
以上指令會使用 mysqldump 將 mydb 备份到 /backup/mydb.sql,在輸入指令後,需要輸入 MySQL 的 root 密碼。以上指令会使用mysqldump将mydb备份到/backup/mydb.sql,在输入指令后,需要输入MySQL的root密码。
至於恢复資料同樣簡單,只要一句指令便完成:至于复原资料同样简单,只要一句指令便完成:
Linux:mysqldump --user=root -p mydb < /backup/mydb.sql
Windows:mysqldump --user=root -p kingter_board < D:\kingter_board.sql
以上指令會將 /backup/mydb.sql 备份檔恢复到 mydb 裡面。以上指令会将/backup/mydb.sql备份档复原到mydb里面。 如果你的 MySQL Server 不止一個数据库,希望可以一次過將所有数据库备份起來,可以寫一個簡單的 shell script 完成,又或者使用以下指令:如果你的MySQLServer不止一个数据库,希望可以一次过将所有数据库备份起来,可以写一个简单的shellscript完成,又或者使用以下指令:
mysqldump --user=root -p --all-databases > /backup/mysql.sql
這個 --all-databases 代表所有数据库,這樣 mysqldump 便會將所有数据库备份到 /backup/mysql.sql。这个--all-databases代表所有数据库,这样mysqldump便会将所有数据库备份到/backup/mysql.sql。