Mysql資料備份與恢複,mysql備份與恢複

來源:互聯網
上載者:User

Mysql資料備份與恢複,mysql備份與恢複
備份/恢複策略:
1. 要定期做 mysql備份,並考慮系統可以承受的恢復。
2. 確保 mysql 開啟log-bin,有了 binarylog,mysql才可以在必要的時候做完整恢複,或基於時間點的恢複,或基於位置的恢複。

3. 要經常做備份恢複測試,確保備份是有效,並且是可以恢複的。

冷備份

備份:
1. 停掉 mysql服務,在作業系統層級備份 mysql的資料檔案。
2. 重啟 mysql服務,備份重啟以後產生的 binlog。
恢複:
1. 停掉 mysql服務,在作業系統層級恢複 mysql的資料檔案。
2. 重啟 mysql服務,使用 mysqlbinlog恢複自備份以來的 binlog。 

邏輯備份 

備份:
1. 選擇在系統空閑時,比如在夜間,使用 mysqldump –F(flush-logs)備份資料
庫。

mysqldump –u root –p*** pointcard –F > pointcard.sql

2. 並備份 mysqldump開始以後產生的 binlog。
恢複:
1. 停掉應用,執行 mysql 匯入備份檔案.

mysql –u root –p*** pointcard < pointcard.sql

2. 使用 mysqlbinlog 恢複自mysqldump 備份以來的binlog。

mysqlbinlog $HOME/data/mysql-bin.123456 | mysql -u root –p*** 

單個表的備份:
備份:
1. 方法 1:

mysql > select * into outfile ‘/tmp/order_tab’ fields-terminated-by=’,’ from order_tab;

2. 方法 2:

mysqldump –u root –p*** –T /tmp pointcard order_tab --fields-terminated-by=’,’;
恢複:

1. 方法 1:

mysql > load data [local] infile ‘/tmp/order_tab’ into table order_tab fields-terminated-by=’,’;

2. 方法 2:

mysqlimport –u root –p*** [--local] pointcatd order_tab.txt --fields-terminated-by=’,’;
注意:如果匯入和匯出是跨平台操作的(windows和 linux),那麼要注意設定參數line-terminated-by, windows上設定為 line-terminated-by=’\r\n’,linux上設定為line-terminated-by=’\n’.

使用備份工具ibbackup

ibbackup是 innodb公司(www.innodb.com)的一個熱備份工具,專門對 innodb儲存引擎進行物理熱備份,此工具是收費的,不能免費使用。現在innodb 公司已經被oracle收購
使用方法:
編輯用於啟動的設定檔my.cnf和用於備份的設定檔my2.cnf
my.cnf的例子如下:

[mysqld]datadir = /home/heikki/data innodb_data_home_dir = /home/heikki/datainnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /home/heikki/dataset-variable = innodb_log_files_in_group=2set-variable = innodb_log_file_size=20M

如果想備份到/home/heikki/backup,則my2.cnf的例子如下:

[mysqld]datadir = /home/heikki/backupinnodb_data_home_dir = /home/heikki/backupinnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /home/heikki/backupset-variable = innodb_log_files_in_group=2set-variable = innodb_log_file_size=20M

開始備份ibbackup my.cnf my2.cnf如果需要恢複,則進行日誌重做ibbackup --apply-log my2.cnf恢複後重啟資料庫服務./bin/mysqld_saft --defaults-file=my2.cnf & 

時間點恢複:

1. 如果上午 10點發生了誤操作,可以用以下語句用備份和 binglog將資料恢複到故
障前:

mysqlbinlog --stop-date="2005-04-20 9:59:59"/var/log/mysql/bin.123456 | mysql -u root –pmypwd

2. 跳過故障時的時間點,繼續執行後面的 binlog,完成恢複
mysqlbinlog --start-date="2005-04-20 10:01:00"/var/log/mysql/bin.123456| mysql -u root -pmypwd \

位置恢複:

和時間點恢複類似,但是更精確,步驟如下:

mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-2010:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

該命令將在/tmp目錄建立小的文字檔,編輯此檔案,找到出錯語句前後的位置號 ,例如前後位置號分別是368312 和368315。恢複了以前的備份檔案後,你應從命令列輸入下面內容:
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \| mysql -u root -pmypwdmysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \| mysql -u root -pmypwd \

上面的第1 行將恢複到停止位置為止的所有事務。下一行將恢複從給定的起始位置
直到二進位日誌結束的所有事務。因為mysqlbinlog 的輸出包括每個SQL 陳述式記錄
之前的SET TIMESTAMP 語句,恢複的資料和相關MySQL 日誌將反應事務執行的原時
間。

MyISAM表修複:

一張損壞的表的癥狀通常是查詢意外中斷並且能看到下述錯誤:
? “tbl_name.frm”被鎖定不能更改。
? 不能找到檔案“tbl_name.MYI”(Errcode:nnn)。
? 檔案意外結束。
? 記錄檔案被毀壞。
? 從表處理器得到錯誤nnn
解決方案如下:

方法一:

myisamchk -r tablename
上面的方法幾乎能解決所有問題,如果不行,則使用:
myisamchk -o tablename
方法二:

1) CHECK TABLE tbl_name [, tbl_name] ... [option] ...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}2) REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.