天天看点

MySQL备份与恢复-mysqldump备份与恢复

这片博文主要用来介绍MySQL的备份与恢复:

MySQL的备份形式可以分为如下几种:

热备----即不停机备份

冷备----需要关闭MySQL,然后备份其数据文件。(停机备份一般是直接拷贝其datadir目录)

温备----在线备份,对应用影响大,通常加一个读锁【会阻塞写的应用】,意义不大,基本不用。

从导出的备份文件结构可分为如下几种:

逻辑备份---备份的数据是导出的SQL语句(如mysqldump, mysqlpump【MySQL5.7加入的】,mydumper)

物理备份--备份的是物理文件(如xtracebackup)

接下来会详细介绍这四种命令的通常用法(如果不特别说明,数据库存储引擎为INNODB):

mysqldump的用法如下:

备份单张表:

MySQL备份与恢复-mysqldump备份与恢复
MySQL备份与恢复-mysqldump备份与恢复

--single-transaction 参数说明

备份单个库和备份所有的库

恢复数据的时候直接使用mysql导入即可:

切记在备份INNODB数据库时一定要加上--single-transaction 参数,为了基于PIT恢复也要加上--master-data参数。

mysqldump的备份过程

上面我们已经看到了mysqldump备份出的数据文件时对应sql语句,我们查看一下在执行mysqldump时,MySQL数据库做了哪些操作!

首先开启general_log日志,如下:

然后再去使用mysqldump备份一次数据文件

最后查看general_log日志,如下:

mysqld的其余常见参数应用:

-d:只备份指定数据库表的结构(也就是建表语句)

-R, --routines :备份时导出存储过程和自定义函数!

-f, --force         Continue even if we get an SQL error.。发生错误的时候也继续备份。

mysqldump还有很多参数,可以在用到的时候查看!

mysqldump是逻辑备份,单线程备份,单线程恢复,因此会比较慢。特别是恢复的时候,之前恢复过一个800多万行记录的数据,结果使用mysql逐条导入sql语句,搞库几个小时。

备份与恢复纠错

 1:在使用mysql导入mysqldump的备份数据时,报了如下错误:

错误原因就是行太长了,但是线上环境修改字段属性有点不太合适,可以采用如下方法:

导入成功后,如果是线上环境,还需要把参数修改回去!

2:在使用mysqldump备份的时候出现如下问题

我查了一下,这个表大概有1500万行的记录,报错原因如下:

问题的解决方案:增加 net_write_timeout 可以解决上述的问题的。在实践中发现,在增大 net_write_timeout 后,Server 端会消耗更多的内存,有时甚至会导致 swap 的使用(并不确定是不是修改 net_write_timeout 所至)。建议在mysqldump 之前修改 net_write_timeout 为一个较大的值(如1800),在 mysqldump 结束后,在将这个值修改到默认的60。(备注:net_write_timeout不是mysqldump的配置参数,而是mysql的参数)

继续阅读