MySQL 数据库备份与恢复
MySQL 数据库备份与恢复数据备份介绍
在⽣产环境中我们数据库可能会遭遇各种各样的不测从⽽导致数据丢失, ⼤概分为以下⼏种.
硬件故障软件故障⾃然灾害⿊客攻击
误操作 (占⽐最⼤)
须知在⽣产环境中,服务器的硬件坏了可以维修或者换新,软件崩溃可以修复或重新安装, 但是如果数据没了那可就毁了,⽣产环境中最重要的应该就是数据了。所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据。
备份什么
⼀般情况下, 我们需要备份的数据分为以下⼏种
⼆进制⽇志, InnoDB 事务⽇志
代码(存储过程、存储函数、触发器、事件调度器)服务器配置⽂件
备份的类型
按照备份时数据库的运⾏状态,可以分为三种,分别是:冷备、温备、热备。、
冷备:停库、停服务来备份,即当数据库进⾏备份时, 数据库不能进⾏读写操作, 即数据库要下线。
温备:不停库、不停服务来备份,会(锁表)阻⽌⽤户的写⼊,即当数据库进⾏备份时, 数据库的读操作可以执⾏, 但是不能执⾏写操作 。热备:不停库、不停服务来备份,也不会(锁表)阻⽌⽤户的写⼊ 即当数据库进⾏备份时, 数据库的读写操作均不是受影响 。MySQL中进⾏不同类型的备份还要考虑存储引擎是否⽀持?
逻辑备份与物理备份
按照备份的内容分,可以分为两种,分别是逻辑备份与物理备份
1、物理备份:直接将底层物理⽂件备份
2、逻辑备份:通过特定的⼯具从数据库中导出sql 语句或者数据,可能会丢失数据精度
备份⽅式之全量、差异、增量
按照每次备份的数据量,可以分为全量备份、差异备份以及增量备份。
全量备份/完全备份(Full Backup ):备份整个数据集( 即整个数据库 )部分备份:备份部分数据集(例如: 只备份⼀个表的变化)
差异备份
增量备份
# 1、差异备份(Differential Backup )
每次备份时,都是基于第⼀次完全备份的内容,只备份有差异的数据(新增的、修改的、删除的),例如第⼀次备份:完全备份
第⼆次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异第三次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异第四次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异第五次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异。。。
# 2、增量备份(Incremental Backup )
每次备份时,都是基于上⼀次备份的内容(注意是上⼀次,⽽不是第⼀次),只备份有差异的数据(新增的、修改的、删除的),所以增量备份的结果是⼀条链,例如第⼀次备份:完全备份
第⼆次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异第三次备份:以当前时间节点的数据为基础,备份与第⼆次备份内容的差异第四次备份:以当前时间节点的数据为基础,备份与第三次备份内容的差异第五次备份:以当前时间节点的数据为基础,备份与第四次备份内容的差异。。。
针对上述三种备份⽅案,如何恢复数据呢?
# 1、全量备份的数据恢复
只需出指定时间点的那⼀个备份⽂件即可,即只需要到⼀个⽂件即可
单位介绍信# 2、差异备份的数据恢复
需要先恢复第⼀次备份的结果,然后再恢复最近⼀次差异备份的结果,即需要到两个⽂件
# 3、增量备份的数据恢复
需要先恢复第⼀次备份的结果,然后再依次恢复每次增量备份,直到恢复到当前位置,即需要到⼀条备份链综上,对⽐三种备份⽅案
1、占⽤空间:全量 > 差异 > 增量
2、恢复数据过程的复杂程度:增量 > 差异 > 全量
备份的⼯具
此外,如果考虑到增量备份,还需要结合binlog⽇志(binlog只属于增量恢复),需要⽤到⼯具mysqlbinlog,相当于逻辑备份的⼀种。
备份实战
下⾯我们采⽤多种⽅法实战MySQL数据备份实战。
使⽤cp 进⾏备份
存储引擎冷备温备热备InnoDB ⽀持⽀持⽀持MyISAM
⽀持
⽀持
不⽀持
备份⼯具备份速度恢复速度便捷性适⽤存储引擎⽀持的备份类型功能应⽤场景cp 、tar 等(物理)
快快⼀般所有冷备、全量、差异、增量
很弱少量数据备份lvm2快照(物理)
快快⼀般
所有
⽀持⼏乎热备(即差不多是热备,哈哈),是借助⽂件系统管理⼯具进⾏的备份⼀般中⼩型数据量的备份
xtrabackup (物理)
较快较快是⼀款⾮常强⼤的热备⼯具由percona 提供,只⽀持InnoDB/XtraDB 热备、全量、差异、增量
强⼤较⼤规模的备份mysqldump (逻辑)
慢
慢
⼀般
所有
⽀持温备、完全备份、部分备份、对于InnoDB 存储引擎⽀持热备
⼀般
中⼩型数据量的备份
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
[root@localhost ~]# mkdir /data
[root@localhost ~]# cp -a /usr/local/mysql-5.7.34/data/* /data/
模拟数据丢失
[root@localhost ~]# mv /usr/local/mysql-5.7.34/data .
数据恢复
[root@localhost ~]# mkdir /usr/local/mysql-5.7.34/data
[root@localhost ~]# sql /usr/local/mysql-5.7.34/data
[root@localhost ~]# cp -a /data/* /usr/local/mysql-5.7.34/data/
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.34-log Source distribution
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
使⽤mysqldump
MySQL数据库⾃带的⼀个很好⽤的备份命令。是逻辑备份,导出 的是SQL语句。也就是把数据MySQL库中以逻辑的SQL语句的形式直接输出或⽣成备份的⽂件的过程。
语法
mysqldump -h 服务器 -u⽤户名 -p密码选项与参数 > 备份⽂件.sql
参数
参数解释
-A --all-
databases导出全部数据库
-Y --all-
tablespaces导出全部表空间
--add-drop-
database每个数据库创建之前添加drop数据库语句。
--add-drop-
table每个数据表创建之前添加drop数据表语句。(默认为打开状态,使⽤--skip-add-drop-table取消选项)
--add-locks在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使⽤--skip-add-locks取消选项)
--comments附加注释信息。默认为打开,可以⽤--skip-comments取消
--compact导出更少的输出信息(⽤于调试)。去掉注释和头尾等结构。可以使⽤选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys
-c --
complete-
insert
使⽤完整的insert语句(包含列名称)。这么做能提⾼插⼊效率,但是可能会受到max_allowed_packet参数的影响⽽导致插⼊失败。
-C --
compress在客户端和服务器之间启⽤压缩传递所有信息
-
B --
databases导出⼏个数据库。参数后⾯所有名字参量都被看作数据库名。
--debug输出debug信息,⽤于调试。
--debug-
info输出调试信息并退出
--default-
character-
set
设置默认字符集,默认值为utf8
--delayed-
数据库恢复insert采⽤延时插⼊⽅式(INSERT DELAYED)导出数据
-
E --events导出事件。
--master-
data在备份⽂件中写⼊备份时的binlog⽂件。值为1时,binlog⽂件名和位置没有注释,为2时,则在备份⽂件中将binlog的⽂件名和位置进⾏注释。
--flush-logs开始导出之前刷新⽇志。请注意:假如⼀次导出多个数据库(使⽤选项--databases或者--all-databases),将会逐个数据库刷新⽇志。除使⽤--lock-all-tables或者--master-data 外。在这种情况下,⽇志将会被刷新⼀次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新⽇志应该使⽤--lock-all-tables 或者--master-data 和--flush-logs。
--flush-
privileges在导出mysql数据库之后,发出⼀条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该⽤于导出mysql数据库和依赖mysql数据库数据的任何时候。
--force在导出过程中忽略出现的SQL错误。
-h --host需要导出的主机信息
--ignore-table 不导出指定表。指定忽略多个表时,需要重复多次,每次⼀个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2……
-x --lock-all-
tables提交请求锁定所有数据库中的所有表,以保证数据的⼀致性。这是⼀个全局读锁,并且⾃动关闭--single-transaction 和--lock-tables 选项。
-l --lock-tables 开始导出前,锁定所有表。⽤READ LOCAL锁定表以允许MyISAM表并⾏插⼊。对于⽀持事务的表例如InnoDB和BDB,--single-transaction是⼀个更好的选择,因为它根本不需要锁定表。请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出⽂件中的表在数据库之间的逻辑⼀致性。不同数据库表的导出状态可以完全不同。
--single-transaction 适合innodb事务数据库的备份。保证备份的⼀致性,原理是设定本次会话的隔离级别为Repeatable read,来保证本次会话(也就是dump)时,不会看到其它会话已经提交了的数据。
-F刷新binlog,如果binlog打开了,-F参数会在备份时⾃动刷新binlog进⾏切换。-n --no-
create-db只导出数据,⽽不添加CREATE DATABASE 语句。
-t --no-
create-info只导出数据,⽽不添加CREATE TABLE 语句。
-d --no-data不导出任何数据,只导出数据库表结构。
-p --
password连接数据库密码
-P --port连接数据库端⼝号
-u --user指定连接的⽤户名。
-R备份存储过程和函数数据(如果开发写了函数和存储过程,就备,没写就不备)
--triggers备份触发器数据(现在都是开发写触发器)
案例
# 在命令⾏执⾏命令,进⾏全量备份
[root@localhost mysql]# mysqldump -uroot -p123456 -A -R --triggers --master-data=2 --single-transaction | gzip > /tmp/
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@localhost mysql]# ll /tmp/
-rw-r--r--. 1 root root 191963 Oct 14 00:01 /tmp/
# 在命令⾏执⾏命令,刷新binlog,便于⽇后查
[root@localhost mysql]# mysql -uroot -p123456 -e "flush logs"
mysql: [Warning] Using a password on the command line interface can be insecure.
# 登录数据库,再插⼊⼀些数据,模拟增量,这些数据写⼊了新的binlog
mysql> insert t1 values(4),(5),(6);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
# 案例2:要求每天凌晨3点半的时候,做数据库备份
1、编写脚本
[root@localhost ~]# cat mysqldump.sh
#!/bin/bash
怎样把qq图标隐藏USERNAME=root
PASSWORD=123456
DATABASE=linux14
/usr/local/mysql/bin/mysqldump -u${USERNAME} -p${PASSWORD} -R --triggers -B ${DATABASE} --master-data=2 --single-transaction | gzip > /tmp/MySQL_`date +"%F".`
2、加⼊定时任务
30 03 * * * /root/mysqldump.sh
模拟数据丢失
# 模拟数据丢失
mysql> drop database db1;
# 恢复数据
# 1、mysql数据导⼊时,临时关闭binlog,不要将恢复数据的写操作也记⼊
mysql> set sql_log_bin=0;
# 2、先恢复全量
mysql> source /tmp/MySQL_2021-10-15.sql
如果是压缩包呢,那就这么做
mysql> system zcat /tmp/MySQL_ | mysql -uroot -p123456
# 3、模拟恢复数据
mysql> drop database db01;
Query OK, 1 row affected (0.01 sec)
mysql> set sql_log_bin=0;
车管所端午节放假吗Query OK, 0 rows affected (0.00 sec)
mysql> system zcat /tmp/MySQL_ | mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql> use db01;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
测试在线热备份
可以先准备⼀个存储过程,⼀直保持写⼊操作,然后验证热备。
#1. 准备库与表
create database if not exists db01;
use db01;
create table s1(
id int,
name varchar(20),
gender char(6),
email varchar(50)
);
#2. 创建存储过程,每隔3秒插⼊⼀条
delimiter $$
create procedure auto_insert1()
BEGIN
declare i int default 1;
while(i<3000000)do
insert into s1 values(i,'shanhe','male',concat('shanhe',i,'@oldboy'));
select concat('shanhe',i,'_ok') as name,sleep(3);
set i=i+1;
end while;
END$$
delimiter ;
年利率#3. 查看存储过程
show create procedure auto_insert1\G
备份
# 1、先打开binlog⽇志
mysql> SET sql_log_bin=ON;
Query OK, 0 rows affected (0.00 sec)
淘宝怎么设置包邮# 2、登录数据库,执⾏存储过程
mysql> use db01;
mysql> call auto_insert1();
若想杀死存储过程
mysql> show processlist; -- 查出id
mysql> kill id号;
# 3、在命令⾏执⾏下述命令,进⾏全量备份
[root@localhost mysql]# mysqldump -uroot -p123456 -A -R --triggers --master-data=2 --single-transaction | gzip > /tmp/
mysqldump: [Warning] Using a password on the command line interface can be insecure.
# 4、全量备份完毕后的⼀段时间⾥,数据依然插⼊,写⼊了mybinlog.000001中
# 然后我们在命令⾏刷新binlog,产⽣了新的mybinlog.000002
[root@localhost mysql]# mysql -uroot -p123456 -e "flush logs"
mysql: [Warning] Using a password on the command line interface can be insecure.
# 5、此时数据依然在插⼊,但都写⼊了最新的mybinlog.000002中,所以需要知道的是,增量的数据在mysqlbinlog.000001与mybinlog.000002中都有
我们登录数据库,杀掉存储过程,观察到最新的数据插到了id=55的⾏
mysql> show processlist; -- 查出id
mysql> kill id号;
删除数据
mysql> drop database db01;
Query OK, 1 row affected (0.12 sec)
恢复数据
# 登录数据库,先恢复全量
mysql> set sql_log_bin=0;
mysql> system zcat /tmp/ | mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
-- 查看恢复到了id = 16
mysql> select * from db01.s1;
+------+--------+--------+-----------------+
| id | name | gender | email |
+------+--------+--------+-----------------+
| 1 | shanhe | male | shanhe1@oldboy |
| 2 | shanhe | male | shanhe2@oldboy |
| 3 | shanhe | male | shanhe3@oldboy |
| 4 | shanhe | male | shanhe4@oldboy |
| 5 | shanhe | male | shanhe5@oldboy |
| 6 | shanhe | male | shanhe6@oldboy |
| 7 | shanhe | male | shanhe7@oldboy |
| 8 | shanhe | male | shanhe8@oldboy |
| 9 | shanhe | male | shanhe9@oldboy |
| 10 | shanhe | male | shanhe10@oldboy |
| 11 | shanhe | male | shanhe11@oldboy |
| 12 | shanhe | male | shanhe12@oldboy |
| 13 | shanhe | male | shanhe13@oldboy |
| 14 | shanhe | male | shanhe14@oldboy |
| 15 | shanhe | male | shanhe15@oldboy |
| 16 | shanhe | male | shanhe16@oldboy |
+------+--------+--------+-----------------+
16 rows in set (0.00 sec)
物理备份之Xtrabackup
Xtrabackup 是⼀个对 InnoDB 做数据备份的⼯具,据官⽅介绍,这也是世界上惟⼀⼀款开源的能够对innodb和xtradb数据库进⾏热备的⼯具;⽀持在线热备份(备份时不影响数据读写),是商业备份⼯具 InnoDB Hotbackup 的⼀个很好的替代品。
Xtrabackup有两个主要的⼯具:
xtrabackup只能备份InnoDB和XtraDB两种数据表,⽽不能备份MyISAM数据表。
innobackupex 是参考了 InnoDB Hotbackup 的 innoback 脚本修改⽽来的.innobackupex 是⼀个 perl 脚本封装,封装了 xtrabackup。主要是为了⽅便的同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加⼀个读锁。并且加⼊了⼀些使⽤的选项。如slave-info可以记录备份恢复后,作为slave需要的⼀些信息,根据这些信息,可以很⽅便的利⽤备份来重做slave。
Xtrabackup可以做些做什么?
在线(热)备份整个库的InnoDB、 XtraDB表 。
在xtrabackup的上⼀次整库备份基础上做增量备份(innodb only) ,以流的形式产⽣备份,可以直接保存到远程机器上(本机硬盘空间不⾜时很有⽤) 。
MySQL数据库本⾝提供的⼯具并不⽀持真正的增量备份,⼆进制⽇志恢复是point-in-time(时间点)的恢复⽽不是增量备份。
Xtrabackup⼯具⽀持
对InnoDB存储引擎的增量备份,⼯作原理如下:
⾸先完成⼀个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。
在进程增量备份时,⽐较表空间中每个页的LSN是否⼤于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。
⾸先,在 logfile 中到并记录最后⼀个 checkpoint(“last checkpoint LSN”),然后开始从 LSN 的位置开始拷贝 InnoDB 的 logfile 到xtrabackup_logfile;接着,开始拷贝全部的数据⽂件.ibd;在拷贝全部数据⽂件结束之后,才停⽌拷贝logfile。 因为logfile⾥⾯记录全部的数据修改情况,所以,即时在备份过程中数据⽂件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的⼀致。
XtraBackup备份的优点
个⼈理解:
⽆需停⽌数据库进⾏InnoDB热备,快速、可靠的完成备份
备份期间不间断事务处理
节省磁盘空间和⽹络带宽
⾃动对备份⽂件进⾏验证
快速恢复,保障在线运⾏时间持久性
官⽅说明:
在不停库的情况下,对InnoDB数据库进⾏热备
⽀持增量备份MySQL数据库
通过流压缩备份MySQL数据到另外⼀台服务器
在线MySQL服务器之间进⾏表空间迁移
Xtrabackup的备份原理图
innobackupex启动后,会先fork⼀个进程,⽤于启动xtrabackup,然后等待xtrabackup备份ibd数据⽂件
xtrabackup在备份innoDB数据是,有2种线程:redo拷贝线程和ibd数据拷贝线程。xtrabackup进程开始执⾏后,会启动⼀个redo拷贝的线程,⽤于从最新的checkpoint点开始顺序拷贝redo.log
再启动ibd数据拷贝线程,进⾏拷贝ibd数据。这⾥是先启动redo拷贝线程的。在此阶段,innobackupe
x进⾏处于等待状态(等待⽂件被创建)
xtrabackup拷贝完成ibd数据⽂件后,会通知innobackupex(通过创建⽂件),同时xtrabackup进⼊等待状态(redo线程依旧在拷贝redo.log)
innobackupex收到xtrabackup通知后哦,执⾏FLUSH TABLES WITH READ LOCK(FTWRL),取得⼀致性位点,然后开始备份⾮InnoDB⽂件(如frm、MYD、MYI、CSV、opt、par等格式的⽂件),在拷贝⾮InnoDB⽂件的过程当中,数据库处于全局只读状态。
当innobackup拷贝完所有的⾮InnoDB⽂件后,会通知xtrabackup,通知完成后,进⼊等待状态
xtrabackup收到innobackupex备份完成的通知后,会停⽌redo拷贝线程,然后通知innobackupex,redo.log⽂件拷贝完成
innobackupex收到redo.log备份完成后,就进⾏解锁操作,执⾏:UNLOCK TABLES
最后innbackupex和xtrabackup进程各⾃释放资源,写备份元数据信息等,innobackupex等xtrabackup⼦进程结束后退出。
Xtrabackup 安装
mysql 5.7以下版本,可以采⽤percona xtrabackup 2.4版本。
mysql 8.0以上版本,可以采⽤percona xtrabackup 8.0版本,xtrabackup8.0也只⽀持mysql8.0以上的版本。
⽐如,接触过⼀些⾦融⾏业,mysql版本还是多采⽤mysql 5.7,当然oracle官⽅对于mysql 8.0的开发⽀持⼒度⽇益加⼤,新功能新特性迭代不⽌。⽣产环境采⽤mysql 8.0的版本⽐例会⽇益增加。
# 安装⽅式⼀
# 安装yum仓库
[root@localhost ~]# yum install repo.percona/arch.rpm -y
# 安装XtraBackup命令
[root@localhost ~]# yum install percona-xtrabackup-24 -y
# 安装⽅式⼆
#下载epel源
[root@localhost ~]# wget -O /pos.po mirrors.aliyun/po
#安装依赖
[root@localhost ~]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
#下载Xtrabackup
[root@localhost ~]# wget downloads.percona/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.24/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm
# 安装
[root@localhost ~]# yum localinstall -y percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm
安装完后会⽣成命令
xtrabackup 以前使⽤该命令
innobackupex 现在使⽤该命令
innobackupex是xtrabackup的前端配置⼯具,使⽤innobackupex备份时, 会调⽤xtrabackup备份所有的InnoDB表, 复制所有关于表结构定义的相关⽂件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关⽂件, 同时还会备Xtrabackup 备份⽅式(物理备份)
1.对于⾮innodb表(⽐如myisam)是直接锁表cp数据⽂件,属于⼀种温备。
2.对于innodb的表(⽀持事务),不锁表,cp数据页最终以数据⽂件⽅式保存下来,并且把redo和undo⼀并备⾛,属于热备⽅式。
3.备份时读取配置⽂件/etc/myf
Xtrabackup 参数说明
--host 指定主机
--user 指定⽤户名
--password 指定密码
-
-port 指定端⼝
--databases 指定数据库
--incremental 创建增量备份
--incremental-basedir 指定包含完全备份的⽬录
--incremental-dir 指定包含增量备份的⽬录
--apply-log 对备份进⾏预处理操作。⼀般情况下,在备份完成后,数据尚且不能⽤于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步⾄数据⽂件中的事务。因此,此时数据⽂件仍处理不⼀--redo-only 不回滚未提交事务
--copy-back 恢复备份⽬录
Xtrabackup全量备份与恢复
使⽤innobackupex备份时,其会调⽤xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关⽂件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关⽂件,同时还会备份触发器和数据库配置信息相关的⽂
件,这些⽂件会被保存到⼀个以时间命名的⽬录当中。
#1、创建备份⽬录,会把mysql的datadir中的内容备份到改⽬录中
[root@localhost ~]# mkdir /backup
#2、全备
#2.1 在本地执⾏下述命令,输⼊登录数据的本地账号与密码
#2.2 指定备份⽬录为/backup下的full⽬录
[root@localhost ~]# innobackupex --user=root --password=123456 /backup/full
#3、查看:默认会在备份⽬录下⽣成⼀个以时间戳命名的⽂件夹
[root@localhost ~]# cd /backup/full/
[root@localhost full]# ls
2021-10-14_22-39-02
[root@localhost full]# ls 2021-10-14_22-39-02 #备份⽬录
。。。
[root@localhost full]# ls /var/lib/mysql # 数据⽬录
。。。
# 4、去掉时间戳,让备份数据直接放在备份⽬录下
我们在写备份脚本和恢复脚本,恢复的时候必须指定上⼀次备份的⽬录,如果备份⽬录带着时间戳,该时间戳我们很难在脚本中确定,⽆为了让脚本编写更加⽅便,我们可以使⽤选项--no-timestamp去掉时间戳,让备份内容直接[root@localhost full]# rm -rf 2021-10-14_22-39-02
[root@localhost backup]# innobackupex --user=root --password=123456 --no-timestamp /backup/full
[root@localhost backup]# ll /backup/full/
total 12340
-rw-r-----. 1 root root 487 Oct 14 22:42 backup-myf
drwxr-x---. 2 root root 48 Oct 14 22:42 db01
drwxr-x---. 2 root root 48 Oct 14 22:42 db02
-rw-r-----. 1 root root 646 Oct 14 22:42 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Oct 14 22:42 ibdata1
drwxr-x---. 2 root root 4096 Oct 14 22:42 mysql
drwxr-x---. 2 root root 8192 Oct 14 22:42 performance_schema
drwxr-x---. 2 root root 8192 Oct 14 22:42 sys
-rw-r-----. 1 root root 20 Oct 14 22:42 xtrabackup_binlog_info
-rw-r-----. 1 root root 135 Oct 14 22:42 xtrabackup_checkpoints
-rw-r-----. 1 root root 484 Oct 14 22:42 xtrabackup_info
-rw-r-----. 1 root root 2560 Oct 14 22:42 xtrabackup_logfile
# 如果要使⽤⼀个最⼩权限的⽤户进⾏备份,则可基于如下命令创建此类⽤户:
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456'; #创建⽤户
mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'bkpuser'; #回收此⽤户所有权限
mysql> GRANT RELOAD,LOCK TABLES,RELICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; #授权刷新、锁定表、⽤户查看服务器状态
mysql> FLUSH PRIVILEGES; #刷新授权表
实战
1、全量备份
[root@master backups]# innobackupex --user=root --password=123456 --host=127.0.0.1 /backups/
#在master上进⾏全库备份#语法解释说明:
#--user=root 指定备份⽤户
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论