mysql数据备份及恢复

备注:

xtrabackup可以在不加锁的情况下备份innodb数据表,不过此工具不能操作myisam。
innobackupex是一个封装了xtrabackup的脚本,能同时处理innodb和myisam,但在处理myisam时需要加一个读锁。

按如上的介绍,由于操作myisam时需要加读锁,这会堵塞线上服务的写操作,而innodb没有这样的限制,所以数据库中innodb表类型所占的比例越大,则越有利。实际应用中一般是直接使用innobackupex。

innobackupex

数据来源主机执行
0. 数据备份:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=“" 新建的备份目录 (如果报错socket 文件未找到 需要指定socket 文件路径 : innobackupex --defaults-file=/etc/my.cnf --user=root --password="” --socket=socket绝对路径 新建的备份目录 )
1. 数据传输到备机192.168.177.6 /data 目录下:
sync -azvP 新建的备份目录 192.168.177.6:/data
数据恢复主机执行
2. 把innobackupex备份文件恢复到从库数据目录;
innobackupex --apply-log /data/新建的备份目录/自动生成的目录/
删除历史数据
rm -fr /data/mysql/*
innobackupex --copy-back /data/新建的备份目录/自动生成的目录/
chown -R mysql:mysql /data/mysql/
3. **在数据目录(即上文 新建的备份目录)**执行如下命令进行来回滚日志;
innobackupex --apply-log .
4. 修改数据目录属主属组;
chmod -R mysql.mysql 数据目录
5. 查看数据目录下的xtrabackup_binlog_info文件
more xtrabackup_binlog_info
6. mysql登录数据库,执行如下命令进行全局id重置
reset master;
set global gtid_purged=‘18529a7e-390d-11ea-a0d2-fa163e19245d:1-15335312,
d19e1d75-ea44-11e9-9a9b-00155d021608:1-9206539,d1cb0a46-ef32-11e9-b419-fa163e19245d:1-72’;

7. start group_replication;

    mysql -uadmin -pshanli@123 -h127.0.0.1 -P6032 --prompt 'Admin> '

根据实际情况选择相应版本的xtrabackup,我的mysql是5.7.24对应的xtrabackup版本为2.4.*

查看xtrabackup版本(支持最低mysql版本)

在这里插入图片描述

xtrabackup

一、 数据备份
01.
xtrabackup --backup --target-dir=/mnt/data/all/ --user=root --password=123456 --socket=/tmp/mysqld.sock
参数释义:
–backup:表示该操作为备份操作

				--target-dir:指定备份文件的路径
				
				--user:备份的用户
				
				--password:该用户的密码
				
				--socket:指定socket启动文件路径

下图表示备份完成(lsn从…37到…46)
在这里插入图片描述
02. 基于全备进行增量备份
xtrabackup --backup --target-dir=/mnt/data/v1/ --incremental-basedir=/mnt/data/all/ --user=root --password=123456 --socket=/tmp/mysqld.sock
–incremental-basedir:表示在某个备份的基础上进行增备
下图表示备份完成
在这里插入图片描述

  1. 在第1次增备的基础上进行增量备份
    xtrabackup --backup --target-dir=/mnt/data/v2/ --incremental-basedir=/mnt/data/v1/ --user=root --password=123456 --socket=/tmp/mysqld.sock

一、 备份数据恢复

注:
在预恢复阶段先不要进行回滚操作,只有在最后一次预恢复才需要进行回滚操作

  1. 预恢复全量备份

xtrabackup --prepare --apply-log-only --target-dir=/mnt/data/all/

参数解释:
–prepare:表示还原,即恢复

--apply-log-only:表示不回滚事务,因为后面有基于全备的增量备份,所以不需要回滚,如果没有则去掉该参数

下图表示预恢复成功在这里插入图片描述
02. 将第一次增备加载至全备中

xtrabackup --prepare --apply-log-only --target-dir=/mnt/data/all/ --incremental-dir=/mnt/data/v1/

下图表示增备加载到全备中成功
在这里插入图片描述
03. 将第二次增备份同样加载至全备中
xtrabackup --prepare --target-dir=/mnt/data/all/ --incremental-dir=/mnt/data/v2/
因为这是最后一次恢复,所以需要回滚,即将未结束的事务回滚,去掉–apply-log-only参数
恢复阶段:可以将全备理解成一个集合,所有的增备都需要汇总到这个集合(全备)里,才能进行完整的恢复操作

三、恢复

1、首先停掉mysql
在这里插入图片描述
2、情况mysql的数据目录
在这里插入图片描述
3、恢复

xtrabackup --copy-back --target-dir=/mnt/data/all/

–copy-back:将备份的数据copy至数据目录下(数据目录请查看my.cnf)

4、恢复后,需要将数据目录下恢复的文件重新赋予权限

chown -R mysql.mysql /data/mysqldata/

5、启动,并查看是否恢复成功

在这里插入图片描述

附:

  1. 单表/单库备份
    单表:xtrabackup --backup --tables=‘jssdb.a’ --target-dir=/mnt/data/2 --user=root --password=123456 --socket=/tmp/mysqld.sock

     --tables:单引号中填写databases.tables
    

单库:trabackup --backup --databases=jssdb --target-dir=/mnt/data/2 --user=root --password=123456 --socket=/tmp/mysqld.sock

--databases:库名(database)
  1. 问题:The innodb_system data file ‘ibdata1’ must be writable
    解决方法: 进入到mysql 对应的datadir 目录下执行:
chown -R mysql:mysql  *

若果仍未解决尝试执行:

chmod -R 0777 *

猜你喜欢

转载自blog.csdn.net/qq_31024251/article/details/107930369