备份可以使生产中的数据进行有效的灾难恢复:硬件故障、软件故障、自然灾害、误操作测试等数据丢失场景。
1、停止服务器上的数据库服务进程
[root@CentOS7 ~]#service mysqld stop
Stopping mysqld (via systemctl): [ OK ]
2、考虑到空间资源问题,将备份的数据文件进行打包压缩
[root@CentOS7 data]#tar -zcvf mysql.tar.gz mysql/*
mysql/aria_log.00000001
mysql/aria_log_control
mysql/hello/
mysql/hello/db.opt
mysql/hello/classes.frm
mysql/hello/classes.ibd
mysql/hello/coc.frm
mysql/hello/coc.ibd
mysql/hello/courses.frm
mysql/hello/courses.ibd
mysql/hello/scores.frm
....
3、备份二进制文件至备份主机
[root@CentOS7 data]#mkdir /data/bin
[root@CentOS7 data]#chown -R mysql.mysql /data/bin/
scp -p 可以保留文件的所属权限
[root@CentOS7 data]#scp -p /data/bin/* 192.168.36.6:/data/bin/
4、将备份的数据压缩文件scp至备份主机上
[root@CentOS7 data]#scp -p /data/mysql.tar.gz 192.168.36.6:/data/
5、备份配置文件
[root@CentOS7 data]#scp -p /etc/my.cnf 192.168.36.6:/etc/
6、启动服务
[root@CentOS7 data]#service mysqld start
Starting mysqld (via systemctl): [ OK ]
7、停止服务,删除数据
[root@CentOS7 data]#service mysqld stop
Stopping mysqld (via systemctl): [ OK ]
[root@CentOS7 data]#rm -rf /data/mysql/*
8、解压备份的数据文件到/data/mysql目录中
[root@CentOS7 data]#gzip -d mysql.tar.gz
[root@CentOS7 data]#tar -xvf mysql.tar -C ./
9、启动服务测试,并进行数据检查
[root@CentOS7 data]#service mysqld start
Starting mysqld (via systemctl): [ OK ]
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| hello |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
MariaDB [(none)]> use hello;
Database changed
MariaDB [hello]> show tables;
+-----------------+
| Tables_in_hello |
+-----------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-----------------+
7 rows in set (0.00 sec)
MariaDB [hello]> select *from students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
| 3 | Xie Yanke | 53 | M | 2 | 16 |
| 4 | Ding Dian | 32 | M | 4 | 4 |
| 5 | Yu Yutong | 26 | M | 3 | 1 |
| 6 | Shi Qing | 46 | M | 5 | NULL |
| 7 | Xi Ren | 19 | F | 3 | NULL |
| 8 | Lin Daiyu | 17 | F | 7 | NULL |
| 9 | Ren Yingying | 20 | F | 6 | NULL |
| 10 | Yue Lingshan | 19 | F | 3 | NULL |
| 11 | Yuan Chengzhi | 23 | M | 6 | NULL |
| 12 | Wen Qingqing | 19 | F | 1 | NULL |
| 13 | Tian Boguang | 33 | M | 2 | NULL |
| 14 | Lu Wushuang | 17 | F | 3 | NULL |
| 15 | Duan Yu | 19 | M | 4 | NULL |
| 16 | Xu Zhu | 21 | M | 1 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
| 18 | Hua Rong | 23 | M | 7 | NULL |
| 19 | Xue Baochai | 18 | F | 6 | NULL |
| 20 | Diao Chan | 19 | F | 7 | NULL |
| 21 | Huang Yueying | 22 | F | 6 | NULL |
| 22 | Xiao Qiao | 20 | F | 1 | NULL |
| 23 | Ma Chao | 23 | M | 4 | NULL |
| 24 | Xu Xian | 27 | M | NULL | NULL |
| 25 | Sun Dasheng | 100 | M | NULL | NULL |
+-------+---------------+-----+--------+---------+-----------+
25 rows in set (0.00 sec)
1、请求锁定所有表
mysql> FLUSH TABLES WITH READ LOCK;
2、记录二进制日志文件及事件位置
mysql> FLUSH LOGS;
mysql> SHOW MASTER STATUS;
mysql -e 'SHOW MASTER STATUS' > /PATH/TO/SOMEFILE
3、创建快照
lvcreate -L # -s -p r -n NAME /DEV/VG_NAME/LV_NAME
4.、释放锁
mysql> UNLOCK TABLES;
-A, --all-databases 备份所有数据库,含create database
-B , --databases db_name… 指定备份的数据库,包括create database语句
-E, --events:备份相关的所有event scheduler
-R, --routines:备份所有存储过程和自定义函数
--triggers:备份表相关触发器,默认启用,用--skip-triggers,不备份触发器
--default-character-set=utf8 指定字符集
--master-data[=#]: 此选项须启用二进制日志
1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定#,默认为1
2:记录为注释的CHANGE MASTER TO语句此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除非开启--single-transaction)
-F, --flush-logs :备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,配合-A 或 -B 选项时,会导致刷新多次数据库。 建议在同一时刻执行转储和日志刷新,可通过和--single-transaction或-x,--master-data 一起使用实现,此时只刷新一次日志
--compact 去掉注释,适合调试,生产不使用
-d, --no-data 只备份表结构
-t, --no-create-info 只备份数据,不备份create table
-n,--no-create-db 不备份create database,可被-A或-B覆盖
--flush-privileges 备份mysql或相关时需要使用
-f, --force 忽略SQL错误,继续执行
--hex-blob 使用十六进制符号转储二进制列,当有包括BINARY,VARBINARY,BLOB,BIT的数据类型的列时使用,避免乱码
-q, --quick 不缓存查询,直接输出,加快备份速度
1、利用mysqldump生成备份文件
[root@CentOS7 data]#mysqldump hello >/data/backup/hello.sql
2、实现删库跑路的功能
[root@CentOS7 data]#mysql -e 'drop database hello'
3、创建一个数据库,实现数据恢复
[root@CentOS7 data]#mysql -e 'create database hello'
[root@CentOS7 data]#mysql hello </data/backup/hello.sql
4、数据检查
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| hello |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> use hello;
Database changed
MariaDB [hello]> show tables;
+-----------------+
| Tables_in_hello |
+-----------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-----------------+
7 rows in set (0.00 sec)
[root@CentOS7 data]#mysqldump -B hello >/data/backup/hello_bak.sql
[root@CentOS7 data]#grep '^CREATE DATABASE' /data/backup/hello_bak.sql
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hello` /*!40100 DEFAULT CHARACTER SET latin1 */;
利用mysqldump可以实现数据库中指定表的备份功能
1、备份hello库中students表的数据
[root@CentOS7 data]#mysqldump hello students >/data/backup/students.sql
查看备份数据
[root@CentOS7 data]#cat /data/backup/students.sql
-- MySQL dump 10.16 Distrib 10.2.23-MariaDB, for Linux (x86_64)
--
-- Host: localhost Database: hello
-- ------------------------------------------------------
-- Server version 10.2.23-MariaDB-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `students`
--
DROP TABLE IF EXISTS `students`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `students` (
`StuID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`Age` tinyint(3) unsigned NOT NULL,
`Gender` enum('F','M') NOT NULL,
`ClassID` tinyint(3) unsigned DEFAULT NULL,
`TeacherID` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`StuID`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `students`
--
LOCK TABLES `students` WRITE;
/*!40000 ALTER TABLE `students` DISABLE KEYS */;
INSERT INTO `students` VALUES (1,'Shi Zhongyu',22,'M',2,3),(2,'Shi Potian',22,'M',1,7),(3,'Xie Yanke',53,'M',2,16),(4,'Ding Dian',32,'M',4,4),(5,'Yu Yutong',26,'M',3,1),(6,'Shi Qing',46,'M',5,NULL),(7,'Xi Ren',19,'F',3,NULL),(8,'Lin Daiyu',17,'F',7,NULL),(9,'Ren Yingying',20,'F',6,NULL),(10,'Yue Lingshan',19,'F',3,NULL),(11,'Yuan Chengzhi',23,'M',6,NULL),(12,'Wen Qingqing',19,'F',1,NULL),(13,'Tian Boguang',33,'M',2,NULL),(14,'Lu Wushuang',17,'F',3,NULL),(15,'Duan Yu',19,'M',4,NULL),(16,'Xu Zhu',21,'M',1,NULL),(17,'Lin Chong',25,'M',4,NULL),(18,'Hua Rong',23,'M',7,NULL),(19,'Xue Baochai',18,'F',6,NULL),(20,'Diao Chan',19,'F',7,NULL),(21,'Huang Yueying',22,'F',6,NULL),(22,'Xiao Qiao',20,'F',1,NULL),(23,'Ma Chao',23,'M',4,NULL),(24,'Xu Xian',27,'M',NULL,NULL),(25,'Sun Dasheng',100,'M',NULL,NULL);
/*!40000 ALTER TABLE `students` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2019-05-06 15:22:32
2、删除数据库中的students表
[root@CentOS7 data]#mysql -e 'drop tables hello.students'
3、数据恢复
MariaDB [hello]> show tables;
+-----------------+
| Tables_in_hello |
+-----------------+
| classes |
| coc |
| courses |
| scores |
| teachers |
| toc |
+-----------------+
6 rows in set (0.00 sec)
MariaDB [hello]> source /data/backup/students.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
....
MariaDB [hello]> show tables;
+-----------------+
| Tables_in_hello |
+-----------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-----------------+
7 rows in set (0.00 sec)
1、利用mysqldump -A功能进行备份数据库所有数据
[root@CentOS7 data]#grep '^CREATE DATABASE' /data/backup/all.sql
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hello` /*!40100 DEFAULT CHARACTER SET latin1 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTE
2、清空数据库数据
[root@CentOS7 data]#rm -rf /data/mysql/*
3、重启服务,还原数据
[root@CentOS7 data]#service mysqld restart
Restarting mysqld (via systemctl): [ OK ]
[root@CentOS7 data]#mysql < /data/backup/all.sql
[root@CentOS7 data]#ll /data/mysql/
total 110620
-rw-rw---- 1 mysql mysql 16384 May 6 15:41 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 May 6 15:41 aria_log_control
drwx------ 2 mysql mysql 272 May 6 15:41 hello
-rw-rw---- 1 mysql mysql 860 May 6 15:41 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 May 6 15:41 ibdata1
-rw-rw---- 1 mysql mysql 50331648 May 6 15:41 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 May 6 15:41 ib_logfile1
drwx------ 2 mysql mysql 4096 May 6 15:41 mysql
drwx------ 2 mysql mysql 20 May 6 15:41 test
支持温备;不支持热备,所以必须先锁定要备份的库,而后启动备份操作
锁定方法如下:
-x,--lock-all-tables:加全局读锁,锁定所有库的所有表,同时加--singletransaction或--lock-tables选项会关闭此选项功能
注意:数据量大时,可能会导致长时间无法并发访问数据库
-l,--lock-tables:对于需要备份的每个数据库,在启动备份之前分别锁定其所有表,默认为on,--skip-lock-tables选项可禁用,对备份MyISAM的多个库,可能
会造成数据不一致
注:以上选项对InnoDB表一样生效,实现温备,但不推荐使用
支持热备,可用温备但不建议用
--single-transaction
此选项Innodb中推荐使用,不适用MyISAM,此选项会开始备份前,先执行START TRANSACTION指令开启事务
此选项通过在单个事务中转储所有表来创建一致的快照。 仅适用于存储在支持多版本控制的存储引擎中的表(目前只有InnoDB可以); 转储不保证与其他存储引擎保持一致。 在进行单事务转储时,要确保有效的转储文件(正确的表内容和二进制日志位置),没有其他连接应该使用以下语句:ALTER TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE
此选项和--lock-tables(此选项隐含提交挂起的事务)选项是相互排斥
备份大型表时,建议将--single-transaction选项和--quick结合一起使用
mysqldump –uroot –A –F –E –R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > $BACKUP/fullbak_$BACKUP_TIME.sql
mysqldump –uroot –A –F –E –R –x --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > $BACKUP/fullbak_$BACKUP_TIME.sql
1、备份数据并压缩
[root@CentOS7 data]# mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz
[root@CentOS7 data]#ll /data/all.sql.xz
-rw-r--r-- 1 root root 105104 May 6 16:42 /data/all.sql.xz
2、添加数据
MariaDB [hello]> insert students(name,age)values('Darius',23);
Query OK, 1 row affected (0.03 sec)
MariaDB [hello]> select *from students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
....
| 26 | Darius | 23 | F | NULL | NULL |
+-------+---------------+-----+--------+---------+-----------+
26 rows in set (0.00 sec)
3、 删库
[root@CentOS7 data]#rm -rf mysql/*
[root@CentOS7 data]#ll mysql/
total 0
4、重启服务
[root@CentOS7 data]#service mysqld restart
5、因无需二进制日志改变,所以临时关闭二进制日志
MariaDB [(none)]> set sql_log_bin=off;
Query OK, 0 rows affected (0.00 sec)
6、恢复数据库,先恢复完全备份
解压
[root@CentOS7 data]#xz -d all.sql.xz
恢复完全备份数据
[root@CentOS7 data]#mysql <all.sql
[root@CentOS7 data]#mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 10.2.23-MariaDB-log MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| hello |
| information_schema |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> use hello
Database changed
MariaDB [hello]> show tables;
+-----------------+
| Tables_in_hello |
+-----------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-----------------+
7 rows in set (0.00 sec)
>> 此时备份之后的数据还没有进行恢复
7、查看完全备份时二进制文件的位置
[root@CentOS7 data]#vim all.sql
....
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=4882960;
....
8、查看完全备份时二进制日志的位置,从此位置后的日志导出到inc.sql
[root@CentOS7 data]# mysqlbinlog --start-position=4882960 /data/bin/mysql-bin.000005 > /data/inc.sql
9、导入数据
MariaDB [mysql]> source /data/inc.sql;
开启二进制日志
MariaDB [(none)]> set sql_log_bin=on;
Query OK, 0 rows affected (0.00 sec)
10、成功恢复数据
MariaDB [hello]> select *from students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
....
| 26 | Darius | 23 | F | NULL | NULL |
+-------+---------------+-----+--------+---------+-----------+
26 rows in set (0.00 sec)
percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具
xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互
innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和 MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在xtrabackup 之上做了一层封装实现的
xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到 xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过xtrabackup替换innobackupex
xtrabackup工具在EPEL中,需要通过EPEL源进行下载
[root@CentOS7 ~]#yum install percona-xtrabackup
通过官网下载最新版本
https://www.percona.com/downloads/XtraBackup/LATEST/
贴心的人儿,给各位奉上阿里云的EPEL源
[epel]
name=epel
baseurl=http://mirrors.aliyun.com/epel/7/x86_64
gpgcheck=0
备份:innobackupex [option] BACKUP-ROOT-DIR
选项说明:https://www.percona.com/doc/percona-xtrabackup/LATEST/genindex.html
--user:该选项表示备份账号
--password:该选项表示备份的密码
--host:该选项表示备份数据库的地址
--databases:该选项接受的参数为数据库名,如果要指定多个数据库,彼此间需要以空格隔开;如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表
--defaults-file:该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置
--incremental:该选项表示创建一个增量备份,需要指定--incremental-basedir
--incremental-basedir:该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用
--incremental-dir:该选项表示还原时增量备份的目录
--include=name:指定表名,格式:databasename.tablename
Prepare:innobackupex --apply-log [option] BACKUP-DIR
选项说明:
--apply-log:一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备
份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
--use-memory:和--apply-log选项一起使用,当prepare 备份时,做crash recovery分配的内存大小,单位字节,也可1MB,1M,1G,1GB等,推荐1G
--export:表示开启可导出单独的表之后再导入其他Mysql中
--redo-only:此选项在prepare base full backup,往其中合并增量备份时候使用,但不包括对最后一个增量备份的合并
还原:innobackupex --copy-back [选项] BACKUP-DIR
innobackupex --move-back [选项] [--defaults-group=GROUP-NAME] BACKUP-DIR
选项说明:
--copy-back:做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir
--move-back:这个选项与--copy-back相似,唯一的区别是它不拷贝文件,而是移动文件到目的地。这个选项移除backup文件,用时候必须小心。使用场景:没有足够的磁盘空间同事保留数据文件和Backup副本
还原注意事项:
1.datadir 目录必须为空。除非指定innobackupex --force-non-emptydirectorires选项指定,否则--copy-backup选项不会覆盖
2.在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中
3.由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户
chown -R mysql:mysql /data/mysql
以上需要在用户调用innobackupex之前完成
--force-non-empty-directories:指定该参数时候,使得innobackupex --copy-back或--move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果--copy-back和--move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败
使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、 MERGE、 CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在备份目录中创建如下文件:
(1)xtrabackup_info:innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置
(2)xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。 LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
(3)xtrabackup_binlog_info:MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
(4)backup-my.cnf:备份命令用到的配置选项信息
(5)xtrabackup_logfile:备份生成的日志文件
1、在原主机
innobackupex --user=root /backup
scp -r /backup/2018-02-23_11-55-57/ 目标主机:/data/
2、在目标主机
innobackupex --apply-log /data/2019-05-06_20-34-35/
systemctl stop mariadb
rm -rf /var/lib/mysql/*
innobackupex --copy-back /data/2019-05-06_20-34-35/
chown -R mysql.mysql /var/lib/mysql/
systemctl start mariadb
1、在原主机做完全备份到/backups
xtrabackup --backup --target-dir=/backup/
scp -r /backup/* 目标主机:/backup
2、在目标主机上
1)预准备:确保数据一致,提交完成的事务,回滚未完成的事务
xtrabackup --prepare --target-dir=/backup/
2)复制到数据库目录
注意:数据库目录必须为空,MySQL服务不能启动
xtrabackup --copy-back --target-dir=/backup/
3)还原属性
chown -R mysql:mysql /var/lib/mysql
4)启动服务
systemctl start mariadb
1、在原主机
innobackupex /backup
mkdir /backup/inc{1,2}
修改数据库内容
innobackupex --incremental /backup/inc1 --incrementalbasedir=/backups/2019-05-06_20-34-35(完全备份生成的路径)
再次修改数据库内容
innobackupex --incremental /backup/inc2 --incrementalbasedir=/backup/inc1/2019-05-06_20-34-35 (上次增量备份生成的路径)
scp -r /backup/* 目标主机:/data/
2、在目标主机
不启动mariadb
rm -rf /var/lib/mysql/*
innobackupex --apply-log --redo-only /data/2019-05-06_20-34-35/
innobackupex --apply-log --redo-only /data/2019-05-06_20-34-35/ --incremental-dir=/data/inc1/2018-02-23_14-26-17
innobackupex --apply-log /data/2019-05-06_20-34-35/ --incrementaldir=/data/inc2/2018-02-23_14-28-29/
innobackupex --copy-back /data/2019-05-06_20-34-35/
chown -R mysql.mysql /var/lib/mysql/
systemctl start mariadb
1. 备份过程
1)完全备份:
xtrabackup --backup --target-dir=/backup/base
2)第一次修改数据
3)第一次增量备份
xtrabackup --backup --target-dir=/backup/inc1 --incrementalbasedir=/backup/base
4)第二次修改数据
5)第二次增量
xtrabackup --backup --target-dir=/backup/inc2 --incrementalbasedir=/backup/inc1
6)scp到目标主机
scp -r /backup/* 目标主机:/backup/
备份过程生成三个备份目录
/backup/{base,inc1,inc2}
2. 还原过程
1)预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
xtrabackup --prepare --apply-log-only --target-dir=/backup/base
2)合并第1次增量备份到完全备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
3)合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
4)复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
xtrabackup --copy-back --target-dir=/backup/base
5)还原属性
chown -R mysql:mysql /var/lib/mysql
6)启动服务
systemctl start mariadb
1、单表备份
innobackupex --include='hellodb.students' /backups
2、备份表结构
mysql -e 'show create table hellodb.students' > student.sql
3、删除表
mysql -e 'drop table hellodb.students'
4、
innobackupex --apply-log --export /backups/2019-05-06_20-34-35/
5、创建表
mysql>CREATE TABLE `students` (
`StuID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`Age` tinyint(3) unsigned NOT NULL,
`Gender` enum('F','M') NOT NULL,
`ClassID` tinyint(3) unsigned DEFAULT NULL,
`TeacherID` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`StuID`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8
6、删除表空间
alter table students discard tablespace;
7、复制
cp /backups/2019-05-06_20-34-35/hellodb/students.{cfg,exp,ibd} /var/lib/mysql/hellodb/
8、添加属组权限
chown -R mysql.mysql /var/lib/mysql/hellodb/
9 、
mysql>alter table students import tablespace;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。