mysqldump备份时导致所有数据表锁定,无法提供服务

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysqldump备份时导致所有数据表锁定,无法提供服务

背景



有接到用户反馈:系统页面卡住不动。。


这个问题发生在生产环境下数据库的每日备份过程中,一个20+G的数据库,在定时备份时(关于如何配置线上数据库定时备份,可参考文章MySQL指定数据库定时备份)导致数据库卡死,持续时长5分钟左右,在此期间线上服务无响应。。


分析


备份一个库:mysqldump -hhost -uroot -ppassword dbname > /opt/backup.sql


直接使用上述语句备份数据库,存在的问题是:备份完成之前,会把所有的表锁住,导致无法写入。。


这在生产环境下是不可接受的,而且这才20+G,后续数据库Size会越来越大,备份的时间必然也越长。。


那么,有没有一种方法在完成备份的同时并不锁定表呢??往下看。


解决



在使用mysqldump备份时,加一个参数:--single-transaction,这样,便可以在备份库的时候并不锁定数据表。


mysqldump -hhost -uroot -ppassword --single-transaction dbname > /opt/backup.sql


原理说明:


Some internals on how this actually works - before the utility starts fetching data from the server, it sends it a START TRANSACTION command. This command serves few goals in this case. The first one, is to have a consistent backup created, from a specific point in time, regardless of changes that occur after the backup started. The second goal is to prevent those locks from happening, as we are performing our actions as part of a database transaction.


Notes: 仅对支持事务的表有效,比如InnoDB,对非事务型的表比如MyISAM则没有效果。


另外需要注意的是,当使用--single-transaction这个参数备份大型数据库时,可考虑和--quick参数结合使用。--quick可以让mysqldump在备份的过程中每次只取一行数据,而不是把所有行都缓存到内存里,这主要考虑了服务器内存限制,以防备份失败。


mysqldump -hhost -uroot -ppassword --single-transaction --quick dbname > /opt/backup.sql


这样,在备份时并不会对数据表加锁,线上业务完全不受影响,经测试,备份耗时基本不变。


Reference: How to backup MySQL database using Mysqldump without locking?


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL从表回收站中恢复误删的表
PolarDB MySQL提供表回收站的功能,删除的表会被临时转移到表回收站,本案例教您从表回收站恢复误删的表。
|
SQL 数据库
Sql脚本备份数据库
Sql脚本备份数据库
101 0
|
关系型数据库 MySQL 数据库
|
MySQL 关系型数据库 数据库
下一篇
无影云桌面