1. 程式人生 > >mysql進階(一) mysql備份

mysql進階(一) mysql備份

mysql

備份的目的:
    實現災難恢復:誤操作、硬件故障、軟件故障、自然災害、黑客攻擊
	
註意的要點:
    1、能夠容忍丟失多少數據
    2、恢復數據所用的時間
    3、備份需要的時間
    4、是否對業務有影響
    5、備份時服務器負載
	
	
備份類型
    完全備份:備份整個數據庫的數據
    部分備份:備份指定的一部分數據
    增量備份:備份上一次備份後增加的數據
    差異備份:備份從最後一次完全備份後起發生改變的數據
    熱備份:讀寫操作均可以進行
    溫備份:只讀
    冷備份:不可寫,不可讀
    邏輯備份:從數據庫中導出數據,與存儲引擎無關
    物理備份:直接復制數據文件
	

備份需要:
    數據
    二進制日誌,事務日誌
    配置文件
	
	
備份的設計方案:
    數據:完全+增量、完全+部分
    備份手段:邏輯或物理


常用的備份工具:
    mysqldump:mysql自帶的備份工具,邏輯備份、完全備份、部分備份、溫備
    lvm2快照:幾乎熱備,需要借助cp,tar等工具完成,lvm2只負責生成快照
    xtrabackup:支持對InnoDB的熱備份(物理備份
    tar,cp:冷備份


    mysqldump工具使用:邏輯備份工具,在數據小於1G時可以使用,數據大於1G之後則不建議使用
	
	mysqldump [OPTIONS] database [tables]	#不會自動創建數據庫
	mysqldump [OPTIONS] --databases DB1 [DB2 ...]	#備份指定數據庫,會自動創建數據庫
	mysqldump [OPTIONS] --all-databases 	#備份所有數據庫,會自動創建數據庫
	    常用選項:
		-u			#用戶
		-p			#密碼
		--flush-logs 		#執行二進制日誌文件滾動
		--single-transaction	#對InnoDB存儲引擎進行熱備份(只有InnoDB支持)
		--master-data=2	   #在數據文件中,記錄備份那一刻二進制日誌文件的位置,
				    並註釋主要用於參考,多用於進行基於時間點還原
	        --lock-all-tables    #在執行備份時鎖定所有庫的所有表(二選一,必須)
		--lock-tables	    #對單個數據庫在備份時鎖定所有表(二選一,必須)
        例:mysqldump -uroot -p123.com --databases --lock-tables --flush-logs 
            --master-data=2 test > /tmp/mysql.back.`date "+%F__%R"`

	
	
    LVM2快照實現數據幾乎熱備
        實現條件:mysql數據存儲在LVM邏輯卷中,需要有足夠的空間做快照
	備份策略:    
	    1、創建全局鎖
	        mysql> FLUSH TABLES WITH READ LOCK;
	    2、記錄二進制日誌文件及事件位置
	        mysql -uroot -p123.com -e ‘FLUSH LOGS;‘		#進行日誌滾動
	        mysql -uroot -p123.com -e ‘SHOW MASTER STATUS;‘>/tmp/test.`date +%F`
	        	  #記錄二進制日誌位置
	    3、創建LVM快照
	        lvcreate -L 1GB -s -n test_snap /dev/vg_test/lv_test
	                -L 1G 		#快照大小,一般和數據文件差不多
	                -s    		#表示創建快照 
		        -n test_snap 	#快照名
			/dev/vg_test/lv_test 	#要創建快照的邏輯卷
	    4、釋放全局鎖
	        mysql> UNLOCK TABLES;
		    
	    5、掛載快照卷
	        mount /dev/vg_test/test_snap /mnt
		    
	    6、備份數據並刪除快照卷
	        cp -a /mnt/date/mysql /tmp		#復制數據文件
	        umount /mnt				#卸載快照卷
	        lvremove /dev/vg_test/test_snap 	#刪除快照
		    
	    7、制定好備份計劃,每隔一段時間對二進制文件進行備份
	        每隔一段時間對mysql的二進制文件進行備份,以實現將來的基於時間點還原數據
	            例:cp -p /data/mysql-bin.000007 /tmp/mysql_7.sql	#備份二進制日誌
				
	8、還原
            還原時只需要將數據文件復制到mysql的數據目錄中,在使用二進制日誌對數據進行時間點還原
		例:cp -a /tmp/mysql /data/mysql		#還原數據
		    mysql> source /tmp/mysql_7.sql;		#進行基於時間點的還原


	xtrabackup實現mysql熱備:
	    註意:xtrabackup只能對InnoDB實現熱備和增量備份
	    https://www.percona.com/downloads/XtraBackup/LATEST/	#下載地址
	    安裝:
		1、配置好epel源
		2、yum -y localinstall percona-xtrabackup-2.3.2-1.el6.x86_64.rpm    #安裝

		
	    備份工具:
		xtrabackup包含兩個主要的工具,即xtrabackup和innobackupex
		innobackupex:是xtrabackup重封裝的Perl腳本,能對innodb和myisam備份,
		                對myisam不能實現熱備和增量備份
		xtrabackup:xtrabackup只能備份innodb和xtradb兩種引擎的表,
		                而不能備份myisam引擎的表
			
			
		innobackupex基本使用
		    常用參數:
		        --help					#查看幫助信息
			--backup				#進行備份操作,可省,默認為執行備份操作
			--apply-log				#恢復前必須的整理工作
			--defaults-file			#指定配置文件路徑,可省,會自動到數據庫中讀取
			--redo-only 			#在做整理操作時,未提交的數據不進行回滾,做增量備份恢復時必須加的選項
			--copy-back				#執行還原操作
			--incremental			#執行增量備份
			--user=name				#指定用戶名,默認為root
			--host=name				#指定主機名,默認為host
			--port=					#指定端口,默認為3306
			--password=name			#指定密碼,默認為空
			--databases=‘db1 bd2‘ 	#備份指定的數據庫,
			--defaults-file=		#指定配置文件,可省
			--no-timestamp=			#自定義備份目錄名
			incremental-basedir=	#基於那一次備份做增量備份
				
		
		
		
    使用實例:
	innodb_file_per_table=1	    #在mysql配置文件中添加,表示每個表使用單獨的表空間文件
	datadir=/usr/local/mysql/data	#在mysql配置文件中添加,表示指定數據文件位置	
	mkdir /backups			#創建備份文件存放目錄
			
    全庫完全備份:
	innobackupex --user=root --password=123.com /backups/
		/backups/			#備份文件存放目錄
		註意:結尾出現completed OK!則為成功,否則則為錯誤
		
		
		
    還原一個完全備份:
	innobackupex --apply-log /backups/2017-02-20_04-40-44/	#對備份文件進行整理
	innobackupex --copy-back /backups/2017-02-20_04-40-44/	#還原數據
	chown mysql:mysql /usr/local/mysql/*			#修改權限
				
		
		
    增量備份:
	innobackupex --user=root --password=123.com  --incremental /backups/ 
	            --incremental-basedir=/backups/2017-02-20_04-40-44/	    
            	/backups/		#增量備份存儲位置
		--incremental-basedir	#指定基於哪一個備份文件進行增量備份,通常都是上一個增量備份
		
		
    增量備份還原:
        innobackupex --apply-log  --redo-only /backups/2017-02-20_05-01-49/	#整理完全備份
        innobackupex --apply-log  --redo-only /backups/2017-02-20_05-01-49
               --incremental-dir=/backups/2017-02-20_05-04-34	#整理第一個增量備份
        innobackupex --copy-back /backups/2017-02-20_05-01-49/	#還原數據
				
		
    部分備份:    
        innobackupex --databases="testdb mysql" /backups/ --user=root --password=123.com
        #備份testdb和mysql數據庫,不管備份那個數據庫都應該備份mysql數據庫
				
    還原部分備份:
        innobackupex --apply-log /backups/2017-02-20_05-24-07/		#準備
        innobackupex --copy-back /backups/2017-02-20_05-24-07/		#還原
        chown mysql:mysql /usr/local/mysql/*				#修改權限
				
				

	


本文出自 “自動化運維” 博客,請務必保留此出處http://hongchen99.blog.51cto.com/12534281/1934238

mysql進階(一) mysql備份