读高性能MySQL第4版笔记14备

1.在线备份2.离线备份

2.1.关闭MySQL做备份是最简单、最安全的

2.2.所有获取一致性副本的方法中最好的

2.3.损坏或不一致的风险最小

2.4.根本不用关心InnoDB缓冲池中的脏页或其他缓存

2.5.不需要担心数据在尝试备份的过程中被修改

2.5.1.服务器不对应用提供访问

3.备份时间

3.1.将备份复制到目的地需要多久

4.备份负载

4.1.在将备份复制到目的地时对服务器性能的影响有多大

4.2.在备份服务器上压缩而不是在MySQL服务器上

4.3.PrconaXtraBackup和MySQLEntrprisBackup这样的工具都有限流选项,可在使用pv时加--rat-limit选项来限制备份脚本的吞吐量

5.牺牲其一以增强另外一个6.恢复时间

6.1.把备份镜像从存储位置复制到MySQL服务器、重放二进制日志等,需要多久

7.逻辑备份

7.1.导出

7.2.以一种MySQL能够解析的格式来包含数据

7.2.1.SQL语句

7.2.2.以某个符号分隔的文本

7.3.优点

7.3.1.逻辑备份备份的文件是可以用编辑器或像grp和sd之类的命令查看和操作的普通文件

7.3.2.恢复非常简单

7.3.3.可以通过网络来备份和恢复,也就是说,可以在与MySQL主机不同的另外一台机器上操作

7.3.4.可以在类似云数据库这样不能访问底层文件系统的系统中使用

7.3.5.灵活

7.3.6.与存储引擎无关

7.3.6.1.消除了底层数据存储引擎的差异

7.3.7.有助于避免数据损坏

7.3.7.1.如果MySQL在内存中的数据还没有损坏,当不能得到一个正常的裸文件备份时,或许可以得到一个可以信赖的逻辑备份

7.4.缺点

7.4.1.必须由数据库服务器完成生成逻辑备份的工作,因此要占用更多的CPU周期

7.4.1.1.某些场景下比数据库文件本身更大

7.4.2.无法保证导出后再还原出来的一定是同样的数据

7.4.2.1.浮点表示的问题、软件Bug等都会导致问题

7.4.3.从逻辑备份中还原需要MySQL加载和解释语句,将它们转化为存储格式,并重建索引,所有这一切会很慢

7.4.3.1.MySQL中导出数据和通过SQL语句将其加载回去的庞大开销

7.4.3.2.如果使用逻辑备份,测试恢复需要的时间将非常重要

7.4.3.3.逻辑备份最可怕的地方就是不确定的还原时间

8.裸文件备份

8.1.原始文件是指存放于硬盘上的文件

8.2.直接复制原始文件

8.3.优点

8.3.1.基于文件的物理备份,它只需将需要的文件复制到其他地方即可完成备份,不需要其他额外的工作来生成原始文件

8.3.2.非常容易跨平台、操作系统和MySQL版本工作

8.3.3.从裸文件备份中恢复会更快

8.3.3.1.MySQL服务器不需要执行任何SQL语句或构建索引

8.3.3.2.如果有很大的InnoDB表,无法完全缓存到内存中,则裸文件备份的恢复要快得多

8.3.3.2.1.至少要快一个数量级

8.4.缺点

8.4.1.InnoDB的原始文件通常比相应的逻辑备份要大得多

8.4.1.1.表空间往往包含很多未使用的空间

8.4.2.不总是可以跨平台、操作系统及MySQL版本的

8.4.2.1.文件名大小写敏感和浮点格式是可能会遇到麻烦的

8.4.2.2.对于需要长期保留或者是用于满足法律合规要求的备份,尽量不要完全依赖裸文件备份

8.4.2.3.每隔一段时间需要做一次逻辑备份

8.4.3.除非经过测试,不要假定备份(特别是裸文件备份)是正常的

8.4.3.1.CHECKTABLES

8.4.3.2.不建议仅对文件运行innochcksum

9.混合使用

9.1.使用裸文件备份

9.2.用得到的数据启动MySQL服务器实例并运行mysqlchck

9.3.周期性地使用mysqldump执行逻辑备份

9.4.优点是不会使生产服务器在导出时有过度负担

9.5.如果能够方便地利用文件系统的快照,也可以生成一个快照,将该快照复制到另外一台服务器上并释放,然后测试原始文件,再执行逻辑备份

10.备份什么

10.1.恢复的需求决定需要备份什么

10.2.最简单的策略是只备份数据和表定义,但这是一个最低的要求

10.3.非显著数据

10.3.1.二进制日志和InnoDB事务日志

10.3.2.在理想情况下,应该把整个数据目录和MySQL一起备份起来

10.4.代码

10.4.1.现代的MySQL服务器可以存储许多代码,例如,触发器和存储过程

10.4.2.实际是存放在mysql数据库中的

10.5.服务器配置

10.5.1.对于服务器配置来说,备份中对生产服务器至关重要的任何外部配置,都十分重要

10.6.选定的操作系统文件

10.6.1.在UNIX服务器上,这可能包括cron任务、用户和组的配置、管理脚本,以及sudo规则

11.部分备份

11.1.一般不包含完整的数据集

11.1.1.因为某些数据没有改变

11.1.2.对减少服务器开销、备份时间及备份空间而言都很适合

11.2.PrconaXtraBackup和MySQLEntrprisBackup,仍然会扫描服务器上的所有数据块,因而并不会节约太多的开销

11.2.1.确实会减少一定量的备份时间和大量用于压缩的CPU时间

11.2.2.会减少磁盘空间的使用

11.3.差异备份

11.3.1.自上次全备份后所有改变的部分而做的备份

11.4.增量备份

11.4.1.对自任意类型的上次备份后的所有修改做的备份

11.4.2.缺点

11.4.2.1.会增加恢复的复杂性

11.4.2.2.额外的风险

11.4.2.3.更长的恢复时间

12.建议

12.1.使用PrconaXtraBackup和MySQLEntrprisBackup中的增量备份特性

12.2.备份二进制日志

12.2.1.在每次备份后使用FLUSHLOGS来开始记录一个新的二进制日志,这样就只需要备份新的二进制日志

12.3.如果有一些“引用”表,例如,包含不同语种、各个月的名称列表,或者州或区域的简写等,可以考虑将它们单独放在一个数据库中,这样就不需要每次都备份这些表

12.3.1.一个更好的选择可能是把这些数据放到程序代码中,而不是保存在数据库中

12.4.某些数据根本不需要备份

12.4.1.相对于从全备份中可能获得的快速恢复时间,避免备份可以节约更多时间开销

12.4.2.临时数据也不用备份

12.5.备份所有的数据,然后发送到一个有去重特性的地方

12.6.如果可以做全备份,考虑到简便性,建议尽量做全备份

12.6.1.建议至少一周一次

13.复制

13.1.从副本中备份最大的好处是可以不干扰源库,避免在源库上增加额外的负载

13.1.1.这是一个建立副本服务器的好理由,即使不需要用它做负载均衡或提供高可用性

13.2.用GTID是非常明智的

13.2.1.避免了必须保存有关复制过程的所有信息

13.3.故意将一个副本延迟复制一段时间对于某些灾难场景非常有用

13.4.源库与副本数据不匹配是很常见的,并且MySQL没有方法检测这个问题

13.4.1.唯一方法是使用PrconaToolkit中的pt-tabl-chcksum之类的工具

13.4.2.防止这种情况的最好方法是使用supr_rad_only来确保只有复制可以写入副本

13.5.复制不是备份




转载请注明:http://www.aierlanlan.com/rzdk/6239.html