1. 程式人生 > >05: 實時增量備份 、 XtraBackup 備份 、 總結和答疑 、 MySQL 主從同步

05: 實時增量備份 、 XtraBackup 備份 、 總結和答疑 、 MySQL 主從同步

lte per xtra 使用 pos posit 完全備份 一次 信息

day05 增量備份
一、啟用binlog日誌 實現 實時增量備份
二、使用第3方軟件提供的命令做增量備份

+++++++++++++++++++++++++++++++++
一、啟用binlog日誌 實現 實時增量備份
1.1 binlog日誌介紹:二進制日誌, 是MySQL數據庫服務日誌文件中的一種,記錄執行的除查詢之外的sql命令。默認沒有啟用。

查詢的sql命令 : show desc select

1.2 啟用binlog日誌?
vim /etc/my.cnf
[mysqld]
server_id=50 #1-255
log-bin
binlog-format="mixed" #ROW

....
:wq
#systemctl restart mysqld

日誌文件默認存儲位置: 數據庫目錄 /var/lib/mysql/
日誌文件的默認名稱:主機名-bin.編號 500M
日誌索引文件 host50-bin.index

1.3 查看日誌文件內容?
#mysqlbinlog 目錄名/日誌文件名
#mysqlbinlog /var/lib/mysql/host50-bin.000001

1.4 自定定義日誌文件的名字和存儲目錄?
#mkdir /logdir
#chow mysql /logdir
#setenforce 0
#vim /etc/my.cnf
[mysqld]
server_id=50 #1-255

#log-bin
log-bin=/logdir/plj
binlog-format="mixed"
....
:wq
#systemctl restart mysqld
#ls /logdir/

1.5 日誌文件記錄sql命令的方式?
時間點
偏移量(pos)

1.6 執行日誌文件內的sql命令恢復數據?
#mysqlbinlog [選項] 目錄名/日誌文件名 | mysql -uroot -p123456

時間點
--start-datetime="yyyy-mm-dd hh:mm:ss"
--stop-datetime="yyyy-mm-dd hh:mm:ss"

偏移量(pos)
--start-position=數字 --stop-position=數字

#mysqlbinlog --start-position=293 --stop-position=1490 /logdir/plj.000001 | mysql -uroot -p123456

1.7 手動創建新的binlog日誌文件?
mysql> flush logs;
#mysql -uroot -p123456 -e "flush logs"
#mysqldump -uroot -p123456 --flush-logs db4 > /root/db4.sql

systemctl restart mysqld

1.7 刪除已有的binlog日誌文件
mysql> reset master;
mysql> purge master logs to "日誌文件名";
mysql> purge master logs to "plj.000006";
++++++++++++++++++++++++++++++++++++++++++
二、使用第3方軟件提供的命令做增量備份---
2.1 percona 介紹?

2.2 安裝percona
#yum -y install perl-Digest-MD5 perl-DBD-MySQL
#rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
#rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

2.3 innobackupex 命令的語法格式 ?
#innobackupex <選項>

選項?
--user 用戶名
--password 密碼
--databases 庫名
--no-timestamp 不使用系統日期做備份目錄的子目錄名
--apply-log 恢復日誌
--copy-back 恢復數據

A、使用innobackupex名字只做完全 和完全恢復?
A.1 完全備份
#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" /allbak --no-timestamp
#ls /allbak
A.2 完全恢復
#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" --apply-log /allbak
#rm -rf /var/lib/mysql
#mkdir /var/lib/mysql
#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" --copy-back /allbak
#ls /var/lib/mysql
#chown -R mysql:mysql /var/lib/mysql
#systemctl stop mysqld
#systemctl start mysqld
#mysql -uroot -p123456
mysql> show databases;

/var/lib/mysql
++++++++++++++++++++++++++++++++++++++
增量備份
--incremental 目錄名 #增量備份數據存儲目錄
--incremental-basedir=目錄名 #上次備份數據存儲目錄
1 先要有一次完全備份 /onedir
#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" /onedir --no-timestamp
2 增量備份
第一次增量備份 存儲目錄/new1dir
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--incremental /new1dir --incremental-basedir=/onedir --no-timestamp
第二增量備份數據存儲的目錄 /new2dir
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--incremental /new2dir --incremental-basedir=/new1dir --no-timestamp

增量備份的工作原理:
innobackupex 命令 -----> innodb 存儲引擎的表

數據庫目錄/var/lib/mysql 下
事務日誌文件 記錄 執行的sql 操作 和 數據信息
ib_logfile1 ib_logfile0 ibdata1

LSN 日誌序列號

備份目錄的文件說明: /onedir /new1dir /new2dir
cat xtrabackup_checkpoints
xtrabackup_logfile

增量恢復(要求數據庫目錄必須是空的)
--redo-only 合並日誌
--incremental-dir=目錄名 #增量恢復時,指定使用哪個備份目錄的恢復數據。

1 #rm -rf /var/lib/mysql
2 恢復日誌
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--apply-log --redo-only /onedir

#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--apply-log --redo-only /onedir --incremental-dir=/new1dir

#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--apply-log --redo-only /onedir --incremental-dir=/new2dir
3 恢復數據
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--copy-back /onedir

4 修改文件所有者

chown -R mysql:mysql /var/lib/mysql

5 重啟數據庫服務
#systemctl restart mysqld

6 查看數據
#mysql -uroot -p123456
mysql>
++++++++++++++++++++++++++++++++++++++++
恢復完全備份數據中的某張表

innobackupex 命令信息:
--export 導出表信息
import 導入表空間

刪除表空間
mysql> alter table 庫.表 discard tablespace;

db66.a
db66.b
完全備份:
#innobackupex --user root --password 123456
--databases="db66" /db66bak --no-timestamp
#ls /db66bak

mysql> use db66;
mysql> drop table a;
mysql> create table a(id int);

#ls /var/lib/mysql/db66/
a.frm a.ibd

導出表信息
#innobackupex --user root --password 123456
--databases="db66" --apply-log --export /db66bak
#ls /db66bak/db66/
刪除表空間
mysql> alter table db66.a discard tablespace;
#ls /var/lib/mysql/db66/

把備份目錄下導出的表信息文件拷貝到數據庫目錄下

cp /db66bak/db66/a.{cfg,exp,ibd} /var/lib/mysql/db66/

chown mysql /var/lib/mysql/db66/a.*

導入表空間
mysql> alter table db66.a import tablespace;
mysql> select from a;
mysql> select
from b;

++++++++++++++++++++++++++++++++++++++++
innobackupex 增量備份
選項:
--user --password --databases
--incremental
--incremental-basedir
--apply-log --redo-only --incremental-dir
--export import

mysql> alter table 庫.表 discard tablespace;

完全備份完全恢復
增量備份增量恢復 (增量備份原理)
使用完全備份文件恢復某張表的數據

+++++++++++++++++++++++++++++++++++++++++
53 : scp -r /var/lib/mysql 192.168.4.51:/var/lib/
51 : chown -R mysql:mysql /var/lib/mysql
systemctl restart mysqld

05: 實時增量備份 、 XtraBackup 備份 、 總結和答疑 、 MySQL 主從同步