Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上唯一一个开源的能够对innodb和xtradb数据库进行物理热备的工具。
特点:
1)备份过程快速,可靠;
2)备份过程不会打断正在执行的事务(不需要锁表)
3)能够给予压缩等功能节约磁盘空间和流量。
4)自动实现备份检验;
5)还原速度快;
6)可以进行流传出备份,备份到另外一台机器上。
1.安装percona依赖库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
2.查看可安装版本
yum list | grep percona-xtrabackup
#mysql5.6、5.7安装24的
yum install -y percona-xtrabackup-24
mysql8.0安装80的
yum install -y percona-xtrabackup-80
4.查看版本
xtrabackup –version
查看mysql的配置文件my.cnf
指定basedir、datadir、socket的参数设置
#全量备份(在同一个服务器上)
innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --socket=/tmp/mysql.sock --no-timestamp /data/mysql_backup/full
注意:配置文件参数my.cnf必须放在第一位,否则会报错
查看备份,备份路径为/data/mysql_backup/full
#全量备份,指定备份的数据库(在同一个服务器上)
innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --socket=/tmp/mysql.sock --databases='test' --no-timestamp /data/mysql_backup/full
#全量备份,指定备份的数据库表(在同一个服务器上)
innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --socket=/tmp/mysql.sock --tables-file=/tmp/tables.txt --no-timestamp /data/mysql_backup2
#全量备份,指定备份的数据库(压缩备份到另一台服务器上)
innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --socket=/tmp/mysql.sock --databases='test' --stream=tar /data/mysql_backup/full | gzip | ssh [email protected] "cat - >/data/mysql_backup/full.tar.gz"
增量备份:
增量备份是在全量备份的基础上进行的
增量备份目录:/data/backup/inc1
innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --socket=/tmp/mysql.sock --databases='test' --no-timestamp --incremental /data/backup/inc1 --incremental-basedir=/data/mysql_backup/full
注意:
–incremental-basedir 指的是完全备份所在的目录
此命令执行结束后,innobackupex命令会在 /data/backup/inc1目录中创建一个目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其–incremental-basedir应该指向上一次的增量备份所在的目录。 需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。
完全备份目录:/data/mysql_backup/full
1、一般情况下,这个备份不能用于恢复,因为备份的数据中可能含有尚未提交的事务或者已经提交的事务但尚未同步至数据文件的事务,此时数据文件处于不一致的状态。因此,现在先通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
innobackupex --apply-log --export /data/mysql_backup/full
2、关闭数据库,备份原数据,创建新的数据目录,因为原来的datadir目录是/data/mysql
mv /data/mysql /data/mysql_bak
创建新的datadir目录:mkdir -p /data/mysql
3、修改/etc/my.cnf更改datadir目录为/data/mysql
恢复全备必须恢复到空目录里,不然会报错。
4、执行innobackupex恢复命令
innobackupex --defaults-file=/etc/my.cnf --copy-back /data/mysql_backup/full
5、对新datadir目录授权,此操作需要在innobackupex恢复命令后
chown -R mysql:mysql /data/mysql
6、重启服务后,并检查数据是否恢复。
service mysql start
innobackupex --apply-log --redo-only /data/backup/full
innobackupex --apply-log --redo-only /data/backup/full --incremental-dir=/data/backup/inc1
然后重复全量备份的23456步就可以了
Xtrabackup常用参数
常用参数:
--user=USER #指定备份用户,不指定的话为当前系统用户
--password=PASSWD #指定备份用户密码
--port=PORT #指定数据库端口
--defaults-group=GROUP-NAME #在多实例的时候使用
--host=HOST #指定备份的主机,可以为远程数据库服务器
--apply-log #回滚日志
--database #指定需要备份的数据库,多个数据库之间以空格分开
--defaults-file #指定mysql的配置文件
--copy-back #将备份数据复制回原始位置
--incremental #增量备份,后面跟要增量备份的路径
--incremental-basedir=DIRECTORY #增量备份时使用指向上一次的增量备份所在的目录
--incremental-dir=DIRECTORY #增量备份还原的时候用来合并增量备份到全量,用来指定全备路径
--redo-only #对增量备份进行合并
--rsync #加快本地文件传输,适用于non-InnoDB数据库引擎。不与–stream共用
--safe-slave-backup
--no-timestamp #生成的备份文件不以时间戳为目录.
参考:https://blog.csdn.net/woshizhangliang999/article/details/60874576
https://blog.csdn.net/lqx0405/article/details/49470467
https://www.cnblogs.com/timeisaway/p/7094060.html
https://www.cnblogs.com/stacks/p/8092734.html
https://www.cnblogs.com/linuxk/p/9372990.html
# 源主机
## 1、数据文件导出
mysqldump -u root -p111222 student_db > /home/backup/student_db.sql
## 2、远程上传到目标主机/data 的目录
scp -P 2228 /home/backup/student_db.sql [email protected]:/data
# 目标主机
## 1、登录 mysql
mysql -u root -p2233
## 2、创建 student_db 数据库
mysql > create database student_db
## 3、切换 数据库
mysql > use student_db
## 4、导入数据
mysql > source /data/student_db.sql
如果报这个错误,是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下
-bash: mysqldump: command not found
输入命令,找到mysqldump的路径:
find / -name mysqldump -print
建立软连接
ln -s /usr/local/mysql/bin/mysqldump /usr/bin