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)、以及MyISAMMERGE、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 22:10
下一篇 2015-10-03 11:50

相關推薦

  • Linux系統用戶與組管理命令及配置文件總結

    一、Linux系統用戶及組分類 1、用戶類別 Linux系統中的用戶大致可分為三類:root用戶、系統用戶、普通用戶。每一個用戶都擁有一個唯一的身份標識UID。 2、組分類 與用戶信息對應的,Linux系統中的組也可分為三類:root組、系統組、普通組。每一個組也有一個對應的唯一標識GID。 需要說明的是,UID和GID為0的用戶對應的就是固定的root,即…

    Linux干貨 2016-10-23
  • 文件查找

    文件查找 簡介:在文件系統上查找符合條件的文件,就是文件查找。 文件查找命令:locate, find            非實時查找(數據庫查找):locate        &nbsp…

    Linux干貨 2016-08-18
  • 網絡基本概念介紹

    Linux網絡屬性管理 網絡節點分布:廣域網、城域網、局域網 按交換方式:線路交換、報文交換、分組交換 按網絡拓撲結構:以太網,令牌環網、星型網絡、樹型網絡、總線型網絡、網狀網絡 Ethernet: CSMA/CD 載波偵探/多路訪問/沖突檢測機制 1.想發送信息的接點首先“監聽”信道,看是否有信號在傳輸。如果信道空閑,就立即發送。2.如果信道忙,則繼續監聽…

    Linux干貨 2016-07-29
  • Linux文件管理初步(第二周)

    第二周作業 1.Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示 目錄管理管理類命令 mkdir make directories mkdir [OPTION]… DIRECTORY… 注意:路徑基名作為命令的作用對象時,基名之前的路徑必須要存在;     -p:自動按…

    Linux干貨 2016-09-05
  • Kickstart+PXE自動部署

    Kickstart+PXE自動部署 無人值守安裝簡介 無人值守安裝(Unattended Setup)指軟件安裝時無需任何用戶干預,直接按默認或通過應答文件設置安裝,這對于無特殊需求的用戶或企業大批量部署安裝操作系統及軟件時非常方便。無人值守安裝也稱為靜默安裝,在安裝過程中可以靜默安裝好預先設計集成的一些常用軟件,安裝結束以后軟件就已經可以使用,很多軟件都支…

    Linux干貨 2016-09-17
  • linux 病毒 sfewfesfs

    由于昨天在內網服務器A不小心rm -fr / ,導致服務器A完蛋,重裝系統后,不知道啥原因,局域網癱瘓不能上網,最后發現內網服務器A的一個進程sfewfesfs cpu 300%。路由器被網絡阻塞啦。 于是百度這個病毒:都說該病毒很變態。第一次中linux病毒,幸虧是內網,感覺比較爽。(總結網絡內容,引以為戒) 1、病毒現象 服務器不停向外網發送數據包,占網…

    Linux干貨 2015-04-03
欧美性久久久久