做房地产网站,学校网站首页制作,常州网站搜索优化,网页源代码快捷键目录 一、物理备份的方式二、xtrabackup物理备份1.安装xtrabackup2.完整备份/恢复流程3.增量备份流程4.差异备份流程5.物理备份总结 一、物理备份的方式
1.完整备份 每次对数据进行完整的备份#xff0c;即对整个数据库的备份、数据库结构和文件结构的备份#xff0c;保存的… 目录 一、物理备份的方式二、xtrabackup物理备份1.安装xtrabackup2.完整备份/恢复流程3.增量备份流程4.差异备份流程5.物理备份总结 一、物理备份的方式
1.完整备份 每次对数据进行完整的备份即对整个数据库的备份、数据库结构和文件结构的备份保存的是备份完成时刻的数据库是差异备份与增量备份的基础。 优点备份与恢复操作简单方便恢复时一次恢复到位恢复速度快 缺点占用空间大备份速度慢 2.增量备份 每次备份上一次备份到现在产生的新数据每次都是跟上一次的备份数据作对比 只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次的增量备份的时间为时间点仅备份这之间的数据变化。 特点因而备份的数据量小占用空间小备份速度快。但恢复时需要从上一次的完整备份起按备份时间顺序逐个备份版本进行恢复恢复时间长如中间某次的备份数据损坏将导致数据的丢失。 假设我们在第一天进行一次完全备份。第二天增量备份时只会备份第二天和第一天之间的变化数据第三天增量备份时只会备份第三天和第二天之间的变化数据以此类推。 增量备份的优势是每次备份需要备份的数据较少耗时较短占用的空间较小。 劣势是数据恢复比较麻烦进行数据恢复时就要先恢复完全备份的数据再依次恢复第一次增量备份的数据、第二次增量备份的数据和第三次增量备份的数据最终才能恢复所有的数据。 3.差异备份 只备份跟完整备份不一样的数据每次都是跟完整备份作对比 备份那些自从第一次完全备份之后被修改过的所有文件备份的时间起点是从第一次完整备份起且以后每次备份都是和第一次完整备份进行比较注意是【第一次】不是上一次备份自第一次完整备份以来所有的修改过的文件。备份数据量会越来越大。 特点占用空间比增量备份大比完整备份小恢复时仅需要恢复第一个完整版本和最后一次的差异版本恢复速度介于完整备份和增量备份之间。 假设我们在第一天进行一次完全备份。第二天差异备份时会备份第二天和第一天之间的变化数据第三天进行差异备份时仍和第一天的原始数据进行对比把第二天和第三天所有的变化数据都备份在第二次差异备份中以此类推。 差异备份既不像完全备份一样把所有数据都进行备份也不像增量备份在进行数据恢复时那么麻烦只要先恢复完全备份的数据再恢复差异备份的数据即可。 不过随着时间的增加和完全备份相比变动的数据越来越多那么差异备份也可能会变得数据量庞大、备份速度缓慢、占用空间较大。 总结 简单的讲完整备份就是不管三七二十一每次都把指定的备份目录完整的复制一遍不管目录下的文件有没有变化 增量备份就是每次将之前第一次、第二次、直到前一次做过备份之后有变化的文件进行备份 差异备份就是每次都将第一次完整备份以来有变化的文件进行备份。 二、xtrabackup物理备份 Xtrabackup是开源免费的支持MySQL 数据库热备份的软件在 Xtrabackup 包中主要有 Xtrabackup 和 innobackupex 两个工具。 其中 Xtrabackup 只能备份 InnoDB 和 XtraDB 两种引擎 innobackupex则是封装了Xtrabackup同时增加了备份MyISAM引擎的功能。 官网https://www.percona.com 下载地址https://www.percona.com/downloads 下载地址https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm 1.安装xtrabackup
//安装xtrabackup
//5.7版本https://www.percona.com/downloads/Percona-XtraBackup-2.4/
[rootlocalhost ~]# wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm
[rootlocalhost ~]# yum install percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm -y//查看安装情况
[rootlocalhost ~]# rpm -qa | grep xtrabackup
percona-xtrabackup-24-2.4.26-1.el7.x86_64//查看版本
[rootlocalhost ~]# xtrabackup --version
xtrabackup version 2.4.26 based on MySQL server 5.7.35 Linux (x86_64) (revision id: 19de43b)//注意my.cnf需要确认配置文件内有数据目录的指定
[rootlocalhost ~]# cat /etc/my.cnf
[mysqld]
datadir /usr/local/mysql/data2.完整备份/恢复流程
完整备份 语法innobackupex --userroot --password口令 /备份目录
//创建备份目录
[rootlocalhost ~]# mkdir /xtrabackup/full -p//创建数据库、数据表并插入数据
mysql create database company;
mysql use company;
//创建一个测试表
mysql \eCREATE TABLE company.employee5(id int primary key AUTO_INCREMENT not null,name varchar(30) not null,sex enum(male,female) default male not null,hire_date date not null,post varchar(50) not null,job_description varchar(100),office int,dep_id int)
- ;
Query OK, 0 rows affected (0.01 sec)
//插入数据
mysql \einsert into company.employee5(name,sex,hire_date,post,job_description,office,dep_id) values (jack,male,20180202,instructor,teach,501,100),(harry,male,20180202,hr,NULL,502,101),(lili,female,20180206,sale,salecc,503,102),(xiaoguo,male,20180205,sale,,503,102)- ;
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0//备份
[rootlocalhost ~]# innobackupex --userroot --passwordJiannLt123 /xtrabackup/full
[rootlocalhost ~]# cd /xtrabackup/full/
[rootlocalhost full]# ls
2022-06-08_10-03-34
[rootlocalhost full]# du -sh *
26M 2022-06-08_10-03-34完整备份的恢复 1.停止数据库 2.清理环境 3.重演回滚 恢复数据 4.修改权限 5.启动数据库 重演binlog语法innobackupex --apply-log /备份目录/完整备份目录(年月日时分秒) 恢复数据语法innobackupex --copy-back /备份目录/完整备份目录(年月日时分秒) //为了实验效果首先将数据库给删掉看看数据是否能恢复成功
[rootlocalhost ~]# mysql -uroot -pJiannLt123
mysql drop database company;
Query OK, 1 row affected (0.00 sec)1、关闭数据库
[rootlocalhost ~]# systemctl stop mysqld
//注意数据库目录必须为空MySQL服务不能启动
[rootlocalhost ~]# rm -rf /usr/local/mysql/data/ *2、重演回滚
[rootlocalhost ~]# innobackupex --apply-log /xtrabackup/full/2019-08-20_11-47-49
……
InnoDB: Shutdown completed; log sequence number 2772008
230706 10:19:29 completed OK!3、确认数据库目录
//恢复之前需要确认配置文件内有数据库目录指定不然xtrabackup不知道恢复到哪里
[rootlocalhost ~]# cat /etc/my.cnf
[mysqld]
datadir /usr/local/mysql/data4、恢复数据
[rootlocalhost ~]# innobackupex --copy-back /xtrabackup/full/2019-08-20_11-47-49
………………
230706 10:22:02 [01] Copying ./ibtmp1 to /usr/local/mysql/data/ibtmp1
230706 10:22:02 [01] ...done
230706 10:22:02 completed OK!5、修改权限
[rootlocalhost ~]# chown -R mysql:mysql /usr/local/mysql///启动数据库
[rootlocalhost ~]# systemctl start mysqld
[rootlocalhost ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::3306 :::* LISTEN 3687/mysqld
[rootlocalhost ~]# cd /usr/local/mysql/data/ //看一下data目录下是否有文件就能看出是否恢复成功了
[rootlocalhost data]# ls
auto.cnf client-cert.pem ibdata1 mysql private_key.pem sys
binary-mysql.pid client-key.pem ib_logfile0 mysql.sock public_key.pem xtrabackup_binlog_pos_innodb
ca-key.pem company ib_logfile1 mysql.sock.lock server-cert.pem xtrabackup_info
ca.pem ib_buffer_pool ibtmp1 performance_schema server-key.pem xtrabackup_master_key_id//登录数据库查看数据
[rootlocalhost data]# mysql -uroot -pJiannLt123
mysql select id,name from company.employee5;
-------------
| id | name |
-------------
| 1 | jack |
| 2 | harry |
| 3 | lili |
| 4 | xiaoguo |
-------------
4 rows in set (0.00 sec)3.增量备份流程
原理每次备份上一次备份到现在产生的新数据 在数据库上面创建一个测试的库和表并往里面写入数据
mysql create database testdb;
Query OK, 1 row affected (0.01 sec)mysql create table testdb.t1(id int);
Query OK, 0 rows affected (0.01 sec)mysql insert into testdb.t1 values(1);
Query OK, 1 row affected (0.01 sec)mysql select * from testdb.t1;
------
| id |
------
| 1 |
------
1 row in set (0.00 sec)增量备份流程重要) 1、进行完整备份 完整备份语法innobackupex --userroot --password口令 /备份目录/increment/ 2、添加数据以后增量备份 增量备份语法innobackupex --userroot --password口令 --incremental /备份目录/increment/ --incremental-basedir/xtrabackup/increment/上一备份目录(基于前一天) –incremental 后面跟的是本次备份文件的存放路径 –incremental-basedir 后面跟的是基于哪次备份做数据备份接的是上一次备份成功的目录 1.完整备份周一
[rootlocalhost ~]# rm -rf /xtrabackup/ *
[rootlocalhost ~]# mkdir /xtrabackup/increment//完整备份
[rootlocalhost ~]# innobackupex --userroot --passwordJiannLt123 /xtrabackup/increment
[rootlocalhost ~]# cd /xtrabackup/increment
[rootlocalhost increment]# ls
2019-08-20_14-51-35
[rootlocalhost increment]# cd 2019-08-20_14-51-35/
[rootlocalhost 2019-08-20_14-51-35]# ls
backup-my.cnf ib_buffer_pool mysql sys testdb xtrabackup_info
company ibdata1 performance_schema test xtrabackup_checkpoints xtrabackup_logfile2.增量备份周二~周三
//模拟周二的生产数据
mysql -uroot -pJiannLt123 -e insert into testdb.t1 values(2);
//查询数据
mysql -uroot -pJiannLt123 -e select * from testdb.t1;
------
| id |
------
| 1 |
| 2 |
------
//周二增量备份
[rootlocalhost ~]# innobackupex --userroot --passwordJiannLt123 --incremental /xtrabackup/increment/ --incremental-basedir/xtrabackup/increment/2019-08-20_14-51-35/
//--incremental-basedir基于哪个增量
[rootlocalhost ~]# cd /xtrabackup/increment/
[rootlocalhost increment ]# ls
2019-08-20_14-51-35 2019-08-20_15-04-29 //相当于周二的增量备份//模拟周三的生产数据
mysql -uroot -pJiannLt123 -e insert into testdb.t1 values(3);
//查询数据
mysql -uroot -pJiannLt123 -e select * from testdb.t1;
------
| id |
------
| 1 |
| 2 |
| 3 |
------
//周三增量备份
[rootlocalhost ~]# innobackupex --userroot --passwordJiannLt123 --incremental /xtrabackup/increment --incremental-basedir/xtrabackup/increment/2019-08-20_15-04-29/ //基于前一天的备份为目录
//查看一下备份目录:
[rootlocalhost ~]# ls /xtrabackup/increment/
2019-08-20_14-51-35 2019-08-20_15-04-29 2019-08-20_15-10-56全备周一 增量周二 增量周三
//后面周四到周日都是这种方式来增量备份 增量备份恢复流程(重要) 1.停止数据库 2.清理环境 3.依次重演回滚redo log 恢复数据 4.修改权限 5.启动数据库 重演回滚语法 innobackupex --apply-log --redo-only /xtrabackup/increment/全量目录innobackupex --apply-log --redo-only /xtrabackup/increment/全量目录 --incremental-dir/xtrabackup/increment/增量1目录innobackupex --apply-log --redo-only /xtrabackup/全量目录 --incremental-dir/xtrabackup/increment/增量2目录 –apply-log --redo-only参数的作用是 仅应用指定的增量备份redo log到全量备份上不做数据恢复。 通俗地说就相当于将增量备份的修改应用到全量备份上产生一个新的全量备份。 恢复数据语法innobackupex --copy-back /xtrabackup/increment/全量目录 //为了实验效果先将testdb库给删掉
[rootlocalhost increment]# mysql -uroot -pJiannLt123 -e drop database testdb;
[rootlocalhost increment]# mysql -uroot -pJiannLt123 -e show databases;
--------------------
| Database |
--------------------
| information_schema |
| company |
| mysql |
| performance_schema |
| sys |
--------------------
//停止服务并清理数据目录
[rootlocalhost ~]# systemctl stop mysqld
[rootlocalhost ~]# rm -rf /usr/local/mysql/data/ *//依次重演回滚redo log
[rootlocalhost ~]# innobackupex --apply-log --redo-only /xtrabackup/increment/2019-08-20_14-51-35 //重演回滚全量备份目录
[rootlocalhost ~]# innobackupex --apply-log --redo-only /xtrabackup/increment/2019-08-20_14-51-35 --incremental-dir/xtrabackup/increment/2019-08-20_15-04-29
// /xtrabackup/2019-08-20_14-51-35全量目录
// /xtrabackup/increment/2019-08-20_15-04-29增量1目录
[rootlocalhost ~]# innobackupex --apply-log --redo-only /xtrabackup/increment/2019-08-20_14-51-35 --incremental-dir/xtrabackup/increment/2019-08-20_15-10-56/
// /xtrabackup/2019-08-20_14-51-35全量目录
// /xtrabackup/increment/2019-08-20_15-10-56增量2目录//恢复数据
[rootlocalhost ~]# innobackupex --copy-back /xtrabackup/increment/2019-08-20_14-51-35/
/xtrabackup/2019-08-20_14-51-35/全量目录//修改权限
[rootlocalhost ~]# chown -R mysql:mysql /usr/local/mysql/
[rootlocalhost ~]# systemctl start mysqld
//执行sql语句看看库和表是否恢复成功
[rootlocalhost ~]# mysql -uroot -pJiannLt123 -e select * from testdb.t1;
------
| id |
------
| 1 |
| 2 |
| 3 |
------4.差异备份流程 差异备份流程重要) 1、完整备份 语法innobackupex --userroot --password口令 /备份目录/ 2、增加数据后进行差异备份 语法innobackupex --userroot --password口令 --incremental /备份目录/ --incremental-basedir/xtrabackup/第一次完全备份目录 //清理备份的环境
[rootlocalhost ~]# rm -rf /xtrabackup/ *
//登陆数据库准备环境
mysql -uroot -pJiannLt123
mysql delete from testdb.t1;
mysql insert into testdb.t1 values(1); //插入数据1模拟周一
mysql select * from testdb.t1;
------
| id |
------
| 1 |
------
mysql \q1.完整备份周一
[rootlocalhost ~]# innobackupex --userroot --passwordJiannLt123 /xtrabackup2.差异备份周二~周三
[rootlocalhost ~]# innobackupex --userroot --password888 --incremental /xtrabackup --incremental-basedir/xtrabackup/2019-08-20_15-42-02/ //完全备份目录周一3.模拟周二插入数据2
[rootlocalhost ~]# mysql -uroot -pJiannLt123 -e insert into testdb.t1 values(2); //插入数据2模拟周二
[rootlocalhost xtrabackup]# mysql -uroot -pJiannLt123 -e select * from testdb.t1;
------
| id |
------
| 1 |
| 2 |
------
//差异备份周二的数据
[rootlocalhost ~]# innobackupex --userroot --passwordJiannLt123 --incremental /xtrabackup --incremental-basedir/xtrabackup/2019-08-20_15-42-02/ //备份目录基于周一的完整备份4.再次插入周三的数据
[rootlocalhost ~]# mysql -uroot -pJiannLt123 -e insert into testdb.t1 values(3); //插入数据3模拟周三
[rootlocalhost xtrabackup]# mysql -uroot -pJiannLt123 -e select * from testdb.t1;
------
| id |
------
| 1 |
| 2 |
| 3 |
------
//再次差异备份
[rootlocalhost ~]# innobackupex --userroot --passwordJiannLt123 --incremental /xtrabackup --incremental-basedir/xtrabackup/2019-08-20_15-42-02/ //还是基于周一的完整备份5.延申到周四的数据
[rootlocalhost ~]# mysql -uroot -pJiannLt123 -e insert into testdb.t1 values(4); //插入数据4模拟周四
[rootlocalhost xtrabackup]# mysql -uroot -pJiannLt123 -e select * from testdb.t1;
------
| id |
------
| 1 |
| 2 |
| 3 |
| 4 |
------
//差异备份周四
[rootlocalhost ~]# innobackupex --userroot --passwordJiannLt123 --incremental /xtrabackup --incremental-basedir/xtrabackup/2019-08-20_15-42-02/ //还是基于周一的备份6.查看一下备份目录
[rootlocalhost ~]# ls /xtrabackup/
2019-08-20_15-42-02 2019-08-21_15-46-53 2019-08-22_15-51-15 2019-08-23_15-53-28周一完整备份 周二差异备份 周三差异备份 周四差异备份差异备份恢复流程(重要) 1.停止数据库 2.清理环境 3.重演回滚redo log周一某次差异 恢复数据 4.修改权限 5.启动数据库 差异恢复重演回滚redo log恢复数据(重要) 1、恢复全量的redo log 语法innobackupex --apply-log --redo-only /xtrabackup/全量目录 2、恢复差异的redo log(任意差异点选择任意差异点恢复那数据也就会恢复到当天的) 语法innobackupex --apply-log --redo-only /xtrabackup/全量目录 --incremental-dir/xtrabackup/某个差异备份目录 3、恢复数据 语法innobackupex --copy-back /xtrabackup/完全备份目录 //为了实验效果将testdb库给删除掉看看通过差异恢复的方式数据能否恢复成功
[rootlocalhost ~]# mysql -uroot -pJiannLt123 -e drop database testdb;
//停止数据库删除数据目录下所有的文件/目录
[rootlocalhost ~]# systemctl stop mysqld
[rootlocalhost ~]# rm -rf /usr/local/mysql/data/ *1.恢复全量的redo log
[rootlocalhost ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_15-42-02/2.恢复差异的redo log
//这里我们恢复周三的差异备份
[rootlocalhost ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_15-42-02/ --incremental-dir/xtrabackup/2019-08-22_15-51-15/3.恢复数据
[rootlocalhost ~]# innobackupex --copy-back /xtrabackup/2019-08-20_15-42-02///修改权限
[rootlocalhost ~]# chown -R mysql:mysql /usr/local/mysql/
[rootlocalhost ~]# systemctl start mysqld
//查看数据是否恢复成功(只有123因为我们恢复的是周三的差异备份。)
[rootlocalhost xtrabackup]# mysql -uroot -pJiannLt123 -e select * from testdb.t1
------
| id |
------
| 1 |
| 2 |
| 3 |
------5.物理备份总结
优先使用完整差异 完整备份 完整备份语法innobackupex --userroot --password口令 /备份目录 完全备份恢复流程 1.停止数据库 2.清理环境 3.重演回滚 恢复数据 4.修改权限 5.启动数据库 重演回滚语法innobackupex --apply-log /备份目录/完整备份目录(年月日时分秒) 恢复数据语法innobackupex --copy-back /备份目录/完整备份目录(年月日时分秒) 增量备份流程 1.进行完整备份 完整备份语法innobackupex --userroot --password口令 /备份目录 2.添加数据以后增量备份 增量备份语法innobackupex --userroot --password口令 --incremental /备份目录/ --incremental-basedir/xtrabackup/上一备份目录 增量恢复流程 1.停止数据库2. 清理环境3. 增量重演回滚redolog恢复数据4. 修改权限5. 启动数据库 增量重演回滚语法 a.innobackupex --apply-log --redo-only /xtrabackup/全量目录 b.innobackupex --apply-log --redo-only /xtrabackup/全量目录 --incremental-dir/xtrabackup/增量1目录 c.innobackupex --apply-log --redo-only /xtrabackup/全量目录 --incremental-dir/xtrabackup/增量2目录 恢复数据innobackupex --copy-back /xtrabackup/全量目录 差异备份流程重要) 1.完整备份 完整备份语法innobackupex --userroot --password口令 /备份目录 2.增加数据后进行差异备份 差异备份语法innobackupex --userroot --password口令 --incremental /备份目录 --incremental-basedir/xtrabackup/第一次完全备份目录 差异恢复流程 1.停止数据库2.清理环境3.差异重演回滚redo log恢复数据4.修改权限5.启动数据库 差异重演回滚语法 a.恢复全量的redo log innobackupex --apply-log --redo-only /xtrabackup/完全备份目录 b.恢复差异的redo log(任意差异点) innobackupex --apply-log --redo-only /xtrabackup/完全备份目录 --incremental-dir/xtrabacku/某个差异备份目录 恢复数据语法innobackupex --copy-back /xtrabackup/完全备份目录