乐趣区

关于mysql:三高Mysql-Mysql备份概览

引言

​ 内容为慕课网的 《高并发 高性能 高可用 MySQL 实战》 视频的学习笔记内容和集体整顿扩大之后的笔记,本篇内容偏重 Mysql 备份的基本原理和罕用介绍为主,大部分为实践相干的内容。

​ 数据备份在平时的工作和学习中可能应用的比拟少,然而对于一个线上我的项目来说却是不可或缺的一环,对于开发人员来说相熟和理解备份的相干常识是很有必要的,学习备份的相干内容能够帮忙咱们理解运维工作中一些根本的备份操作。

​ 本节内容偏差实践为主,重点在于理解 Mysqldump 如何实现增量备份和全量备份,为前面的文章介绍 Mysql 主备同步打下基础。

知识点:

  • Outfile 原生 mysql 工具介绍
  • MysqlDump 对于 Outfile 工具改良,MysqlDump 特点介绍
  • MysqlDump 实现增量备份和全量备份的细节
  • Xtrabackup 备份工具的介绍以及实现增量备份和全量备份的细节

备份介绍

为什么须要备份?

  1. 古代的少数服务少数零碎高可用,数据无价,失落会带来难以承当的损失。
  2. 一套残缺的备份机制能够使得零碎遇到不可抗力的状况时将数据的修复代价降到最低甚至零损失。
  3. 对于任何我的项目都应该具备定期备份数据的好习惯,无论是否为生产我的项目。

备份模式

  1. 物理备份:比方咱们应用硬盘拷贝本人的重要数据,灵活性个别,安全性较高。
  2. 云服务器备份:将数据传到第三方的云数据库进行保存,保护老本个别,安全性取决于第三方保护商的品质。
  3. 自建服务器备份:开销比拟大,然而数据安全性和稳定性都是最高的,也能够离线进行物理备份,可操作性强。

备份时候数据状态三种:

  • 热备:失常运行备份。此时数据库可读可写。
  • 冷备:停机备份。数据库无奈进行任何操作。
  • 温备 数据库只读。数据库可用性弱于热备,备份期间,数据库只能进行读操作,不能进行写操作

备份文件格局

备份文件的格局意味着导出的时候是什么样的:

  • 逻辑备份:输入或者 SQL 语句,能够供技术人员浏览。
  • 物理备份(裸文件):备份数据库底层文件然而不可浏览

备份内容

  • 齐全备份:备份残缺数据
  • 增量备份:备份全量备份之后的数据差别
  • 日志备份:也就是 Binlog 备份

常用工具

罕用的备份工具有上面两种

  • Mysqldump:逻辑备份,热备份,全量
  • xtrabackup:物理,热,全量 + 增量备份

小结

  • 备份的根本模式:从备份的模式来看,能够应用物理磁盘备份,也能够依赖于三方服务商的服务器或者自建的服务器进行备份,而从备份数据状态来看,能够存在热备,冷备和温备,这里须要小心温备这个概念。
  • 备份工具比拟罕用的有两种:Mysqldumpxtrabackup,这两种工具都须要重点把握根底的操作应用,实际多余实践,多应用就会了。
  • 开发的时候应用逻辑备份比拟多,然而对于运维人员来说可能应用物理备份的形式更快,逻辑备份经常用于线上出问题的场景。

Outfile 命令备份(理解)

怎么来?

​ 对于这个命令咱们只须要理解,在日常应用中并不波及应用场景,此命令为 mysql 自带的命令同时也是 mysql 的预留关键字,能够说是最原始的逻辑备份形式,能够作为理解 MysqlDump 的前置根底。

应用前提

  1. 要晓得网站的绝对路径,能够通过报错信息、phpinfo 界面、404 界面等一些形式晓得
  2. 要有 file 的读写权限,倡议给相干文件夹执行chmod -R /xxx/xxx
  3. 写的文件名肯定是在文件治理中中不存在的,不然也会不胜利!

特点

  1. 简略的导出 SQL 后果次要用于长期须要数据验证的场景。
  2. Mysql 原生命令反对的导出形式,执行效率高。
  3. 命令简略操作不便,能够导出一致性视图。

缺点

  • 导出的格局较为简陋,通常须要对于数据进行二次解决能力失常应用。
  • 只能导出 SQL 执行后果,没有方法将导出后的数据用于还原。

通过下面的介绍能够看出 Outfile 这个命令只能用于日常开发的场景下须要测试数据长期导出,不能作为热备的次要工具,然而这个命令对于 Mysqldump 来说是启发性的。

如何应用?

前提条件:在具体的导出之前咱们须要理解 Mysql 导出的具体门路,应用上面的语句检查一下以后的平安文件导出前缀,留神后果如果为 NULL 在 Mysql5.6 版本没有影响然而 Mysql5.7 版本是存在影响的。

另外集体应用的 Mac 零碎的文件系统治理尽管和 Linux 大体一致,然而其实有很多权限等等细节问题也是踩了一波小坑。

show variables like '%secure%'
-- secure_file_priv  NULL

为什么说应用 secure_file_priv 为 NULL 是存在影响的?

解答:

Mysql5.7 的版本中,在 Mysql 启动的时候,如果应用了这个参数的配置则会 限度你能够应用 LOAD DATA INFILE加载文件的范畴,意味着如果想要导出必须是在这个配置指定的目录上面能力胜利,上面是此配置对应的变动:

1. secure\_file\_priv 为 NULL 时,示意限度 mysqld不容许导入或导出

2. secure\_file\_priv 为 /tmp 时,示意限度 mysqld只能 在 /tmp 目录中执行导入导出,其余目录不能执行。

3. secure\_file\_priv 没有值 时,示意 不限度mysqld 在任意目录的导入导出。

实现下面这些筹备工作之后,咱们须要搭建根本的操作环境,比方新建数据库或者表,这里仍然应用了 sakila 数据库,咱们能够应用上面的命令进行尝试导出,比方上面的语句中咱们将 payment 表的所有数据导出。

select * from payment into Outfile '/Users/xxx/xxx/a.csv' 

注:Sakila 数据库在 Mysql 官网的 example 中能够间接下载。

然而理论执行过程中会呈现如下的报错,从报错信息能够看到这里是因为 secure_file_privNULL的问题:

1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, Time: 0.004000s

再次强调集体学习的时候应用的是 macos 零碎,设置起来比拟麻烦这里也不啰嗦具体细节了,次要讲一下解决思路:

  • 设置自定义的配置 my.ini 文件并且放到 /etc 的目录上面(Mysql 读取配置文件规定最高优先级),在文件结尾设置此参数:secure_file_priv=/Users/xxxx/xxx/ 而后 :x 保留(留神用 sudo vim my.ini),导出门路倡议选的以后/User/xxx 家目录,不便导出之后立马关上。(根门路门路不太平安,macos 零碎也不容许你这么弄)
  • 重启 Mysql 或者重启电脑,连贯 Mysql 之后继续执行上述命令后发现报错:PermissionError: [Errno 13] Permission denied,显著是 macOs 的权限问题,通过命令 chmod 777 导出文件夹 /* 能够给整个文件夹凋谢权限(根目录不要这样做)。
  • 如果呈现重名文件应用命令一样报错,提醒导出文件曾经存在,切记每次执行前查看是否重名文件。

Macos 应用 brew 装置 Mysql 会发现没有 my.ini 文件,集体从网上翻了份能用的间接在上面链接提供的文件尾部增加 secure_file_priv=/Users/xxxx/xxx/ 即可,省去大伙的工夫,当然是针对我这种蛋疼的 MacOs 零碎来说的,其余操作系统应该能够间接找到相干配置文件。

链接: https://pan.baidu.com/s/1bM3cQtaXMl3ZGNgQRzhEMA 提取码: phkg

插曲:Maxos 应用 homebrew 装置版本的启动和敞开:

敞开:sudo pkill -9 mysql

启动:cd /usr/local/mysql/support-file/mysql.server start(stop 敞开)

下面啰嗦一大堆之后,上面是最终导出的后果,能够看到默认只应用了空格分隔,并且格局比拟乱:

Outfile 应用也是比拟好记的,同时上面是 Outfile 的一些应用参数,通过这些参数能够自在配置:

SELECT ... INTO Outfile 'file_name'
        [CHARACTER SET charset_name]
        [export_options]
 
export_options:
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]

咱们发现下面的格局比拟凌乱,咱们 心愿依照标准表格的模式导出,于是咱们能够在每一行的数据之间增加都好,让导出之后的数据放弃标准。

select * from payment into Outfile '/Users/xxx/xxx/a.csv' FIELDS terminated by ','

从后果能够看出 Outfile 只能用作一些简略的场景的导出操作:

到此为止咱们只须要简略理解这个命令即可,为上面理解 Mysqldump 打下原理根底。

Mysqldump 命令应用

Mysqldump的命令能够看作是 Outfile 命令的扩大,作为非常重要的备份工具常常用于开发和测试的场景,当然线上不举荐应用这种命令操作,个别须要由运维人员操作来导出须要的数据,如果间接对着整个库热备份很容易出问题。

「知识点」

  1. Outfile 的痛点,或者说 Mysqldump 改良点
  2. Mysqldump 特点
  3. Mysqldump 的操作(实战案例)
  4. Mysqldump 的增量备份如何实现(原理)

    • Binlog 忠诚记录 mysql 变动
    • Mysqldump 通常只能全量备份,所以借助 Binlog 作为增量备份。
    • 要害:Mysqldump 备份,切换新的 Binlog 文件,之后拷贝 binlog 文件作为增量备份,留神全量备份和增量备份文件的不同。
    • 采纳从零开始还原,采纳全量还原 + Binlog 还原。
  5. Mysqldump 通常只能全量备份,应用 Binlog 增量备份

    • 要害:Mysqldump 备份,切换新的 Binlog 文件。
  6. 采纳从零开始还原:全量还原 + Binlog 还原

Outfile 的痛点

​ 只有简略操作一下 Outfile 命令就会发现 Outfile 有上面这几个显著的毛病,Mysqldump 其实就是解决了 Outfile 的很多事实问题,并且在此基础上改良让它更加简略好用。

  • 只能导出数据,很难把数据再次导入
  • 无奈做逻辑备份,也就是备份 SQL 逻辑
  • 导出模式繁多,通常只能导出 excel。

Mysqldump 特点

  • Mysql 官网内置命令,内置实现能够避开很多没有必要的问题。
  • 反对近程备份,能够生成多种格局的文件。
  • 与存储引擎无关,能够在多种存储引擎下进行备份复原,对 innodb 引擎反对热备,对 MyISAM 引擎反对温备(施加表锁)
  • 收费。

如何学习 Mysqldump?

官网开发的当然是官网文档学习最好啦,链接提供的是 Mysql8.0 的版本,其余版本须要依据本人以后应用的版本切换浏览,另外命令参数不须要去记忆也没有意义,在须要的时候翻出来看看而后看看官网文档即可:

任何工具类的货色适宜应用的时候查阅,死记硬背是没有意义的,最初会发现只须要记住罕用的形式即可。

​ https://dev.mysql.com/doc/ref…

备份所需权限

  • 如果须要备份数据至多须要 SELECT 权限。
  • 备份视图须要 SHOW VIEW 权限。
  • 备份触发器须要 TRIGGER 权限。
  • 如果不应用参数–single-transaction,则须要相干权限进行锁表。
  • (从 MySQL 8.0.21 开始)如果不应用 --no-tablespaces 选项则须要 PROCESS 权限。
  • 如果须要导入备份数据,则须要蕴含执行语句的所有权限,比方 CREATE、ALTER、DELETE 权限

实际:MysqlDump 备份案例

​ 咱们能够尝试备份一下官网提供的 example 比方 sakila,上面是一些简略的操作命令:

​ 备份一个数据库

-- 第一种备份办法
./Mysqldump -uroot -pxxxxxx sakila > /Users/xxx/xxx/xxx/xxxx/backup-file.sql
-- Mysqldump: [Warning] Using a password on the command line interface can be insecure.

​ 备份多个数据库到一个 sql 文件

./Mysqldump  --databases sakila sakila-db -uroot -xxx > /Users/xxx/xx/xxxx/xxx/backup-file_bk2.sql     

将数据从一个服务器备份到另一个服务器

-- 集体是本地单机没有进行虚拟机模仿,试验后果未知
Mysqldump --opt db_name | mysql --host=remote_host -C db_name

​ 如果应用 InnoDB 的存储引擎 Mysql 有一种在线备份的办法:

-- 参数解释
-- --all-databases 所有数据库
-- --single-transaction RR 级别的备份,也就是确保一致性的视图(Innodb 存储引擎)
-- --master-data 将二进制日志文件的名称和地位写到输入端(注意一下,为下文的增量备份铺垫)
-- 如果不是 InnoDB, 须要应用上面的参数:-- 1. --lock-all-tables 应用 FTWRL 锁锁住所有表(MyISAM)-- 2. --lock-tables 应用 READ LOCAL 锁住以后库的表(MyISAM)Mysqldump -uroot -pxx --all-databases --master-data --single-transaction > /Users/xxx/xxx/all_databases.sql

​ 还原数据库

-- 
./Mysqldump -uroot -pxxxxxx sakila < /Users/xxx/xxx/xxx/xxxx/backup-file.sql

-- 第二种还原备份办法
-- 1. 应用具备相干权限的用户名和明码登陆连贯到 mysql 服务器 mysql -uroot -proot 
-- 2. source /xxx 门路 /xx.sql 文件 source xxx.sql

-- 第三种形式
mysql -e "source /path-to-backup/backup-file.sql" db_name

​ 对于其余的命令这里就不再扩大了,这里介绍一些罕用的根本够日常开发应用了,如果须要更多的写法能够参考下面的官网文档。

Mysqldump 的增量备份实现原理

​ 下面提到的都是全量备份的形式,尽管咱们在拷贝的时候能够通过 –single-transaction 拷贝一致性的视图,尽管拷贝那一刻的数据记录是全量并且残缺的,然而此时数据库仍然是存在还在执行的增量数据的,那么这部分数据应该如何备份呢?

​ 应用 Mysqldump 的进行增量备份首先须要理解增量备份的细节,所以这里就轮到 Binlog 日志上场了,Binlog 的备份蕴含上面几个小点:

  1. Binlog 忠诚记录 mysql 变动,全量增量备份和还原过程。
  2. Mysqldump 通常只能全量备份,所以借助 Binlog 作为增量备份。
  3. 要害:Mysqldump 备份,切换新的 Binlog 文件,之后拷贝 binlog 文件作为增量备份,留神全量备份和增量备份文件的不同。
  4. 采纳从零开始还原,采纳全量还原 + Binlog 还原。

为什么不能同时增量和全量备份:

咱们能够把 Mysql 记录日志的过程看作是在纸上写字,此时 Mysql 在最新的 Binlog 日志中记录内容,如果咱们把正在写的内容和之前的日志内容一并备份,就很可能导致 备份出写了一半的数据,就如同咱们写字的时候忽然被抽中本子一样,这样就很有可能导致数据损坏。

​ Binlog 忠诚记录 mysql 变动,全量增量备份和还原过程。

​ 实现增量备份的关键点在于如 何给 Binlog 日志做切入点 ,做 Mysqldump 增量备份存在的最大问题是咱们无奈晓得以后的 全量备份和增量数据的分界点 。Binlog 日志记录的是 Mysql 的变动内容比方 CRUD 的数据记录变动记录以及数据的构造的调整等等,并且和 InnoDB 的存储引擎的redo log 双写放弃事务一致性。

​ 依据下面的内容介绍咱们晓得了Mysqldump 只能全量备份,须要借助 Binlog 日志实现增量备份

​ 增量备份实现思路是在备份的时候将以后正在读写的 Binlog 日志停掉,并且将此文件进行拷贝,然而须要留神的是此时拷贝的是 Binlog 文件,和日常编写的逻辑 SQL 是不一样的,切记。

关键点:Mysqldump 备份,Mysql 服务器进行以后 Binlog 写入并且切换新的 Binlog 文件

​ Mysqldump 提供了相似下面提到的操作,上面是 Mysqldump 全量备份 + 增量备份的操作流程:

-- --all-databases 所有数据库
-- --single-transaction RR 级别的备份,也就是确保一致性的视图(Innodb 存储引擎)
-- --master-data=[=Value](8.0.26 改为 --source-data 命令)将二进制日志文件的名称和地位写到输入端(注意一下,为下文的增量备份铺垫)
-- --flush-logs 在备份之前刷新服务器的日志 
Mysqldump -uroot -pxx --all-databases --master-data=2 --flush-logs --single-transaction > /Users/xxx/xxx/all_databases.sql

​ 通过执行下面的命令之后首先会进行 全量备份 同时会把 Binlog 切换到下一份日志文件从新开始进行读写,此时就能够把这一份进行写入对 binlog 日志文件备份进去进行后续的增量备份还原,简而言之:Mysql 备份的同时切换 Binlog,并且把以后写了一部分的 Binlog 日志进行拷贝。

​ Mysql 其实还有一种备份形式那就是 Binlog 手动增量备份,实现形式是间接应用命令把缓存的日志刷到磁盘中并且切换到下一个 Binlog,它的命令格局如下:

mysqladmin -uroot -p123456 flush-logs

​ 须要留神的是这里应用的是 mysqladmin 工具,在执行命令之后咱们能够手动将所有的 Binlog 进行备份。

​ 还原形式:全量还原 + Binlog 还原,还原操作和增量全量备份形式对应,因为是 Mysqldump 全量 +Binlog 增量备份,所以同样须要先进行全量还原再增量还原。

​ 复原全量备份:还原的操作最简略的形式是连贯服务器之后执行source xxx.sql,而 Binlog 增量还原操作案例如下:

mysqlBinlog Mysql-bin.00002 ... | mysql -uroot -p123456

小结

  1. Mysqldump + Binlog 能够无效进行全量 + 增量备份。
  2. Mysqldump 实际上是对于 Outfile 工具的扩大和降级。
  3. Binlog 备份,Binlog 还原,Mysqldump 备份能够看出不同组件的搭配。
  4. 从实践上来说 Binlog 能够还原到任意的时刻。
  5. Mysqldump 的参数较多,相熟和把握须要多加练习。
  6. 须要留神辨别 mysqladmin、mysqlBinlog、mysqldump

XtraBackup 物理备份

​ XtrqBackup 尽管不是官网开发的工具,然而应用的频率却远高于 mysqldump,物理备份绝对比 mysql 的逻辑备份来说更加牢靠,同时对于零碎的影响也要更小。

​ 为什么须要物理备份通常具备上面的理由:

  1. 逻辑备份针对大数据量备份速度非常迟缓。
  2. 导出速度快不须要二次转化。
  3. 对于数据库的压力较小。
  4. 增量备份更加容易。

间接拷贝裸文件可行么?

咱们间接 CV 数据库的文件能够么?实践上是可行的然而实际操作会发现有很多问题,以 Innodb 的存储引擎的数据为例,它不仅波及 Binlog 文件,idb 文件(数据库原始数据)以及 frm 文件,还包含独有的 redo log 和 undo log 这些文件等,此时会发现如果要拷贝这些文件 只能冷备,然而仅仅冷备还是不行的,因为这里还牵扯操作系统和数据库版本兼容等等问题,有非常显著的跨平台的问题。

从论断来看,间接拷贝裸文件实践上是可行的,然而实际上备份进去的数据可能齐全不可用,甚至可能无奈兼容。

如何实现物理 + 全量 + 热备?

实现思路如下:外围的思维是监听 redo log 文件变动的同时,备份 Idb 文件和备份过程中进行了改变的 redo log 文件。

  1. 启动监听线程,收集 redo log
  2. 备份 idb 文件,记录 监听 过程中新产生的 redo log 日志
  3. 备份 idb 实现,进行收集 redo log 日志
  4. 减少 FTWRL 锁拷贝元数据 frm

FTWRL 锁是啥?

FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令次要用于备份工具获取一致性备份(数据与 Binlog 位点匹配)。须要留神的是这个锁的粒度十分大,根本是锁住整个库的等级,如果是备份主库会导致整个主库“卡”住,从库则会导致线程期待。

所需权限:FLUSH_TABLESRELOAD权限。

因为这里讲的次要是备份的内容,想进一步理解 FTWRL 锁实现细节和应用教程能够参考上面的博客:

  • FLUSH TABLE WITH READ LOCK 详解 – 天士梦 – 博客园 (cnblogs.com)”)
  • MySQL 全局锁和表锁 – keme – 博客园 (cnblogs.com)”)

留神在第四步给整个库加全局锁会有一段时间数据库是处于温备的状况的(不能进行读写)。

这里还存在一个问题,如何晓得哪些数据是增量数据?Xtrabackup 的思路是在 Mysql 中每一个数据页存在一个 LSN 号 码,在备份的时候能够通过这个 LSN 号确定哪个页存在变动,当进行过一次全量备份之后记录变动过数据的 LSN 号,在下一次备份能够间接找比上一次 LSN 号更大的值进行备份。

LSN(log sequence number):日志序列号,是一个始终递增的整形数字,在 MySQL5.6.3 版本后占 8 个字节。它示意事务写入到日志的字节总量。LSN 次要用于产生 crash 时对数据进行 recovery!每个 数据页 重做日志 checkpoint 都有 LSN。

Xtrabackup 介绍

在介绍 Xtrabackup 之前须要理解 Mysql 的 ibbackup,它是由 Innodb 官网开发,后续被改名为Mysql Enterprise Backup,因为这个软件为免费软件用户并不多,所以后续呈现了齐全替代品Xtrabackup 并且被宽泛应用。

Xtrabackup 是由 percona 开源的收费数据库备份软件,不同于 Mysqldump 这是一个第三方公司开发的软件,在后面提到的 Mysqldump 命令是逻辑备份,逻辑备份最大的问题是在数据量特大的状况下导出会非常迟缓并且非常影响数据库的读写性能,并且导出的时候须要对于数据库进行“RR 级别”的锁定或者应用表锁(MyISAM),所以对于大数据量还是倡议应用物理备份的形式备份。

Xtrabackup 装置实现后有 4 个可执行文件,其中 2 个比拟重要的备份工具是innobackupexxtrabackup。上面是 xtrabackup 其余工具的大抵介绍:

1)xtrabackup 是专门用来备份 InnoDB 表的,和 mysql server 没有交互;

2)innobackupex 是一个封装 xtrabackup 的 Perl 脚本,反对同时备份 innodb 和 myisam,但在对 myisam 备份时须要加一个全局的读锁。

3)xbcrypt 加密解密备份工具

4)xbstream 流传打包传输工具,相似 tar

XtraBackup 特点

  • 备份速度快,简直不影响服务器的失常业务解决
  • 压缩存储,节俭磁盘容量,同时能够存储到另一个服务器
  • 还原速度很快,对于服务器的负载较小。

XtraBackup 装置过程

Xtrabackup 是没有 windows 和 mac 版本的,只有 linux 版本,所以须要做试验也只能应用 linux 零碎,所以这里简略记录一下如何装置:

下载地址:Percona Software downloads for databases

留神外面蕴含很多软件,这里找到如上截图所示的界面,依据本人的 Mysql 版本下载:

  • 8.0:对应 Mysql8.0 以上版本。
  • 2.4:对应 Mysql5.0 – Mysql5.7 版本。

上面是 xtrabackup 的大抵安装操作流程:

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar

[root@centos ~]# ll

total 703528

-rw-r--r-- 1 root root 654007697 Sep 27 09:18 mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

-rw-r--r-- 1 root root  65689600 Nov 30 00:11 Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar

[root@centos ~]# tar xf Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar

[root@centos ~]# yum install percona-xtrabackup-24-2.4.9-1.el6.x86\_64.rpm -y

[root@centos ~]# which xtrabackup 

/usr/bin/xtrabackup

[root@centos ~]# innobackupex -v

innobackupex version 2.4.9 Linux (x86\_64) (revision id: a467167cdd4)

#曾经装置实现

XtraBackup 全量备份与复原

Xtrabackup 装置实现之后,咱们能够应用上面的命令进行备份操作:

[root@centos ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" --backup /root

执行实现之后,会在对应的目录外面新增一个日期文件目录,接着咱们须要同步 log 日志:

# 应用此参数应用相干数据性文件放弃一致性状态
[root@centos ~]#innobackupex --apply-log /root/(日期)/

最初咱们通过上面的命令对于备份文件进行复原:

[root@centos ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /root/(日期)/

Xtrabackup 增量备份与复原

须要留神的是增量备份仅能利用于 InooDB 或 XtraDB 表,上面的命令用于创立增量备份的数据。

[root@Vcentos ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental /backup/ --incremental-basedir=/root/(日期)

#--incremental /backup/   指定增量备份文件备份的目录

#--incremental-basedir    指定上一次全备或增量备份的目录

增量备份的复原命令:

[root@centos ~]# innobackupex --apply-log --redo-only /root/(日期)/

[root@centos ~]# innobackupex --apply-log --redo-only /root/(日期)/ --incremental-dir=/backup/(日期)/

如果须要复原全副的数据,能够应用上面的命令解决:

[root@centos ~]#innobackupex --defaults-file=/etc/my.cnf --copy-back /root/(日期)/

增量备份合并至全量备份,能够应用上面的命令:

innobackupex --apply-log bakdir/xxx-xx-xx/ --incremental-dir=basedir/YYYY-YY-YY/

小结

  • 物理备份是一种高效备份形式。
  • XtraBackup 采纳备份 idb + 备份期间监听改变 redo log 的形式实现全量热备 + 增量备份。
  • XtraBackup 是罕用的 Mysql 物理备份工具。
  • 物理备份最大毛病是备份之后的文件无奈间接浏览。

Mysql 备份产生的翻新

从 Mysqldump 对于备份的改良过程中咱们能够从上面的形式进行思考:

  1. 间接复制磁盘:比复制数据文件更为间接,间接复制物理磁盘设施镜像备份。
  2. 多线程备份:通过多线程的形式放慢备份的速度。
  3. 备份工具治理:咱们能够发现传统备份都是小黑框,对于备份工具自身进行治理的软件是许须要的。

由此扩大出上面几个比拟非凡的备份形式扩大:

  • Mylvmbackup:LVM 备份磁盘。备份磁盘是一种 物理温备 的备份形式,备份磁盘自身是一种很好的思路扩大,然而备份磁盘同样有一个重大的问题,那就是兼容性的问题,所以这个备份工具应用了 LVM 逻辑卷进行磁盘治理。
  • Mydumper:多线程备份。这个工具的应用频率甚至比 Mysqldump 还要高一些。Mydumper 次要有上面的特点

​ 1. 和 Mysqldump 相似的工具,2. 实现了多线程兵法备份还原,3. 速度更快。

  • Zmanda Recovery Manager(ZRM):备份工具治理。提供了可视化的形式治理备份文件,相似于数据库管理工具中的 navicat,这个工具的特点是集成 Binlog 和多种备份工具。

如何养成良好数据管理习惯

​ 最初无论多少的备份软件其实最好的状况是备份的数据咱们永远也用不上,除开备份以外咱们还有其余的形式来避免数据失落,比方遵循上面的标准:

  • 权限隔离

    • 业务只有 DML 权限,删除尽量应用假删除
    • 开发人员只领有只读账号,当然很多状况下略微大一些的公司都有明确的权限治理。
    • DBA 日常只应用只读账户,非凡操作再切换账号
    • 永远不要应用 root 间接连客户端,禁用 root 连贯 mysql
  • SQL 审计

    • DBA 环境上线之前审计 SQL 语句
    • 开发批改数据须要 DBA 执行
    • Inception 主动审核工具
  • 伪删表

    • 删表之前先改个名字,察看业务影响
  • 删除过程应用脚本给非凡标记表名称删除,而不是手动操作

    • 对于本地开发须要备份的表能够应用退出 _bak 进行标记。
  • 齐备过程

    • 上线之前必须备份

总结

​ 本节从 Outfile 这个古老的命令动手,介绍了 mysqldump 的命令前身以及对于 outfile 命令的改良优化,讲述如何通过 mysqldump 实现增量和全量备份,同时介绍了外部的细节。然而逻辑备份通常只实用于数据量不是很大并且零碎运行承受肯定提早响应对状况下能够这么做,一旦数据量过大并且要求疾速响应,如果想要热备不影响零碎,更加举荐 Xtrabackup 备份,这个工具能够说是运维备份 Mysql DB 的一大杀器,非常弱小并且非常好用,这里简略介绍了实现的细节,对于 XtraBack 的细节摸索这里就不做过多演示了,更倡议参考官网材料相熟工具的应用。

写在最初

​ 本篇同样偏重实践为主,下一篇内容围绕整个课程的外围如何搭建“三高”架构进行解说。

退出移动版