代码拉取完成,页面将自动刷新
同步操作将从 panglijing/DBA 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
2021/10/12 _RDBMS1_DAY06 ( 数据备份和恢复)
1 数据的备份与恢复
1.1 相关概念
数据备份:就是把当前服务器的上数据拷贝一份 放到其他的存储设备里
恢复数据: 放到其他的存储设备里备份 , 还原丢失的数据。
数据备份方式:物理备份 、逻辑备份
数据备份策略 :
完全备份 :备份所有数据:
可以是一台数据库服务器上的所有数据
也可以是 一个数据库下所有表 比如 tarena 库下的所有表
还可以仅一张表里的所有记录
增量备份: 备份上次备份后,所有新产生的数据。
差异备份:备份完全备份后,所有新产生的数据。
通常 备份策略的使用方式:
完全备份+增量备份
完全备份+差异备份
就是 每周一 对数据库服务器上数据做完全备份 ,每周的周二到周日对数据做增量备份或差异备份
通过计划 执行 备份脚本实现
00 23 * * 1 执行完全备份脚本
59 23 * * 2-0 执行备份新产生数据的脚本
******数据备份命令的使用 之 物理备份与恢复
物理备份
[root@host50 ~]# systemctl stop mysqld
[root@host50 ~]# cp -r /var/lib/mysql /bakdir/mysql.bak
[root@host50 ~]# ls /bakdir/
mysql.bak
[root@host50 ~]# cd /var/lib/mysql
[root@host50 ~]# tar -zcvf /bakdir/mysql.tar.gz ./*
[root@host50 ~]# ls /bakdir/
mysql.bak mysql.tar.gz
[root@host50 ~]#
[root@host50 ~]# cp -r /bakdir/mysql.bak/* /var/lib/mysql/
****模拟数据丢失
[root@host50 ~]# rm -rf /var/lib/mysql/db1
[root@host50 ~]# systemctl start mysqld
[root@host50 ~]# mysql -uroot -p123456
mysql> drop database tarena;
mysql> exit ;
---------物理恢复数据
[root@host50 ~]# systemctl stop mysqld
[root@host50 ~]# rm -rf /var/lib/mysql/*
[root@host50 ~]# ls /var/lib/mysql/
[root@host50 ~]# cp -r /bakdir/mysql.bak/* /var/lib/mysql/
[root@host50 ~]# chown -R mysql:mysql /var/lib/mysql
[root@host50 ~]# systemctl start mysqld
[root@host50 ~]# systemctl start mysqld
[root@host50 ~]# mysql -uroot -p123456
mysql> show databases; 能够看所有的库
******数据备份命令的使用 之 逻辑备份与恢复
使用数据库服务软件自带命令或安装其他软件提供的命令备份和恢复
~~~~~使用mysql服务软件提供的命令做备份和恢复
数据库服务必须是运行状态!!!!
完全备份数据命令 mysqldump 命令格式
]# mysqldump -uroot -p密码 库名 > /目录名/备份文件名.sql
库名的表示方式:
库名 表名 仅备份库下一张的所有记录
库名 表名1 表名2 一起备份库下2张表的所有记录
-B 库名 仅备份1个库里的所有表
-B 库名1 库名2 一起备份2个库里的所有表
-A 或 --all-databases 备份服务器上的所有库
按照案例练习数据完全备份 时间 到 16:15
完全恢复数据命令 mysql 命令格式
]# mysql -uroot -p密码 < /目录名/备份文件名.sql
使用当个表的备份文件恢复数据的时候必须写库名,不然数据库服务不知道把数据恢复那个库里
]# mysql -uroot -p密码 库名 < /目录名/备份文件名.sql
练习恢复数据
1 先模拟数据丢失(把做过备份的库 或表 删除 软后使用对应的备份文件恢复 )
2 按照案例练习数据的恢复 时间10分钟 到 16:40
mysqldump的备份缺点:
1 mysqldump 在备份数据和恢复数据的时候会锁表
2 使用 mysqldump备份命令生成备份文件恢复数据,只能
把数据恢复备份时刻的数据。
~~~~~~~~备份新数据
1、在数据库服务器上启用服务binlog日志文件实现
1.1 先学习binlog日志文件管理
1 binlog日志介绍(理论) 文件
2 启用binlog日志
启用数据库50主机的binlog日志文件
]#vim /etc/my.cnf
[mysqld]
server_id = 50
log_bin
:wq
]# systemctl restart mysqld
]# mysql -uroot -p123456
mysql> show master status ; 查看binlog日志信息
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| host50-bin.000001 | 154 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> system ls /var/lib/mysql/host50* #binlog日志默认存储在数据库目录下
/var/lib/mysql/host50-bin.000001 /var/lib/mysql/host50-bin.index(记录当前已有的binlog日志文件)
mysql>
mysql> system cat /var/lib/mysql/host50-bin.index
./host50-bin.000001
mysql>
~~~~~~~~~~ 在50 主机 启用binlog日志时,指定日志文件存放的目录和日志文件命令
]# vim /etc/my.cnf
[mysqld]
server_id = 50
log_bin=/mylog/db50
:wq
[root@host50 ~]# mkdir /mylog
[root@host50 ~]# chown mysql /mylog
[root@host50 ~]# setenforce 0
setenforce: SELinux is disabled
[root@host50 ~]# systemctl restart mysqld
[root@host50 ~]# mysql -uroot -p123456 -e ' show master status'
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000001 | 154 | | | |
+-------------+----------+--------------+------------------+-------------------+
[root@host50 ~]#
[root@host50 ~]# ls /mylog/
db50.000001 db50.index
[root@host50 ~]# cat /mylog/db50.index
/mylog/db50.000001
[root@host50 ~]#
***************创建新的binlog日志文件
默认情况下日志文件记录的sql名让文件大容量大于 1G 的时候数据服务
会自动创建新的日志文件 文件编号顺延。
也可以手动创建新的binlog日志文件记录sql命令如下:
方法1 systemctl restart mysqld
方法2 : 创建新日志文件的个数个完全备份数据库的个数相同
[root@host50 ~]# mysqldump -uroot -p123456 --flush-logs -B tarena
> /bakdir/tarena.sql
[root@host50 ~]# mysqldump -uroot -p123456 --flush-logs -B tarena
db1 > /bakdir/two.sql
方法3 数据库管理员root 执行 创建新日志文件的命令
mysql> flush logs;
***********binlog日志相关管理命令
#查看正在使用binlog日志名和偏移量(记录sql命令的编号)
mysql> show master status;
#查看数据库服务器当前已有全部 binlog日志文件
mysql> show binary logs;
#删除编号之前的所有日志文件
mysql> purge master logs to "db50.000004";
#删除当前所有的日志文件重新创建新日志文件和索引文件
mysql> reset master ;
查看日志文件内容 2 种方法:
方法1 使用系统命令 mysqlbinlog 查看
[root@host50 ~]# mysqlbinlog /mylog/db50.000001
方法2 使用sql命令查看
mysql> mysql> show binlog events in "db50.000001" ;
例子:测试 binlog日志 记录的命令类型(记录除查询之外的所有sql命令)
mysql> reset master ;
mysql> show master status;
mysql> select count(*) from tarena.user; 查看日志名和偏移量
mysql> show master status;
mysql> insert into tarena.user(name) values("boba");
mysql> show master status; 查看日志名和偏移量
mysql> insert into tarena.user(name) values("boba");
mysql> show master status; 查看日志名和偏移量
mysql> show binlog events in "db50.000001";
练习后 休息到 10:05
*****************使用binlog日志文件恢复数据
第一种情况:查看日志的所有内容恢复数据 (恢复所有数据)
命令格式 : ]# mysqlbinlog /目录名/日志文件名 | mysql -uroot -p密码
第二种情况:查看日志的部分内容恢复数据(恢复部分数据)
命令格式 : ]# mysqlbinlog 选项 /目录名/日志文件名 | mysql -uroot -p密码
加了选项后会根据选项指定的范围查看记录的sql命令
选项包括
#查看指定偏移量范围内记录的sql命令
--start-position=偏移量 --stop-position=偏移量
#查看指定时间范围内记录的sql命令
--start-datetime="yyyy/mm/dd hh:mm:ss" --stop-datetime="yyyy/mm/dd hh:mm:ss"
开始时间 结束时间
例子1 : 第一种情况:查看日志的所有内容恢复数据 (恢复所有数据)
命令格式 : ]# mysqlbinlog /目录名/日志文件名 | mysql -uroot -p密码
适用于日志文件里只记录了 insert 和 update 命令 没有delete 命令的情况下
#完全备份 tarena 库 并在完成备份 后 创建新的日志文件
[root@host50 ~]# mysqldump -uroot -p123456 --flush-logs -B tarena > /bakdir/`date +%F`_tarena.sql
[root@host50 ~]# mysql -uroot -p123456 -e 'show master status' 查看新日志文件名
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000002 | 154 | | | |
+-------------+----------+--------------+------------------+-------------------+
[root@host50 ~]#
[root@host50 ~]# mysql -uroot -p123456 管理员root登陆
mysql> 完全备份后 继续插入新的记录
insert into tarena.user(name,uid)values("a",1111);
insert into tarena.user(name,uid)values("aa",1111);
insert into tarena.user(name,uid)values("aaa",1111);
insert into tarena.user(name,uid)values("ab",1111);
insert into tarena.user(name,uid)values("ac",1111);
mysql> show master status; 查看日志文件的偏移量发生了改变
让数据库服务器51 用备份文件恢复数据
[root@host50 ~]# scp /mylog/db50.000002 192.168.4.51:/root/ 把日志文件拷贝给 51
[root@host50 ~]# scp /bakdir/2021-10-18_tarena.sql 192.168.4.51:/root/ 把备份文件拷贝给51
#51主机就是没有tarena库的(如果有的话删除库) ; 使用50的备份文件恢复,
[root@host51 ~]# mysql -uroot -p123456 -e 'show databases' #查看已有的库
查看拷贝文件 在 51 本机的位置和名字
[root@host51 ~]# ls /root/*.sql
/root/2021-10-18_tarena.sql
[root@host51 ~]# ls /root/db50*
/root/db50.000002
[root@host51 ~]# mysql -uroot -p123456 < /root/2021-10-18_tarena.sql 完全备份恢复
[root@host51 ~]# which mysqlbinlog 查看读取日志内容的命令
[root@host51 ~]# mysqlbinlog /root/db50.000002 | mysql -uroot -p123456 读日志内容恢复数据
insert
insert
delete from tarena.user ;
例子 : 第二种情况:查看日志的部分内容恢复数据(恢复部分数据)
命令格式 : ]# mysqlbinlog 选项 /目录名/日志文件名 | mysql -uroot -p密码
选项包括
#查看指定偏移量范围内记录的sql命令
--start-position=偏移量 --stop-position=偏移量
#查看指定时间范围内记录的sql命令
--start-datetime="yyyy/mm/dd hh:mm:ss" --stop-datetime="yyyy/mm/dd hh:mm:ss"
开始时间 结束时间
************修改binlog日志文件的格式(格式就是 日志文件记录sql命令的方式)
查看日志文件的格式
mysql> show variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW | 行格式 看不到具体的sql命令 , 想看到具体的sql命令要修改日志格式。
+---------------+-------+
1 row in set (0.00 sec)
修改日志文件的格式
host50]# vim /etc/my.cnf
[mysqld]
binlog_format="mixed" #自己添加 其他行不需要动
:wq
[root@host50 ~]# mysql -uroot -p123456
[root@host50 ~]# systemctl restart mysqld
mysql> show variables like "binlog_format"; 查看日志格式
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show master status; 查看记录sql命令使用的日志文件
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 | 154 | | | |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
#执行对数据库做 select insert update delete 命令
select count(*) from tarena.user;
mysql> show master status;
mysql> insert into tarena.user(name,uid) values("FFF",7777);
mysql> insert into tarena.user(name,uid) values("AFF",7777);
mysql> insert into tarena.user(name,uid) values("CFF",7777);
mysql> insert into tarena.user(name,uid) values("WFF",7777);
mysql> insert into tarena.user(name,uid) values("GFF",7777);
mysql> select count(*) from tarena.user;
+----------+
| count(*) |
+----------+
| 38 |
+----------+
1 row in set (0.00 sec)
mysql> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 | 1804 | | | |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> delete from tarena.user where uid = 7777;
mysql> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 | 2089 | | | |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql>
mysql> insert into tarena.user(name,uid) values("wwww",7777);
mysql> insert into tarena.user(name,uid) values("AAAwww",7777);
mysql> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 | 2753 | | | |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
怎么确定要执行的 SQL的时间范围和偏移量范围
第1中方法 : 查看日志文件里记录的sql命令,可以看到具体执行的命令了
mysql> show binlog events in "db50.000003"; 只有偏移量 ,看不到命令的执行时间
第2中方法 : 查看日志文件里记录的sql命令,可以看到具体执行的命令了
]# mysqlbinlog /目录名/日志文件名 #即可以看到命令执行的时间又可以命令执行的偏移量
host50]# mysqlbinlog /mylog/db50.000003
*****把 50主机的使用mixed格式记录命令的日志文件拷贝给 51 ,演示查看日志文件里恢复部分数据
记录sql命令的范围,恢复部分数据。
[root@host50 ~]# mysql -uroot -p123456 -e 'show master status'
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 | 2753 | | | |
+-------------+----------+--------------+------------------+-------------------+
[root@host50 ~]#
[root@host50 ~]# scp /mylog/db50.000003 192.168.4.51:/root/
[root@host51 ~]# mysqlbinlog /root/db50.000003
#恢复前查看行数
[root@host51 ~]# mysql -uroot -p123456 -e 'select count(*) from tarena.user'
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+
| count(*) |
+----------+
| 33 |
+----------+
#只指定结束位置 默认从文件头开始查看
若只指定开始不指定结束默认读文件的末尾
[root@host51 ~]# mysqlbinlog --stop-position=1946 /root/db50.000003 | mysql -uroot -p123456
恢复后查看行数
[root@host51 ~]# mysql -uroot -p123456 -e 'select count(*) from tarena.user'mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+
| count(*) |
+----------+
| 38 |
+----------+
[root@host51 ~]#
#通过时间范围恢复
只指定开始时间不指定结束时间默认读到文件的末尾
若只指定的结束时间没有指定开始时间 默认从文件头开始读取文件内容。
[root@host51 ~]# mysqlbinlog --start-datetime="2021/10/18 11:22:49"
/root/db50.000003 | mysql -uroot -p123456
[root@host51 ~]# mysql -uroot -p123456 -e 'select count(*) from tarena.user'mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+
| count(*) |
+----------+
| 40 |
+----------+
[root@host51 ~]#
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
~~~~~~~~~~~~~使用innobackupex命令对数据做备份与恢复
1 概述 见ppt
安装软件提供命令
host50]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
host50]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
[root@host50 ~]# which innobackupex
/usr/bin/innobackupex
[root@host50 ~]# innobackupex #查看命令的格式及选型
[root@host50 ~]# man innobackupex #查看详细帮助 按q 退出帮助
2 使用innobackupex命令对数据做备份和恢复
2.1 数据的完全备份与恢复
完全备份命令格式:
--no-timestamp #不用系统的日志和时间作为存放备份文件的子目录名
]# innobackupex -uroot -p密码 /备份目录名 --no-timestamp
完全恢复数据的命令格式
--apply-log #准备恢复数据
--copy-back #拷贝数据
]# innobackupex --apply-log /备份目录名
]# innobackupex --copy-back /备份目录名
完全恢复数据的步骤:
1 停止数据库服务
2 清空数据库目录
3 准备恢复数据
4 拷贝备份数据到数据库目录下
5 修改数据库目录的所有者和组用户为mysql
6 启动数据库服务
7 管理员登陆查看数据
备份的实验在 主机 50 做
[root@host50 ~]#
]#innobackupex -uroot -p123456 /allbak --no-timestamp
]# ls /allbak/
]# cat /allbak/xtrabackup_checkpoints
恢复的实验在 主机 51做
1 首先 50 把自己的备份文件拷贝给 51 主机
[root@host50 ~]# scp -r /allbak/ 192.168.4.51:/root/
2 在51安装软件提供innobackupex 命令
[root@host51 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
[root@host51 ~]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
休息到 15:05
3 执行恢复数据的操作步骤:
1 停止数据库服务
2 清空数据库目录
[root@host51 ~]# systemctl stop mysqld
[root@host51 ~]# rm -rf /var/lib/mysql/*
[root@host51 ~]# ls /var/lib/mysql
[root@host51 ~]#
3 准备恢复数据
#准备前查看备份配置文件信息
[root@host51 ~]# cat /root/allbak/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 4878972
last_lsn = 4878981
compact = 0
recover_binlog_info = 0
[root@host51 ~]#
#准备恢复数据 [root@host51 ~]# innobackupex --apply-log /root/allbak/
[root@host51 ~]# cat /root/allbak/xtrabackup_checkpoints
backup_type = full-prepared #类型变了
from_lsn = 0
to_lsn = 4878972
last_lsn = 4878981
compact = 0
recover_binlog_info = 0
[root@host51 ~]#
4 拷贝备份数据到数据库目录下
[root@host51 ~]# ls /var/lib/mysql 没拷贝前查看目录列表 空的
拷贝数据 [root@host51 ~]# innobackupex --copy-back /root/allbak/
[root@host51 ~]# ls /var/lib/mysql 拷贝后查看 有文件了
5 修改数据库目录的所有者和组用户为mysql
]# chown -R mysql:mysql /var/lib/mysql
6 启动数据库服务 systemctl start mysqld
7 管理员登陆查看数据
[root@host51 ~]# mysql -uroot -p123456 -e 'show databases'
2.2 使用完全备份文件仅恢复单张表的所有记录
具体操作步骤如下:
什么是表空间? 指定的就是 表名.ibd文件 此文件是用来存储表里数据的 就是使用
SELECT * FROM 库.表名; 查看到记录
1 删除表空间 (就是把没有记录的表名.ibd文件删除)
2 导出表信息
3 拷贝表信息文件到数据库库目录下
4 修改文件的所有者和组用户为mysql
5 导入表空间
6 删除数据库目录下的表信息文件
7 查看表记录
实验:
模拟数据误删除 : 在51主机 删除 tarena.user 表的所有记录
mysql> delete from tarena.user;
mysql> select * from tarena.user;
恢复数据: 在51主机 使用50的完全备份文件 只恢复 user 的的所有记录
1 删除表空间 (就是把没有记录的表名.ibd文件删除)
mysql> alter table tarena.user discard tablespace;
2 导出表信息 (使用备份文件生成要恢复的表的信息)
[root@host51 ~]# innobackupex --apply-log --export /root/allbak
[root@host51 ~]# ls /root/allbak/tarena/user.* 查看导出的文件
3 拷贝表信息文件到数据库库目录下
[root@host51 ~]# cp /root/allbak/tarena/user.cfg /var/lib/mysql/tarena/
[root@host51 ~]# cp /root/allbak/tarena/user.exp /var/lib/mysql/tarena/
[root@host51 ~]# cp /root/allbak/tarena/user.ibd /var/lib/mysql/tarena/
[root@host51 ~]# ls /var/lib/mysql/tarena/user.* 查看文件目录下文件列表
/var/lib/mysql/tarena/user.cfg /var/lib/mysql/tarena/user.frm
/var/lib/mysql/tarena/user.exp /var/lib/mysql/tarena/user.ibd
[root@host51 ~]#
4 修改文件的所有者和组用户为mysql
[root@host51 ~]# chown mysql:mysql /var/lib/mysql/tarena/user.*
5 导入表空间
mysql -uroot -p123456
mysql> alter table tarena.user import tablespace ;
6 删除数据库目录下的表信息文件
[root@host51 ~]# rm -rf /var/lib/mysql/tarena/user.cfg
[root@host51 ~]# rm -rf /var/lib/mysql/tarena/user.exp
7 查看表记录 select count(*) from tarena.user;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~2.3 数据的增量备份与增量恢复
增量备份的定义 : 备份上次备份后,所有新产生的数据。
注意: 做数据的增量备份 ,必须先有1次备份 才能做增量备份 通常第1次备份就完全备份
每周的周一 都对数据库服务器做完全备份
周二到周日 都对数据做增量备份
周一的完全备份
[root@host50 ~]# innobackupex -uroot -p123456 /fullbak --no-timestamp
周一备份数据后继续向表里存储新数据 (模拟有新数据产生)
mysql -uroot -pNSD123...a -e 'insert into tarena.user(name,uid)values("a",1001)' 多执行几遍
增量备份数据的命令格式
]# innobackupex -uroot -p密码 --incremental /增量备份数据存放的目录名
--incremental-basedir=/参考目录名 --no-timestamp
休息到 17:10
周二 对数据做增量备份
[root@host50 ~]# innobackupex -uroot -p123456 --incremental /new1dir
--incremental-basedir=/fullbak --no-timestamp
[root@host50 ~]# ls /new1dir
查看 2数据备份信息
[root@host50 ~]# cat /fullbak/xtrabackup_checkpoints 完全备份
backup_type = full-backuped
from_lsn = 0
to_lsn = 4878972
last_lsn = 4878981
compact = 0
recover_binlog_info = 0
[root@host50 ~]#
[root@host50 ~]# cat /new1dir/xtrabackup_checkpoints 增量备份
backup_type = incremental
from_lsn = 4878972
to_lsn = 4886179
last_lsn = 4886188
compact = 0
recover_binlog_info = 0
[root@host50 ~]#
周二备份数据后继续向表里存储新数据
[root@host50 ~]# mysql -uroot -p123456
-e 'insert into tarena.user(name,uid)values("BBB",1001)'
周三 对数据做增量备份 (周三对数据做增量备份参考的上次备份 就是周二的备份
周二的备份信息 和数据 存储在 /new1dir )
[root@host50 ~]# innobackupex -uroot -p123456 --incremental /new2dir
--incremental-basedir=/new1dir --no-timestamp
#查看备份目录下的备份信息
[root@host50 ~]# cat /new1dir/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 4878972
to_lsn = 4886179
last_lsn = 4886188
compact = 0
recover_binlog_info = 0
[root@host50 ~]#
[root@host50 ~]# cat /new2dir/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 4886179
to_lsn = 4891210
last_lsn = 4891219
compact = 0
recover_binlog_info = 0
[root@host50 ~]#
增量恢复数据的命令格式:
准备恢复数据(定义合并数据的位置)
]# innobackupex --apply-log --redo-only /完全备份目录名
合并数据 (把增量备份数据 与 完全备份数据合并)
]# innobackupex --apply-log --redo-only /完全备份目录名
--incremetal-dir=/增量备份文件存放的目录
拷贝数据库到数据库目录下(把合并到完全备份目录下数据拷贝到数据库目录下)
]# innobackupex --copy-back /完全备份目录名
51主机使用 50的增量备份恢复数据
1 、把50 的备份文件拷贝给51
]# scp -r /fullbak/ 192.168.4.51:/opt/
]# scp -r /new1dir/ 192.168.4.51:/opt/
]# scp -r /new2dir/ 192.168.4.51:/opt/
2 、51主机安装恢复数据使用的命令
[root@host51 ~]# which innobackupex
/usr/bin/innobackupex
[root@host51 ~]#
[root@host51 ~]# ls /opt/
fullbak new1dir new2dir
[root@host51 ~]#
3 、在 51主机执行恢复数据的操作:
1 停止服务
[root@host51 ~]# systemctl stop mysqld
2 清空数据库目录
[root@host51 ~]# rm -rf /var/lib/mysql/*
[root@host51 ~]# ls /var/lib/mysql
[root@host51 ~]#
3 准备恢复数据
[root@host51 ~]# innobackupex --apply-log --redo-only /opt/fullbak/
[root@host51 ~]# cat /opt/fullbak/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 4878972
last_lsn = 4878981
compact = 0
recover_binlog_info = 0
[root@host51 ~]#
4 合并数据 (合并的顺序要增量备份的顺序一致)
[root@host51 ~]# innobackupex --apply-log --redo-only /opt/fullbak/
--incremental-dir=/opt/new1dir #周二的数据与周一的数据合并
[root@host51 ~]# cat /opt/fullbak/xtrabackup_checkpoints 查看合并信息
backup_type = log-applied
from_lsn = 0
to_lsn = 4886179
last_lsn = 4886188
compact = 0
recover_binlog_info = 0
[root@host51 ~]#
[root@host51 ~]# innobackupex --apply-log --redo-only /opt/fullbak/
--incremental-dir=/opt/new2dir #周三的数据与周一和周二的数据合并
[root@host51 ~]# cat /opt/fullbak/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 4891210
last_lsn = 4891219
compact = 0
recover_binlog_info = 0
[root@host51 ~]#
[root@host51 ~]# cat /opt/new2dir/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 4886179
to_lsn = 4891210
last_lsn = 4891219
compact = 0
recover_binlog_info = 0
[root@host51 ~]#
5 拷贝数据
[root@host51 ~]# innobackupex --copy-back /opt/fullbak/
6 修改所有者和组
7 启动数据库服务
8 查看数据
[root@host51 ~]# chown -R mysql:mysql /var/lib/mysql
[root@host51 ~]# systemctl start mysqld
[root@host51 ~]# mysql -uroot -p123456 -e 'show databases'
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。