第五节课 数据备份与恢复
一数据备份相关概念
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命令仅支持InnoDB和XtraDB存储引擎的表
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
u 增量恢复
--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
u 使用完全备份文件恢复单个表
--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
u 完全恢复
--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
u innobackupex增量备份与恢复
--incremental目录名#增量备份
--incremental-basedir=目录名#增量备份时,指定上一次备份文件存储的目录名
[root@host50new1dir]#innobackupex --user root --password 123456 --databases="mysql performance_schema sys user" --incremental/new2dir --incremental-basedir=/new1dir --no-timestamp
u 增量恢复
--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导出表信息
u 使用完全备份文件恢复单个表
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;
来源:https://www.cnblogs.com/qingbai/p/12015149.html