备份和恢复

笑着哭i 提交于 2019-12-10 11:35:33

                                                                节课   数据备份与恢复

 

一数据备份相关概念

1.1数据备份的目的?数据被误删除或设备损害导致数据丢失,是备份文件恢复数据。

1.2数据备份方式?

物理备份:指定备份库和表对应的文件

51

cp -r /var/lib/mysql/opt/mysql.bak

cp -r /var/lib/mysql/bbsdb/opt/bbsdb.bak

rm -rf /var/lib/mysql/bbsdb

cp -r /opt/bbsdb.bak/var/lib/mysql/bbsdb

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

systemctl  restart mysqld

51 scp /opt/mysql.bak  192.168.4.51:/root/

52 rm -rf /var/lib/mysql

cp -r /root/mysql.bak  /var/lib/mysql

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

systemctl restart mysqld

逻辑备份:在执行备份命令时,根据备份的库表及数据生成对应的sql命令,把sql存储到指定的文件里。

1.3数据备份策略?

完全备份备份所有数据(一张表的所有数据一个库的所有数据一台数据库的所有数据)

备份新产生数据(差异备份和增量备份都备份新产生的数据)

差异备份备份自完全备份后,所有新产生的数据。

增量备份备份自上次备份后,所有新产生的数据。

1.4工作中如何对数据做备份?

1.4.1选择备份策略:

完全备份+差异备份

完全备份+增量备份

1.4.2数据备份时间数据服务器访问量少的时候执行备份

1.4.3数据备份频率根据数据产生量,决定备份频率

1.4.4备份文件的命名库名-日期.sql

1.4.5备份文件的存储设置准备独立的存储设备存储备份文件

1.4.6如何执行备份使用周期性计划任务执行本机脚本

1.5完全备份+差异备份

06:00 t1 文件名数据

1完全10 1.sql 10

2差异3 2.sql 3

3 5 3.sql 8

4 2 4.sql 10

5 7 5.sql 17

6 4 6.sql 21

7差异1 7.sql 22

完全备份+增量备份

06:00 t1 文件名数据

1完全10 1.sql 10

2增量3 2.sql 3

3 5 3.sql 5

4 2 4.sql 2

5 7 5.sql 7

6 4 6.sql 4

7增量1 7.sql 1

+++++++++++++++++++++++++++++


 

 .完全备份与完全恢复

2.1完全备份数据

]#mkdir -p /mydatabak

]#mysqldump -uroot -p654321 studb > /mydatabak/studb.sql

]#mysqldump -uroot -p654321 db3 user3 > /mydatabak/db3-user3.sql

]#cat /mydatabak/studb.sql

]#cat /mydatabak/db3-user3.sql

2.3完全恢复数据

]#mysql -uroot -p654321 studb < /mydatabak/studb.sql

]#mysql -uroot -p654321 db3 < /mydatabak/db3-user3.sql

2.4使用source命令恢复数据

mysql>create database bbsdb;

mysql>use bbsdb;

mysql>source /mydatabak/studb.sql

每周一晚上18:00备份studb库的所有数据到本机的/dbbak目录下,备份文件名称要求如下日期_库名.sql

]#vim /root/bakstudb.sh

#!/bin/bash

day=`date+%F`

if[!-e/dbbak];then

mkdir/dbbak

fi

Mysqldump -uroot -p654321 studb > /dbbak/${day}_studb.sql

:wq

]#chmod +x /root/bakstudb.sh

]#/root/bakstudb.sh

]#ls /dbbak/*.sql

]#crontab -e

00 18**1/root/bakstudb.sh &> /dev/null

:wq

3.1启动mysql数据库服务的binlog日志文件实现实时增量备份

3.1.1 binlog日志介绍:是mysql数据库服务日志文件的一种,默认没有启用。记录除查询之外的sql命令。

查询命令例如:select show desc

写命令例如:insert update delete create drop

3.1.2启用binlog日志

]#vim /etc/my.cnf

[mysqld]

server_id=51

log-bin

binlog-format="mixed"

:wq

]#systemctl restart mysqld

]#ls /var/lib/mysql/主机名-bin.000001

]#cat /var/lib/mysql/主机名-bin.index

3.1.3查看binlog日志文件内容

]#mysqlbinlog  /var/lib/mysql/mysql51-bin.000001

****可以自定义binlog日志文件存储的位置和文件名称

]#mkdir  /mylog

]#chown mysql/mylog

]#setenforce 0

]#vim /etc/my.cnf

[mysqld]

server_id=51

#log-bin

log-bin=/mylog/plj

binlog-format="mixed"

:wq

]#systemctl restart mysqld

]#ls /mylog/plj.*

plj.000001 plj.index

3.1.4手动生成新的日志文件方法

*默认日志文件大于500M时自动创建新日志文件

]#systemctl restart mysqld

mysql>flush logs;

]#mysql -uroot -p密码-e "flush logs" //外部刷新

]#mysqldump -uroot -p密码 --flush-logs库名 > 目录/xx.sql

3.1.5使用一个新的日志文件记录新创建的webdb库的初始操作。

mysql>flush logs;

mysql>create database webdb;create table webdb.a(id int);

mysql>insert into webdb.a values(100);

mysql>insert into webdb.a values(101);

mysql>flush logs;

删除webdb库,使用binlog日志文件恢复webdb库的数据。

mysql>drop database webdb;

3.1.6使用binlog日志恢复数据

]#mysqlbinlog  /mylog/plj.000008 | mysql -uroot -p654321

3.1.7删除已有的binlog日志文件

mysql>purge master logs to "binlog文件名;

删除指定日志文件之前的日志文件

mysql>purge master logs to "plj.000005";

mysql>reset master ;删除所有的日志文件重新生成第一个日志文件

mysql>show master status;显示当前正在使用的binlog日志信息

]#mysqlbinlog日志文件名;

3.1.8 binlog日志记录sql命令方式

记录方式有2种:偏移量、记录sql命令执行的时间

3.1.9指定偏移量范围选项

--start-position=偏移量的值

--stop-position=偏移量的值

3.1.10指定时间范围选项

--start-datetime="yyyy-mm-dd hh:mm:ss"

--stop-position="yyyy-mm-dd hh:mm:ss"

++++++++++++++++++++++++

3.1.11读取日志文件指定范围内的sql命令恢复数据。

]#mysqlbinlog  --start-position=293 --stop-position=1450 plj.000001 | mysql-uroot-p654321

++++++++++++++++++++++++++++

]#mysqldump -uroot -p654321 --flush-logs db3.user3  > /root/user3.sql

mysql>insert into db3.user3 values("a","b","c");

mysql>insert into db3.user3 values("aa","b","c");

mysql>insert into db3.user3 values("ab","b","c");

mysql>insert into db3.user3 values("ac","b","c");

mysql>delete from db3.users;

mysql>select*from db3.user3;

]#mysql -uroot -p654321 db3 < /root/user3.sql

mysql>select *  from db3.user3;

]#mysqlbinlog  --start-position=偏移量的值

 --stop-position=偏移量的值日志文件名 |  

                 mysql-uroot-p654321

mysql>select * from db3.user3;

+++++++++++++++++++++++++++++++++


 

3.2安装第3方软件提供备份命令,对数据做增量备份

软件介绍Percona开源软件在线热备不锁表适用于生成环境。

 

1安装软件

]#rpm-ivh libev-4.15-1.el6.rf.x86_64.rpm

]#yum-y install perl-DBD-mysql perl-Digest-MD5

]#rpm-ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

]#rpm-ql percona-xtrabackup-24

 

2提供2个备份命令

/usr/bin/innobackupex命令集成了命令xtrabackup,所以可以支持MYISAM存储引擎

/usr/bin/xtrabackup命令仅支持InnoDBXtraDB存储引擎的表

innobackupex备份命令的使用格式?

]#innobackupex<选项>

]#man innobackupex

3常用选项?

--user用户名

--password密码

--databases="库名"

"库名1库名2"

"库名.表名"

--no-timestamp不使用时间戳做备份文件的子目录名

+++++++++++++++innobackupex完全备份与完全恢复

]#innobackupex--user root--password 654321 \

        --databases="mysql performance_schema sys   gamedb"/allbak  --no-timestamp

++++++++++++++完全恢复

--copy-back

]#rm -rf /var/lib/mysql

]#mkdir /var/lib/mysql

]#innobackupex --user root --password 654321 --copy-back  /allbak

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

]#systemctl restart mysqld

]#mysql -uroot -p654321

mysql>show databases;

mysql>select *  from gmaedb.t1;

+++++++++++++++++++++++++++++++++++++++++++


 

3.3事务日志文件

LSN日志序列号

1增量备份的工作过程?

每一个备份目录下,都有记录当前目录备份信息的配置文件

]#cat备份目录名/xtrabackup_checkpoints(记录备份类型和lsn范围)

  • innobackupex增量备份与恢复

--incremental目录名#增量备份

--incremental-basedir=目录名#增量备份时,指定上一次备份文件存储的目录名

2先要有一次完全备份存放目录/fullbak

]#innobackupex--user root--password 654321\

--databases="gamedb mysql performance_schema sys"\

/fullbak --no-timestamp

3插入新记录,执行增量备份存放目录/new1bak

  • mysql>insert into gamedb.t1 values(8080),(8080);

]#innobackupex --user root --password 654321\

--databases="gamedb mysql performance_schema sys"\

--incremental /new1dir --incremental-basedir=/fullbak --no-timestamp

4插入新记录,执行增量备份存放目录/new2bak

mysql>insert into gamedb.t1 values(8099),(8099);

]#innobackupex --user root --password 654321\

--databases="gamedb mysql performance_schema sys"\

--incremental/new2dir --incremental-basedir=/new1dir --no-timestamp

增量恢复

--apply-log准备恢复数据

--redo-only合并日志

--incremental-dir=目录名#增量恢复数据时,指定备份目录名称

--copy-back恢复数据

5清空数据库目录

]#rm -rf  /var/lib/mysql

]#mkdir /var/lib/mysql

6准备恢复数据

]#innobackupex  --user root --password 654321 \

--databases="gamedb mysql performance_schema sys" \

--apply-log  --redo-only  /fullbak

7合并日志

]#innobackupex --user root--password 654321 \

--databases="gamedb mysql performance_schema sys "\

--apply-log --redo-only/fullbak --incremental-dir=/new1dir

]#innobackupex --user root --password 654321 \

--databases="gamedb mysql performance_schema sys" \

--apply-log --redo-only/fullbak --incremental-dir=/new2dir

8拷贝备份文件到数据库目录

]#innobackupex --user root --password 654321 \

--databases="gamedb mysql performance_schema sys" \

--copy-back  /fullbak

]#ls /var/lib/mysql -l

9修改文件的所有者/mysql

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

10重启数据库服务

]#systemctl restart mysqld

]#mysql -uroot -p654321

使用完全备份文件恢复单个表

--export导出表信息

mysql>alter table.discard tablespace;删除表空间

mysql>alter table.import tablespace;导入表空间

1完全备份

]#innobackupex --user root --password 654321\

--databases="studb" /allbakstudb  --no-timestamp

2查看备份目录文件列表

]#ls /allbakstudb

]#ls /allbakstudb/studb

3误删除a:mysql>drop table studb.a;

4使用完全备份文件恢复单个表

按照备份时的表结构创建删除的表

create table studb.a(name char(10));

4.2删除创建表的表空间文件

mysql>alter table studb.a discard tablespace;

4.3使用备份文件导出表信息

]#innobackupex --user root --password 654321\

--databases="studb" --apply-log --export /allbakstudb

4.4把导出的表信息文件,拷贝到对应的数据库目录下,并修改所有者和组为mysql

]#cp /allbakstudb/studb/a.{cfg,exp,ibd} /var/lib/mysql/studb/

]#chown mysql:mysql /var/lib/mysql/studb/a.*

4.5导入表空间

mysql>alter table studb.a import tablespace;

[root@mysql51~]#rm -rf /var/lib/mysql/studb/a.cfg

[root@mysql51~]#rm -rf /var/lib/mysql/studb/a.exp

4.6查看记录

mysql>select*from studb.a;


                                                                       节课    总结

 

内容总结

3.1启动mysql数据库服务的binlog日志文件实现实时增量备份

3.1.1 binlog日志介绍

3.1.2启用binlog日志

3.1.3查看binlog日志文件内容

3.1.4手动生成新的日志文件方法

3.1.5删除已有的binlog日志文件

3.1.6 binlog日志记录sql命令方式

3.2使用binlog日志恢复数据

命令格式

]#mysqlbinlog日志文件名|mysql-uroot-p密码

]#mysqlbinlog[选项]日志文件名|mysql-uroot-p密码

指定偏移量范围选项

指定时间范围选项

3.3安装第3方软件提供备份命令,对数据做增量备份

软件介绍

安装软件

备份命令的使用格式

完全备份与恢复

增量备份与恢复

增量备份的工作过程

恢复完全备份中的当表

数据备份

*************************************************************************

3.4增量备份与增量恢复

[root@host50~]#vim /root/databasea.sh

#!/bin/bash

day=`date+%F`

Mysqldump -uroot -p123456 -A > /databak/$day.sql

[root@host50~]#crontab -e

*/n****/root/databasea.sh& > /dev/null

1)输出

[root@host50~]#mysql -uroot -p123456 < /databak/$day.sql

************************************************************************

3.5增量备份

****可以自定义binlog日志文件存储的位置和文件名称

]#mkdir /mylog

]#chown mysql/mylog

]#setenforce 0

]#vim /etc/my.cnf

[mysqld]

server_id=51

#log-bin

log-bin=/mylog/plj

binlog-format="mixed"

:wq

]#systemctl restart mysqld

]#ls /mylog/plj.*

plj.000001 plj.index

1)改表数据

mysql>insert into学生表1 values("王者","北京");

2)查询

[root@host50 mysql]#mysqlbinlog /mylog/plj.000001 | grep insert

      insert into学生表1 values("王者","北京")

[root@host50 mysql]#mysqlbinlog  /mylog/plj.000001 | grep use

**********************************************************************

3.6恢复:全部数据

[root@host50 mysql]#mysql -uroot -p123456 < /databak/all.sql

恢复:更新数据

mysql>delete from学生表2;

[root@host50 mysql]#mysqlbinlog  /mylog/plj.000001

#at 833729

#180529 16:15:56 server id 50 end_log_pos 833837 CRC32 0xaff31d8b   Query thread_id=20 exec_time=0 error_code=0

SET TIMESTAMP=1527581756/*!*/;

delete from学生表2

/*!*/;

[root@host50mysql]#mysqlbinlog  --start-position=833729  --stop-position=833837 /mylog/plj.000001 | mysql -uroot -p123456

**********************************************************************

3.7增量备份恢复最新数据

[root@host50~]#ls /mylog/plj.*

plj.000001 plj.index

mysql>create database webdb;create table webdb.a(id int);

mysql>insert into webdb.a values(100);

mysql>insert into webdb.a values(101);

mysql>flush logs;

[root@host50~]#ls  /mylog/plj.*

plj.000001 plj.000002 plj.index

[root@host50~]#mysqlbinlog /mylog/plj.000002 | mysql -uroot -p123456

***********************************************************************

在线热备份工具

–备份过程中不锁库表,适合生产环境

–由专业组织Percona提供(改进MySQL分支)

•主要含两个组件

xtrabackup:C程序,支持InnoDB/XtraDB

innobackupex:Perl脚本封装xtrabackup,还支持MyISAM

•物理备份缺点

–跨平台性差

–备份时间长、冗余备份、浪费存储空间

mysqldump备份缺点

–效率较低,备份和还原速度慢

–备份过程中,数据插入和更新操作会被挂起增量备份的工作过程?

1)安装软件包

[root@host50~]#yum-y install libev-4.15-1.el6.rf.x86_64.rpm

[root@host50~]#yum -y install    percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

•每一个备份目录下,都有记录当前目录备份信息的配置文件

]#cat备份目录名/xtrabackup_checkpoints(记录备份类型和lsn范围)

1.innobackupex完全备份与完全恢复

[root@host50new1dir]#innobackupex --user root --password 123456  --databases="mysql performance_schema sys user" /fullbak --no-timestamp

完全恢复

--copy-back

]#rm -rf /var/lib/mysql

]#mkdir /var/lib/mysql

1)合并日志

[root@host50new1dir]#innobackupex --user root --password 123456  --databases="mysql performance_schema sys user" --apply-log /fullbak

2)恢复数据

]#innobackupex --user root --password 654321 --copy-back /allbak

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

]#systemctl restart mysqld

]#mysql -uroot -p654321

mysql>show databases;

mysql>select * from gmaedb.t1;

********************************************************************

2》.插入新记录,执行增量备份存放目录/new1bak

innobackupex增量备份与恢复

--incremental目录名#增量备份

--incremental-basedir=目录名#增量备份时,指定上一次备份文件存储的目录名

[root@host50new1dir]#innobackupex --user root --password 123456  --databases="mysql performance_schema sys user"  --incremental/new2dir --incremental-basedir=/new1dir --no-timestamp

增量恢复

--apply-log准备恢复数据

--redo-only合并日志

--incremental-dir=目录名#增量恢复数据时,指定备份目录名称

--copy-back恢复数据

1)删除数据

]#rm-rf/var/lib/mysq

2)准备恢复数据

[root@host50 new1dir]#innobackupex --user root --password 123456  --databases="mysql performance_schema sysuser"  --apply-log --redo-only /fullbak

2)合并日志

[root@host50 new1dir]#innobackupex --user root --password 123456 --databases="mysql performance_schema sys user" --apply-log   --redo-only/fullbak  --incremental-dir=/new1dir

3)恢复数据

[root@host50 new1dir]#innobackupex --user root --password 123456 --databases="mysql performance_schema sys user" --copy-back /fullbak

[root@host50 new1dir]#ls /var/lib/mysql-l

[root@host50 new1dir]#chown -R mysql:mysql /var/lib/mysql

[root@host50 new1dir]#systemctl restart mysqld

[root@host50]#rm -rf /new1dir

--export导出表信息

使用完全备份文件恢复单个表

mysql>alter table库.表discard tablespace;删除表空间

mysql>alter table库.表import tablespace;导入表空间

1完全备份

]#innobackupex --user root --password 654321\

--databases="studb" /allbakstudb --no-timestamp

2查看备份目录文件列表

]#ls /allbakstudb

]#ls /allbakstudb/studb

3误删除a表:mysql>drop table studb.a;

4使用完全备份文件恢复单个表

4.1按照备份时的表结构创建删除的表

create table studb.a(name char(10));

4.2删除创建表的表空间文件

mysql>alter table studb.a discard tablespace;

4.3使用备份文件导出表信息

]#innobackupex --user root --password 654321\

--databases="studb" --apply-log --export /allbakstudb

4.4把导出的表信息文件,拷贝到对应的数据库目录下,并修改所有者和组为mysql

]#cp /allbakstudb/studb/a.{cfg,exp,ibd} /var/lib/mysql/studb/

]#chown mysql:mysql /var/lib/mysql/studb/a.*

4.5导入表空间

mysql>alter table studb.a import tablespace;

[root@mysql51~]#rm -rf /var/lib/mysql/studb/a.cfg

[root@mysql51~]#rm -rf /var/lib/mysql/studb/a.exp

4.6查看记录

mysql>select * from studb.a;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!