"MySQL数据库备份与恢复"

概述

MySQL的多存储引擎架构针对不同的存储引擎有不同的备份方法,数据量的大小和备份目的不同都会影响如何选择备份策略。

备份类型

冷备份、热备份、暖备份。

冷备份是在完全停止数据库进程的情况下备份其数据目录,常在例行维护割接升级可停机的时候采用。

热备份是在数据库服务运行时通过备份工具执行数据备份,是在保证不中断和阻塞读写请求的同时完成数据备份,常用于大数据量的例行备份。

暖备份是MySQL数据库针对非事务型存储引擎表(例如:MyISAM)在不停机的情况下利用mysqlhotcopy工具进行的物理备份,其备份过程中为保证数据一致性会有短暂的读锁,与热备相比会阻塞写请求,故称为暖备。

注:mysqlhotcopy工具在未GA的MySQL 5.7版本将会移除,系统mysql库也会变成InnoDB引擎。

备份方式

逻辑备份和物理备份。

逻辑备份是对数据库对象(如用户、表、存储过程等)利用mysqldump和select outfile工具从数据库中导出最终以CSV或SQL文本形式保存。特点是备份速度较慢、可读性好,便于不同平台迁移。常用于表结构备份,在数据量规模不大时可作为例行备份。

物理备份是对数据库实例在物理磁盘上的数据文件、重做日志、表结构定义文件、配置文件等拷贝。特点是备份速度较快。常用于数据量规模较大的场景下可考虑在线热备。

存储引擎

主要讨论InnoDB和NDB(MySQL Cluster)事务型存储引擎。

对于逻辑备份两者都使用mysqldump或select .. outfile方式导出数据 ...

more ...

"How to easy collect MySQL query log"

当我们想采集一些查询语句用来分析时,可以利用slow-query-log来记录,与general-log相比它不会记录与查询语句无关的信息,例如:连接信息,登陆等。

我们通过设置long_query_time=0,能够记录到足够多的查询语句样本,但这在繁忙的线上是会有很大的性能影响,会消耗较多的file IO。long_query_time是一个动态变量可以在不重启MySQL数据库的情况下动态修改它的值,可以记录一段时间再把它恢复原值。虽然操作过程并不复杂,但有一个自动化整个过程的脚本会更好。

https://github.com/billkarwin/bk-tools/blob/master/full-slow-log/

$ full-slow-log [ -v ] [ -s seconds ] [ -c config ]
$ full-slow-log -v
Discovering slow_query_log=1
Discovering slow_query_log_file=mysql-slow.log
Discovering long_query_time=60.000000
Setting long_query_time ...
more ...