MySQL常见备份与恢复方案
MySQL常見備份方案有以下三種:
mysqldump + binlog
lvm + binlog
xtrabackup
本例為方便演示,數據庫里面數據為空。下面開始動手
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | mkdir?/opt/backup????????????????????????????????#創建備份目錄 mkdir?-p?/data/3309/{data,binlog}???? cd?/usr/local/mysql/ scripts/mysql_install_db?--user=mysql?--datadir=/data/3309/data/?--basedir=/usr/local/mysql/ chown?mysql.mysql?-R?/data/3309/ cp?support-files/my-small.cnf?/data/3309/my.cnf???#提供配置文件 ?? vim?/data/3309/my.cnf?????????????????????????????#編輯配置文件 [client] #password???????=?your_password port????????????=?3309 socket??????????=?/tmp/mysql.sock4 #?The?MySQL?server [mysqld] port????????????=?3309 socket??????????=?/tmp/mysql.sock4 skip-external-locking key_buffer_size?=?16K max_allowed_packet?=?1M table_open_cache?=?4 sort_buffer_size?=?64K read_buffer_size?=?256K read_rnd_buffer_size?=?256K net_buffer_length?=?2K thread_stack?=?128K datadir?=?/data/3309/data server-id???????=?3309 log-bin=/data/3309/binlog/mysql-bin???#二進制日志位置 binlog_format=mixed???????????????#二進制日志格式 log-error?=?/data/3309/mysql-err???????#錯誤日志位置 innodb_file_per_table?=?1????????????#為每一個新數據表創建一個表空間文件 sync_binlog?=?1????????????????????#寫二進制日志的時候,同步到磁盤上面 ?? cp?/data/3309/my.cnf?/opt/backup/???#備份配置文件 mysqld_safe?--defaults-file=/data/3309/my.cnf?&??#啟動mysql |
1、利用mysqldump完全備份mysql,配合二進制日志備份實現增量備份
mysqldump 選項請參考http://wangweiak47.blog.51cto.com/2337362/1589304
1.1提供模擬數據
| 1 2 3 4 5 6 7 8 | mysql?-S?/tmp/mysql.sock4???#連接mysql mysql>?use?test; Database?changed mysql>?create?table?test?(id?int(2),comment?char(30));??#創建表 Query?OK,?0?rows?affected?(0.34?sec) ?? mysql>?insert?into?test?values?(1,'yun?zhonghe');??#插入數據 Query?OK,?1?row?affected?(0.16?sec) |
1.2全量備份:
| 1 | mysqldump?-S?/tmp/mysql.sock4?-A?-B?-F?-x?--events?--triggers?--routines?--master-data=2?>?/opt/backup/all_data-`date?+%F--%U`.sql |
1.3 模擬數據發生改變
| 1 2 | mysql>?insert?into?test?values?(2,'yun?zhonghe2');????#再插入一條數據。 Query?OK,?1?row?affected?(0.11?sec) |
1.4 增量備份
| 1 2 | mysqladmin?-S?/tmp/mysql.sock4?flush-logs???#增量備份前,先滾動一下二進制日志。 cp?`cat?/data/3309/binlog/mysql-bin.index?|?tail?-n?2?|?head?-n?1`?/opt/backup/???#備份二進制日志 |
1.5 數據損壞
| 1 2 | rm?-rf?/data/3309/ killall?mysqld |
1.6 恢復
上面已經提供了步驟,直接復制過來使用。
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | mkdir?-p?/data/3309/{data,binlog} cd?/usr/local/mysql/ scripts/mysql_install_db?--user=mysql?--datadir=/data/3309/data/?--basedir=/usr/local/mysql/ cp?/opt/backup/my.cnf?/data/3309/ chown?mysql.mysql?-R?/data/3309/ mysqld_safe?--defaults-file=/data/3309/my.cnf?&??? ?? mysql?-S?/tmp/mysql.sock4?????#連接mysql查看數據 mysql>?set?sql_log_bin=0; Query?OK,?0?rows?affected?(0.00?sec) ?? mysql>?show?variables?like?'sql_log_bin'; +---------------+-------+ |?Variable_name?|?Value?| +---------------+-------+ |?sql_log_bin???|?OFF???| +---------------+-------+ 1?row?in?set?(0.00?sec) ?? mysql>?source?/opt/backup/all_data-2015-10-01--39.sql ?? mysql>?select?*?from?test.test;???#還缺一個數據 +------+-------------+ |?id???|?comment?????| +------+-------------+ |????1?|?yun?zhonghe?| +------+-------------+ 1?row?in?set?(0.00?sec)? ?? mysql>?source?/tmp/incres-1.sql; ?? mysql>?select?*?from?test.test;???#數據已恢復 +------+--------------+ |?id???|?comment??????| +------+--------------+ |????1?|?yun?zhonghe??| |????2?|?yun?zhonghe2?| +------+--------------+ 2?rows?in?set?(0.00?sec) ?? mysql>?set?sql_log_bin?=?1;??#打開二進制記錄開關。 |
1.7小結,mysqldump適合于數據量較小的場合,它的優點是有眾多選項,使用起來非常靈活,缺點是數據量一旦過大,非常耗時耗力。
2、使用lvm進行全備。
lvm快照卷原理參考
http://baike.baidu.com/link?url=iEpO_zm_AbHbk-ijQa8jNcFRoPPG2NdTYb_cRoQ7mjQb_ag9g-fL7yHPXV7Atp2j3J0L5xYynM9KKLIwycW_S_
2.1 數據接著上次繼續開始。
2.2 全備。
需保證數據庫存放在邏輯卷組上面,才行。
2.2.1首先鎖表和滾動日志
?
| 1 2 3 4 5 | mysql>?flush?table?with?read?lock; Query?OK,?0?rows?affected?(0.02?sec) ?? mysql?-S?/tmp/mysql.sock4?-e?'show?master?status;'?>?/backup/master.info??#記錄當前日志信息 mysqladmin?-S?/tmp/mysql.sock4?flush-logs???#滾動日志 |
2.2.2創建快照
| 1 2 | lvcreate?-s?-n?snap_data?-L?500M?/dev/vg_node5/mylv_data ??Logical?volume?"snap_data"?created |
2.2.3 解鎖表
| 1 2 | mysql>?unlock?tables;? Query?OK,?0?rows?affected?(0.00?sec) |
2.2.4 復制快照卷數據到備份目錄下
| 1 2 3 | mkdir?-p?/backup/lvm mount?/dev/vg_node5/snap_data?/mnt/lvm cp?-R?/mnt/3309/*?/backup/lvm |
2.2.5 刪除快照
| 1 2 3 4 | umount?/mnt lvremove?/dev/mapper/vg_node5-snap_data Do?you?really?want?to?remove?active?logical?volume?snap_data??[y/n]:?y ??Logical?volume?"snap_data"?successfully?removed |
2.3增量備份,只需和定時復制binlog到備份目錄下面即可
2.4恢復,只需要直接拷貝備份目錄下的文件即可
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | killall?mysqld rm?-rf?/data/3309/ cp?-R?/backup/lvm/?/data/3309/ chown?mysql.mysql?-R?/data/3309/ mysqld_safe?--defaults-file=/data/3309/my.cnf?& ss?-tnl?|?grep?330 LISTEN?????0??????50????????????????????????*:3309?????????????????????*:* ?? mysql>?select?*?from?test.test;???#數據未改變 +------+--------------+ |?id???|?comment??????| +------+--------------+ |????1?|?yun?zhonghe??| |????2?|?yun?zhonghe2?| +------+--------------+ |
2.5小結:
lvm實現物理備份速度相對mysqldump來比較快,實現也比較簡單,是不錯的選擇。
缺點:數據目錄必須存放在lvm卷組上面
3、使用xtrabackup實現熱備。
請自行到官網下載并安裝對應的rpm包。
使用方法參考:詳細參考:
http://www.cnblogs.com/Amaranthus/archive/2014/08/19/3922570.html
3.1創建一個具有最小權限的用戶
| 1 2 3 | mkdir?/backup/xtrabackup mysql>?grant?RELOAD,?LOCK?TABLES,?REPLICATION?CLIENT?on?*.*?to?'bkuser'@'localhost'?identified?by?'123456'; mysql>?flush?privileges; |
3.2完全熱備。
使用innobakupex備份時,其會調用xtrabackup備份所有的InnoDB表,復制所有關于表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。
| 1 2 3 4 | innobackupex?--user=bkuser?--password=123456?--socket=/tmp/mysql.sock4?--defaults-file=/data/3309/my.cnf?/backup/xtrabackup/?#相關選項自行help。 #nnobackupex:?completed?OK!?#出現此選項代表備份完成。 ls?/backup/xtrabackup/ 2015-10-01_17-00-13 |
(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN(日志序列號)范圍信息;
每個InnoDB頁(通常為16k大小)都會包含一個日志序列號,即LSN。LSN是整個數據庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。
(2)xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日志文件及至備份這一刻為止二進制日志事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二進制日志文件及用于InnoDB或XtraDB表的二進制日志文件的當前position。
(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執行文件;
(5)backup-my.cnf —— 備份命令用到的配置選項信息;
3.3提供改變數據。
| 1 2 | mysql>?insert?into?test.test?values?(3,'yun?zhonghe3'); Query?OK,?1?row?affected?(0.03?sec) |
3.4增量備份
| 1 | innobackupex?--user=bkuser?--password=123456?--socket=/tmp/mysql.sock4?--defaults-file=/data/3309/my.cnf?--incremental?/backup/xtrabackup/?--incremental-basedir=/backup/xtrabackup/2015-10-01_17-00-13/ |
3.5 模擬數據損壞
| 1 2 | rm?-rf?/data/3309/ killall?mysqld |
3.6增量備份恢復
| 1 2 | innobackupex?--apply-log?--redo-only?/backup/xtrabackup/2015-10-01_17-00-13/ innobackupex?--apply-log?--redo-only?/backup/xtrabackup/2015-10-01_17-00-13/?--incremental-dir=/backup/xtrabackup/2015-10-01_17-15-00/ |
#注意,多實例的話,仍然需要備份配置文件,啟動的時候需要binlog目錄。
?
| 1 2 3 4 | mkdir?-p?/data/3309/{data,binlog} chown?mysql.mysql?-R?/data/ cp?/opt/backup/my.cnf?/data/3309/ innobackupex?--copy-back?/backup/xtrabackup/2015-10-01_17-00-13/?--defaults-file=/opt/backup/my.cnf???#恢復數據。 |
3.6啟動數據庫查看。
| 1 2 3 4 5 6 7 8 9 10 11 | mysqld_safe?--defaults-file=/data/3309/my.cnf?& mysql?-S?/tmp/mysql.sock4 mysql>?select?*?from?test.test;???#數據修復完成。 +------+--------------+ |?id???|?comment??????| +------+--------------+ |????1?|?yun?zhonghe??| |????2?|?yun?zhonghe2?| |????3?|?yun?zhonghe3?| +------+--------------+ 3?rows?in?set?(0.01?sec) |
小結:
xtrabacup具有如下特點。
(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基于壓縮等功能節約磁盤空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快;
因此建議學會熟練使用xtrabackup進行備份和還原。
總結
以上是生活随笔為你收集整理的MySQL常见备份与恢复方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国内大数据开发中比较受欢迎的几款工具
- 下一篇: Tensorflow中placehold