MySQL常見備份與恢復方案

MySQL常見備份方案有以下三種:

       mysqldump + binlog

       lvm + binlog  

       xtrabackup

本例為方便演示,數據庫里面數據為空。下面開始動手

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提供模擬數據

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全量備份:

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 模擬數據發生改變

mysql> insert into test values (2,'yun zhonghe2');    #再插入一條數據。
Query OK, 1 row affected (0.11 sec)

1.4 增量備份

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 數據損壞

rm -rf /data/3309/
killall mysqld

1.6 恢復

上面已經提供了步驟,直接復制過來使用。

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首先鎖表和滾動日志

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創建快照

lvcreate -s -n snap_data -L 500M /dev/vg_node5/mylv_data
  Logical volume "snap_data" created

2.2.3 解鎖表

mysql> unlock tables;  
Query OK, 0 rows affected (0.00 sec)

2.2.4 復制快照卷數據到備份目錄下

mkdir -p /backup/lvm
mount /dev/vg_node5/snap_data /mnt/lvm
cp -R /mnt/3309/* /backup/lvm

2.2.5 刪除快照

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恢復,只需要直接拷貝備份目錄下的文件即可

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創建一個具有最小權限的用戶

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、CSVARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。

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提供改變數據。

mysql> insert into test.test values (3,'yun zhonghe3');
Query OK, 1 row affected (0.03 sec)

3.4增量備份

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 模擬數據損壞

rm -rf /data/3309/
killall mysqld

3.6增量備份恢復

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目錄。

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啟動數據庫查看。

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進行備份和還原。

 

 

原創文章,作者:艾賀,如若轉載,請注明出處:http://www.www58058.com/8528

(0)
艾賀艾賀
上一篇 2015-10-01
下一篇 2015-10-03

相關推薦

  • shell腳本3——循環語句

    流程控制:      順序執行      選擇執行      循環執行 循環執行:      將某代碼段重復運行多次      重復運行多少次:  &…

    Linux干貨 2016-08-18
  • Linux基礎 文件系統目錄標準FHS

    概述 本文前半部分介紹了 Linux 文件系統目錄標準 FHS (Filesystem Hierarchy Standard)。后半部分整理了個人學習 Linux 過程中涉及到的部分文件和路徑,激勵自己堅持更新,以期完善。 背景 由于Linux是遵循開源協議,任何人都可以根據Linux的核心代碼制作和發行版本。如果每個人都按自己的喜好,在/目錄下創建目錄、存…

    Linux干貨 2016-08-07
  • nginx負載均衡搭建

    組 網絡拓撲圖 nginx負載均衡服務器搭建 首先準備三臺機器 主機A(nginx負載均衡器) 主機B 主機C 主機A需兩塊網卡(一塊外網,一塊內網) 主機B和主機C各一塊 (各一塊內網的IP,如果主機B C和主機A內網網卡在一個網段就不需要配置網關地址了。 規劃好網絡后,nginx負載主機分別ping下各rs主機是否可通 主機A打開核心轉發功能 #echo…

    Linux干貨 2017-05-17
  • sed的用法小結

    sed的用法小結 sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等sed [OPTION]… ‘script’ [input-file] … OPTION: -n 不輸出模式空間中的內容至屏幕,僅顯示script處理后的結果 -e 多點編輯,eg: ~]# sed -e ‘s@^#[[…

    Linux干貨 2017-08-22
  • Linux運維基礎2

    shell編程

    Linux干貨 2018-03-19
  • 在虛擬機上使用CentOS6的兩個iso文件創建本地yum倉庫和http倉庫

    yum客戶端和服務器端都是本虛擬機 一、創建本地磁盤訪問的yum倉庫 條件和要求: a.guest虛擬機需要添加2個光驅,分別裝載CentOS6.4發行版的DVD1和DVD2 b.DVD1和DVD2的掛載目錄分別是:/media/cdrom/下的os和extras,并設置開機掛載 c.使用CentOS-Media.repo作為yum客戶端配置文件,將其他re…

    Linux干貨 2015-09-22
欧美性久久久久