个人学习使用
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
----------------------------------------------------------------------
getenforce
Enforcing
----------------------------------------------------------------------
systemctl status firewalld.service
Active: active (running)
----------------------------------------------------------------------
systemctl status NetworkManager
Active: active (running)
----------------------------------------------------------------------
MySQL
Server version: 5.7.26
一)mysqldump逻辑备份工具
优点:文本形式、可读性比较高、易于处理、压缩比较高、跨平台性好
缺点:备份逻辑复杂、时间较长
适合:小数据量
1.1)参数
- 连接参数
-u
-p
-h
-s - 备份参数
-A:全库备份
mysqldump -uroot -p -A >/data/mysql/full.sql
-B:单库、多库备份
#单库
mysqldump -uroot -p -B world >/data/mysql/db.sql
------------------------------------
#多库
mysqldump -uroot -p -B world lianxi >/data/mysql/db.sql
------------------------------------
#单表
mysqldump -uroot -p world city >/data/mysql/wc.sql
------------------------------------
#多表
mysqldump -uroot -p world city country >/data/mysql/wcc.sql
单表、多表备份恢复时,需要建立好库并use进去。
--ignore-table 备份库时忽略这个库中的某个表。
--master-data=2
(1)记录备份时binlog位置点
(2)自动锁表
--single-transaction
开启快照备份,只支持InnoDB存储引擎
--triggers:触发器,需单独备份
-R:函数,需单独备份
-E:事件,需单独备份
--max_allowed_packet=64M
最大数据包大小
如报错,双倍增加大小值
1.2)完整备份语句
- 备份
mysqldump -uroot -p -A --master-data=2 --single-transaction --triggers -R -E --max_allowed_packet=64M >/data/mysql/backup/full_`date +%F`
- 压缩备份
mysqldump -uroot -p -A --master-data=2 --single-transaction --triggers -R -E --max_allowed_packet=64M |gzip >/data/mysql/backup/full_`date +%F`.gz
1.3)备份恢复
- 临时关闭二进制日志
set sql_log_bin=0;
- 恢复全备
source /data/mysql/backup/full_2020-02-25;
- 恢复binlog
source /data/mysql/backup/bin.sql;
二)xtrabackup物理备份工具
percona公司研发的开源MySQL物理备份工具
2.1)配置
- 修改配置文件
vim /etc/my.cnf
--------------------------
[client]
socket=/tmp/mysql.sock
- 创建备份目录
mkdir -p /data/mysql/backup/
2.2)全备
- 全备(默认)
innobackupex --user=root --password=123456 --no-timestamp /data/mysql/backup/full_`date +%F`
- 全备恢复
(1)Prepared backup
innobackupex --apply-log /data/mysql/backup/full_2020-02-25
(2)Copyback
cp -a /data/mysql/backup/full_2020-02-25/* /data/mysql/data/
--------------------------------------------
chown -R mysql.mysql /data/mysql/
2.3)增量备份
- 周日全备
innobackupex --user=root --password=123456 --no-timestamp /data/mysql/backup/full_`date +%F`
- 模拟周一白天数据变化
create database xbk charset utf8mb4;
use xbk
create table t1 (id int);
insert into t1 values (1);
insert into t1 values (2);
insert into t1 values (3);
insert into t1 values (4);
insert into t1 values (5);
- 周一晚上增量备份
innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/data/mysql/backup/full_2020-02-25 /data/mysql/backup/inc1
- 模拟周二白天数据变化
use xbk
create table t2 (id int);
insert into t2 values (1);
insert into t2 values (2);
insert into t2 values (3);
insert into t2 values (4);
insert into t2 values (5);
- 周二晚上增量备份
innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/data/mysql/backup/inc1 /data/mysql/backup/inc2
- 模拟周三白天数据变化
use xbk
create table t3 (id int);
insert into t3 values (1);
insert into t3 values (2);
insert into t3 values (3);
insert into t3 values (4);
insert into t3 values (5);
- 周三晚上增量备份
innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/data/mysql/backup/inc2 /data/mysql/backup/inc3
- 模拟数据库故障
pkill mysqld
----------------------------
rm -rf /data/mysql/data/*
- 使用xtrabackup实现故障恢复
(1)检查所有备份和日志
(2)准备并合并增量到全备
1.基础全备的准备
innobackupex --apply-log --redo-only /data/mysql/backup/full_2020-02-25
2.合并inc1到全备,并且准备
innobackupex --apply-log --redo-only --incremental-dir=/data/mysql/backup/inc1 /data/mysql/backup/full_2020-02-25
3.合并inc2到全备,并且准备
innobackupex --apply-log --redo-only --incremental-dir=/data/backup/inc2 /data/mysql/backup/full_2020-02-25
4.合并inc3到全备,并且准备
innobackupex --apply-log --incremental-dir=/data/backup/inc3 /data/mysql/backup/full_2020-02-25
最后一次合并不需加'--redo-only'
5.再次检查full备份的状态
innobackupex --apply-log /data/mysql/backup/full_2020-02-25
6.恢复数据
innobackupex --copy-back /data/mysql/backup/full_2020-02-25/
---------------------------------------
chown -R mysql.mysql /data/mysql/