[root@centos181001 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.25 |
+-----------+
1 row in set (0.00 sec)
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.13/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
yum install -y percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
xtrabackup:一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。
xbcrypt:用来加密或解密备份的数据。
xbstream:用来解压或压缩xbstream格式的压缩文件。
--user=USER 指定备份用户,不指定的话为当前系统用户
--password=PASSWD 指定备份用户密码
--port=PORT 指定数据库端口
--defaults-group=GROUP-NAME 在多实例的时候使用
--host=HOST 指定备份的主机,可以为远程数据库服务器
--apply-log 应用 BACKUP-DIR 中的 xtrabackup_logfile 事务日志文件。
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。
因此,此时数据文件仍处于不一致状态。
“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件使得数据文件处于一致性状态。
--database 指定需要备份的数据库,多个数据库之间以空格分开。
格式为:--database="db1[.tb1] db2[.tb2]" 多个库之间以空格隔开,如果此选项不被指定,将会备份所有的数据库。
--defaults-file 指定mysql的配置文件,只能从给定的文件中读取默认选项。
且必须作为命令行上的第一个选项;必须是一个真实的文件,它不能是一个符号链接。
--copy-back 将备份数据复制回原始位置
--incremental 增量备份,后面跟要增量备份的路径
--incremental-basedir=DIRECTORY 增量备份时使用指向上一次的增量备份所在的目录
--incremental-dir=DIRECTORY 增量备份还原的时候用来合并增量备份到全量,用来指定全备路径
--rsync 加快本地文件传输,适用于non-InnoDB数据库引擎。不与--stream共用
--no-timestamp 生成的备份文件不以时间戳为目录.
--tables-file=FILE 此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称,格式为databasename.tablename。
该选项传递给 xtrabackup --tables-file,与--tables选项不同,只有要备份的表的库才会被创建。
注意:部分备份(--include、--tables-file、--database)需要开启 innodb_file_per_table 。
--redo-only 在“准备基本完整备份” 和 “合并所有的增量备份(除了最后一个增备)”时使用此选项。
它直接传递给xtrabackup的 xtrabackup --apply-log-only 选项,使xtrabackup跳过"undo"阶段,只做"redo"操作。
如果后面还有增量备份应用到这个全备,这是必要的
innobackupex \
--defaults-file=/etc/my.cnf \
--user=root \
--password=Xiaoliu123! \
--socket=/var/lib/mysql/mysql.sock \
/data/
[root@centos181002 2019-03-10_00-46-04]# ll
总用量 17788
-rw-r-----. 1 root root 488 3月 10 00:46 backup-my.cnf
-rw-r-----. 1 root root 349 3月 10 00:46 ib_buffer_pool
-rw-r-----. 1 root root 12582912 3月 10 00:46 ibdata1
drwxr-x---. 2 root root 4096 3月 10 00:46 mysql
drwxr-x---. 2 root root 8192 3月 10 00:46 performance_schema
drwxr-x---. 2 root root 8192 3月 10 00:46 sys
drwxr-x---. 2 root root 138 3月 10 00:46 test
-rw-r-----. 1 root root 33 3月 10 00:46 xtrabackup_binlog_info
-rw-r-----. 1 root root 115 3月 10 00:46 xtrabackup_checkpoints
-rw-r-----. 1 root root 540 3月 10 00:46 xtrabackup_info
-rw-r-----. 1 root root 5581312 3月 10 00:46 xtrabackup_logfile
## 1.准备一个完全备份
innobackupex --apply-log /root/2019-03-10_00-46-04
## 2.关闭数据库
systemctl stop mysqld
## 3.删除原有数据文件
mkdir /home/bak
mv /var/lib/mysql/* /home/bak
## 4.执行恢复
innobackupex \
--defaults-file=/etc/my.cnf \
--copy-back \
--rsync \
/root/2019-03-10_00-46-04
## 5.更改权限
chown -R mysql.mysql /var/lib/mysql
## 6.启动服务
systemctl start mysqld
systemctl status mysqld
## 7.登录MySQL
mysql -uroot -p
1.增量备份
## 1.插入测试数据
insert into test.linux values ('zengliang1', 'zengliang1');
## 2.做增量备份1,以之前的``2019-03-10_00-46-04``为基准
innobackupex \
--defaults-file=/etc/my.cnf \
--user=root \
--password=Xiaoliu123! \
--socket=/var/lib/mysql/mysql.sock \
--incremental \
/data/inc \
--incremental-basedir=/data/2019-03-10_00-46-04/ \
--parallel=2
## 3.再插入测试数据
insert into test.linux values ('zengliang2', 'zengliang2');
## 4.做增量备份2:(以增量1为基准/data/inc/2019-03-10_01-45-25/)
innobackupex \
--defaults-file=/etc/my.cnf \
--user=root \
--password=Xiaoliu123! \
--socket=/var/lib/mysql/mysql.sock \
--incremental \
/data/inc \
--incremental-basedir=/data/inc/2019-03-10_01-45-25/ \
--parallel=2
2.增量备份恢复
增量备份的恢复需要有3个步骤
恢复完全备份
恢复增量备份到完全备份(开始恢复的增量备份要添加–redo-only参数,到最后一次增量备份要去掉–redo-only)
对整体的完全备份进行恢复,回滚未提交的数据
innobackupex --apply-log --redo-only /root/2019-03-10_00-46-04/
innobackupex --apply-log --redo-only /root/2019-03-10_00-46-04/ --incremental-dir=/root/inc/2019-03-10_01-45-25
--redo-only
参数了)innobackupex --apply-log /root/2019-03-10_00-46-04/ --incremental-dir=/root/inc/2019-03-10_01-49-56
innobackupex --apply-log /root/2019-03-10_00-46-04/
systemctl stop mysqld
mkdir /home/bak
mv /var/lib/mysql/* /home/bak
innobackupex
–defaults-file=/etc/my.cnf
–copy-back
–rsync
/root/2019-03-10_00-46-04
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
systemctl status mysqld
mysql -uroot -p
mysqldump命令将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。
mysqldump命令的工作原理很简单。它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换成一条INSERT语句。然后通过这些语句,就能够创建表并插入数据。
## 备份全库
mysqldump -uroot -pXiaoliu123! --all-databases >/home/alldatabases.sql
## 备份全库并直接压缩
mysqldump -uroot -pXiaoliu123! --all-databases | gzip > backupfile.sql.gz
## 备份databases库
mysqldump -uroot -pXiaoliu123! --databases test > /home/db_test.sql
## 备份test库的linux表
mysqldump -uroot -pXiaoliu123! test linux > /home/table_linux.sql
## 仅备份数据库结构
mysqldump -uroot -pXiaoliu123! --no-data --databases test > db_test_no-data.sql
mysqldump -uroot -pXiaoliu123! --no-data --all-databases > db_test_no-data.sql
## 语法
[root@centos181001 home]# mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
mysql -uroot -pXiaoliu123! mysql < alldatabases.sql
附录:
XtraBackup8.0下载地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
XtraBackup2.4下载地址:https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
https://www.percona.com/downloads/
特色Percona开源项目:https://www.percona.com/software
https://blog.csdn.net/vkingnew/article/details/83012316