DAB05 数据备份与恢复

数据备份与恢复

一、数据完全备份与恢复(mysqldump)

  • 物理备份
    -冷备:cp、tar、…
  • 逻辑备份
    -mysqldump
    -mysql
    物理备份及恢复
  • 备份操作
    -cp -rp /var/lib/mysql/数据库 /备份目录/文件名
    -tar -zcvf xxx.tar.gz /var/lib/mysql/数据库/*
  • 恢复操作
    -cp -rp /备份目录/文件名 /var/lib/mysql
    -tar -zxvf xxx.tar.gz -C /var/lib/mysql/数据库名

[root@mysql150 ~]# mkdir /dbbak
[root@mysql150 ~]# cp -rp /var/lib/mysql/ /dbbak/mysql.bak
[root@mysql150 ~]# ls /dbbak/
mysql.bak
[root@mysql150 ~]# scp -r /dbbak/mysql.bak/ 192.168.4.51:/root

[root@mysql151 ~]# systemctl stop mysqld
[root@mysql151 ~]# rm -rf /var/lib/mysql
[root@mysql151 ~]# cp -r /root/mysql.bak /var/lib/mysql
[root@mysql151 ~]# chown -R mysql:mysql /var/lib/mysql
[root@mysql151 ~]# systemctl restart mysqld
[root@mysql151 ~]# mysql -u root -p123456
注意:物理不常用。

数据备份策略

  • 完全备份
    -备份所有数据
  • 增量备份
    -备份上次备份后,所有新产生的数据
  • 差异备份
    -备份完全备份后,所有新产生的数据

逻辑备份及恢复

  • 备份操作
    -mysqldump -uroot -p密码 库名 > /路径/xxx.sql
  • 恢复操作
    -mysqldump -uroot -p密码 库名 < /路径/xxx.sql
    DAB05 数据备份与恢复_第1张图片
    ]#mysqldump -uroot -p123456 -A > /dbbak/full.sql
    ]#
    二、数据增量备份与恢复
    1)binlog日志
    2)innobackupex3.1 启动mysql数据库服务的binlog日志文件 实现实时增量备份
    3.1.1 binlog日志介绍:是mysql数据库服务日志文件的一种,默认没有启用。记录除查询之外的sql命令。
    查询命令例如: select show desc
    写命令例如: insert update delete create drop

3.1.2 启用binlog日志

DAB05 数据备份与恢复_第2张图片

]#vim /etc/my.cnf
[mysqld]
server_id=51	//指定的id
log-bin[=目录名=文件名]
binlog-format="mixed" [row、statement] 	//会有两个文件生成
]# 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"
]# systemctl  restart  mysqld
]#ls /mylog/plj.*
xxx.000001   xxx.index

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

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

    ]# systemctl restart mysqld
    mysql> flush logs; //刷新数据日志,每次刷新都会xxx.000001自增+1
    ]# mysql -uroot -p密码 -e “flush logs”
    ]# mysqldump -uroot -p密码 --flush-logs 库名 > 目录/xx.sql //等同于flush logs,每次刷新都会xxx.000001自增+1

3.1.5 删除已有的日志文件
mysql> reset master; //删除所有的日志文件重新生成第一个日志文件
mysql> purge master logs to “日志名”; //删除指定日志文件之前的日志文件

3.1.6 binlog日志记录sql命令方式

  • 记录方式有2种: 偏移量 、记录sql命令执行的时间
    指定偏移量范围选项
    –start-position=偏移量的值
    –stop-position=偏移量的值

  • 指定时间范围选项
    –start-datetime=“yyyy-mm-dd hh:mm:ss”
    –stop-position=“yyyy-mm-dd hh:mm:ss”
    ++++++++++++++++++++++++
    使用binlog恢复日志

  • 读取日志文件指定范围内的sql命令恢复数据。
    ]# mysqlbinlog --start-position=293 --stop-position=1450 plj.000001 | mysql -uroot -p654321


mysql> create database keydb;
mysql> create table keydb.key(id int);
mysql> insert into keydb.key values(122),(123);
mysql> drop database keydb;
]# cd /mylog
]# mysqlbinlog /mylog/fan.00000.1 | grep -i create
]# mysqlbinlog fan.000001
:找到偏移量的起始值和末尾值
]#mysqlbinlog --start-position=316 --stop-position=1032 fan.000001
]#mysqlbinlog fan.000001 | mysql -u root -p123456
mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| db4 |
| gamedb |
| keydb |
| mysql |
| performance_schema |
| press |
| school |
| sys |
| userdb |
±-------------------+
10 rows in set (0.00 sec)

mysql> select * from keydb.key;


]#mysqlbinlog --start-position=偏移量的值
–stop-position=偏移量的值 日志文件名 | mysql -uroot -p654321

innobackupex备份恢复

  • 常用的MySQL备份文件
    -跨平台性差
    -备份时间长、冗余备份、浪费存储空间
  • mysqldump备份缺点
    -效率较低、备份和还原速度慢
    -备份过程中,数据插入和更新操作会被挂起
    需要的软件包:
    libev.x86_64 0:4.15-1.el6.rf percona-xtrabackup-24.x86_64 0:2.4.7-1.el7
    ]# man innobackupex //查看命令的帮助
    innobackupex基本选项
    DAB05 数据备份与恢复_第3张图片
    DAB05 数据备份与恢复_第4张图片
  • 完全备份与恢复
    注意:用inobackupex恢复数据 目录要为空

]# innobackupex --user root --password 123456 /allbak --no-timestamp \不以系统时间完全备份到allbak目录下
恢复
mysql> drop database db5;
]# systemctl stop mysqld
准备恢复数据
]#innobackupex --apply-log /allbak
]# cat xtrabackup_checkpoints
backup_type = full-backuped //只有full-backuped才能拷贝数据
]#innobackupex --copy-back /allbak //把备份文件拷贝到数据库目录下,会报错,因为目录下不为空
报错信息:Failed to connect to MySQL server: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2).
]# rm -rf /var/lib/mysql
]# mkdir /var/lib/mysql
]#innobackupex --copy-pack /allbak //把备份文件拷贝到数据库目录下,再次拷贝就会成功
或者
]#innobackupex -u root -p123456 --copy-back /allbak/ //把备份文件拷贝到数据库目录下
]# chown -R mysql:mysql /var/lib/mysql //修改数据库目录的所有者和组用户为mysql
]#systemctl start mysqld //启动mysql服务
管理员登陆查看数据
]# mysql -u root -p123456
mysql> select * from db5.a;

  • 增量备份与恢复
    -做增量备份时,必须先有一次备份,通常是完全备份。

]# innobackupex --user root --password 123456 /fullbak --no-timestamp \不以系统时间完全备份到fullbak目录下
]# ls /fullbak
]# cat xtrabackup_checkpoints
backup_type = full-backuped
mysql> insert into db5.a values(888);
]# innobackupex --user root --password 123456 --incremental /new1 --incremental-basedir=/fullbak --no-timestamp
]# innobackupex --user root --password 123456 --incremental /new2 --incremental-basedir=/fullbak --no-timestamp
]# ls /new1
backup-my.cnf ibdata1.delta performance_schema xtrabackup_checkpoints
db5 ibdata1.meta sys xtrabackup_info
ib_buffer_pool mysql xtrabackup_binlog_info xtrabackup_logfile
]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 3143557
to_lsn = 3145818
last_lsn = 3145827
compact = 0
recover_binlog_info = 0
]# ls /new2
backup-my.cnf ibdata1.delta performance_schema xtrabackup_checkpoints
db5 ibdata1.meta sys xtrabackup_info
ib_buffer_pool mysql xtrabackup_binlog_info xtrabackup_logfile
]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 3143557
to_lsn = 3145818
last_lsn = 3145827
compact = 0
recover_binlog_info = 0

增量恢复数据
1)准备恢复
mysql> drop database db5;
]# systemctl stop mysqld
]# innobackupex --apply-log --redo-only /fullbak
2)合并日志
]# innobackupex --apply-log --redo-only /fullbak --incremental-dir=/new1
]# innobackupex --apply-log --redo-only /fullbak --incremental-dir=/new2
3)把备份文件拷贝回数据库目录下
]# rm -rf /var/lib/mysql/*
]# innobackupex --copy-back /fullbak
]# rm -rf /new1
]# rm -rf /new2
#日志合并了之后new1、2下的文件就没用了,可以删除
4)修改目录的所有者和组为mysql用户
]# chown -R mysql:mysql /var/lib/mysql
5)启动服务,登陆验证
]# systemctl start mysqld
mysql> select * from db5.a;

恢复某一张表的数据
1)导出表信息
]# innobackupex --user root --password 123456 --apply-log --export /db5bak
]# ls /db5bak/db5
mysql> drop table db5.b; //删除表
2)创建删除的表(要和原来的表结构一样)
mysql> create table db5.b(name char(10));
3)删除表空间
mysql> alter table db5.b discard talespace;
4)把导出的表信息文件拷贝到数据库目录下 并修改所有者所属组为mysql
mysql> system cp /db5bak/db5/b.{cfg,exp,ibd} /var/lib/mysql/db5
mysql> system chown mysql:mysql /var/lib/mysql/db5/b.*
5)导入表信息
mysql> alter table db5.b import tablespace;
mysql> select * from db5.b;
mysql> system rm -rf /var/lib/db5/b.cfg
mysql> system rm -rf /var/lib/db5/b.exp
DAB05 数据备份与恢复_第5张图片DAB05 数据备份与恢复_第6张图片

你可能感兴趣的:(MySQL数据库知识集,MySQL数据备份与恢复)