安装
yum安装
安装需要对应mysql版本
sudo yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo percona-release enable-only tools release
sudo yum install -y percona-xtrabackup-80
全量备份及恢复
1、备份
xtrabackup --backup --target-dir=/data/xbackups/ --user=root --password=youpwd
2、准备文件(可在任意服务器进行)
xtrabackup --prepare --target-dir=/data/xbackups/
3、恢复数据
先停mysql服务,清空data目录
service mysqld stop
mv /var/lib/mysql/data /var/lib/mysql/data-b20240224
恢复数据
xtrabackup --copy-back --target-dir=/data/xbackups/
或者(恢复完成会将原来的准备数据清除)
xtrabackup --move-back --target-dir=/data/xbackups/
data目录重新赋予权限,启动mysql
chown -R mysql:mysql /var/lib/mysql/data
service mysqld start
service mysqld status
增量备份
1、先创建一次全量备份,xtrabackup 会写一个xtrabackup_checkpoints
文件进目标目录,包含数数据的位置信息
xtrabackup --backup --target-dir=/data/backups/base
2、基于全量备份,做一次增量备份
xtrabackup --backup --target-dir=/data/backups/inc1 \
--incremental-basedir=/data/backups/base
3、基于上一次增量数据再做一次备份
xtrabackup --backup --target-dir=/data/backups/inc2 \
--incremental-basedir=/data/backups/inc1
4、准备恢复数据(恢复全量,将增量数据恢复到target目录)
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc1
xtrabackup --prepare --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc2
5、恢复数据,步骤和全量恢复数据一样
备份指定数据库、表
数据库备份脚本
常用参数
--user= #指定数据库备份用户
--password= #指定数据库备份用户密码
--port= #指定数据库端口
--host= #指定备份主机
--socket= #指定socket文件路径
--databases= #备份指定数据库,多个空格隔开,如--databases="dbname1 dbname2",不加备份所有库
--defaults-file= #指定my.cnf配置文件
--apply-log #日志回滚
--incremental= #增量备份,后跟增量备份路径
--incremental-basedir= #增量备份,指上次增量备份路径
--redo-only #合并全备和增量备份数据文件
--copy-back #将备份数据复制到数据库,数据库目录要为空
--no-timestamp #生成备份文件不以时间戳为目录名
--stream= #指定流的格式做备份,--stream=tar,将备份文件归档
--remote-host=user@ip DST_DIR #备份到远程主机
报错
备份时报错:
[Xtrabackup] failed to execute query ‘LOCK INSTANCE FOR BACKUP’ : 1227 (42000) Access denied; you need (at least one of) the BACKUP_ADMIN privilege(s) for this operation
权限问题,需要为mysql用户添加权限
grant BACKUP_ADMIN on *.* to 'root'@'%';
flush privileges;