史上最全的MySQL備份方法
2024-07-24 12:43:48
供稿:網友
本人曾經
用過的備份方式有:mysqldump、mysqlhotcopy、BACKUP TABLE 、SELECT INTO
OUTFILE,又或者備份二進制日志(binlog),還可以是直接拷貝數(shù)據(jù)文件和相關的配置文件。MyISAM
表是保存成文件的形式,因此相對比較容易備份,上面提到的幾種方法都可以使用。Innodb 所有的表都保存在同一個數(shù)據(jù)文件 ibdata1
中(也可能是多個文件,或者是獨立的表空間文件),相對來說比較不好備份,免費的方案可以是拷貝數(shù)據(jù)文件、備份 binlog,或者用
mysqldump。
1.mysqldump備份
mysqldump 是采用SQL級別的備份機制,它將數(shù)據(jù)表導成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。
示例:mysqldump -uroot -p database table > /home/jobs/back.sql
mysqldump也可做增量備份,mysqldump相關參數(shù)網上較多,就不在此一一贅述了
2.mysqlhotcopy備份
mysqlhotcopy 是一個 PERL 程序。它使用 LOCK TABLES、FLUSH
TABLES 和 cp 或 scp
來快速備份數(shù)據(jù)庫。它是備份數(shù)據(jù)庫或單個表的最快的途徑,但它只能運行在數(shù)據(jù)庫文件(包括數(shù)據(jù)表定義文件、數(shù)據(jù)文件、索引文件)所在的機器上。
mysqlhotcopy 只能用于備份 MyISAM,并且只能運行在 類Unix 和 NetWare 系統(tǒng)上。
mysqlhotcopy 支持一次性拷貝多個數(shù)據(jù)庫,同時還支持正則表達。
示例: root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root
-p=123456 database /tmp (把數(shù)據(jù)庫目錄 database 拷貝到 /tmp
下)root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=123456
db_name_1 ... db_name_n /tmproot#/usr/local/mysql/bin/mysqlhotcopy
-h=localhost -u=root -p=123456 db_name./regex/
/tmp更詳細的使用方法請查看手冊,或者調用下面的命令來查看 mysqlhotcopy 的幫助:
perldoc /usr/local/mysql/bin/mysqlhotcopy注意,想要使用 mysqlhotcopy,必須要有
SELECT、RELOAD(要執(zhí)行 FLUSH TABLES) 權限,并且還必須要能夠有讀取 datadir/db_name 目錄的權限。
還原mysqlhotcopy 備份出來的是整個數(shù)據(jù)庫目錄,使用時可以直接拷貝到 mysqld
指定的 datadir (在這里是 /usr/local/mysql/data/)目錄下即可,同時要注意權限的問題,如下例: root#cp
-rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody
/usr/local/mysql/data/ (將 db_name 目錄的屬主改成 mysqld 運行用戶)
3.SQL 語法備份
3.1 備份BACKUP TABLE 語法其實和 mysqlhotcopy
的工作原理差不多,都是鎖表,然后拷貝數(shù)據(jù)文件。它能實現(xiàn)在線備份,但是效果不理想,因此不推薦使用。它只拷貝表結構文件和數(shù)據(jù)文件,不同時拷貝索引文
件,因此恢復時比較慢。例子: BACK TABLE tbl_name TO '/tmp/db_name/';注意,必須要有 FILE
權限才能執(zhí)行本SQL,并且目錄 /tmp/db_name/ 必須能被 mysqld 用戶可寫,導出的文件不能覆蓋已經存在的文件,以避免安全問題。