暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 huayumicheng 2023-07-03
190

转载:https://juejin.cn/post/7023171050619797540 


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

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

分析

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

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

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

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

解决

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

javascript

复制代码

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在备份的过程中每次只取一行数据,而不是把所有行都缓存到内存里,这主要考虑了服务器内存限制,以防备份失败。

css

复制代码

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

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

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


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

标签:

MySQL


文章被收录于专栏:

cover

数据库

记录数据库相关文章,包括关系型、非关系型、时序数据库等

cover

服务器运维

记录服务器运维以及线上问题处理流程

相关小册

「Nacos 核心源码精讲」封面

Nacos 核心源码精讲

IT贱男创作等级LV.2

VIP.4 融会贯通

798购买

¥24.95

¥49.9

首单券后价

「从零开发企业级 Go 应用」封面

从零开发企业级 Go 应用

孔令飞

1101购买

¥24.95

¥49.9

首单券后价

评论


看完啦,

登录

分享一下感受吧~


相关推荐

  • hy___

    4年前

    后端命令行数据库

    mysqldump 深入浅出

    • 8927
    • 44
    • 评论
  • MySQL技术

    1年前

    后端MySQL

    mysqldump备份技巧分享

    • 685
    • 5
    • 评论
  • 子路173

    3年前

    MySQL

    mysqldump基于docker容器实现数据库备份与恢复

    • 2685
    • 3
    • 评论
  • K8sCat

    2年前

    MySQL后端

    MySQL - 定时数据备份

    • 3.7w
    • 14
    • 2
  • 米开朗基杨

    3年前

    Linux

    超详细的网络抓包神器 tcpdump 使用指南

    • 5.2w
    • 84
    • 7
  • Squids数据库云服务提供商

    1年前

    MySQL

    逻辑备份:mysqldump vs物理备份:XtraBackup

    • 1430
    • 6
    • 评论
  • heibaiying

    3年前

    MySQL

    MySQL常用备份策略详解 —— mysqldump、mysqlpump 和 Xtrabackup

    • 2607
    • 11
    • 1
  • 崔庆才丨静觅

    5年前

    爬虫百度Python

    App爬虫神器mitmproxy和mitmdump的使用

    • 2.7w
    • 155
    • 2
  • 饱饱巴士

    1月前

    掘金·日新计划

    使用 mysqldump 备份 MySQL

    • 125
    • 1
    • 评论
  • 郭东东

    4年前

    面试

    中高级前端大厂面试秘籍,为你保驾护航金三银四,直通大厂(上)

    • 66.6w
    • 7114
    • 496
  • 随风而逝_风逝

    3年前

    面试Vue.js

    30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)

    • 64.9w
    • 8162
    • 289
  • zed

    2年前

    MySQL

    MySQL常用备份策略详解 —— mysqldump、mysqlpump 和 Xtrabackup

    • 1583
    • 3
    • 评论
  • 程序员老鱼

    4月前

    掘金·日新计划ChatGPTOpenAI

    ChatGPT保姆级教程,一分钟学会使用ChatGPT!

    • 69.4w
    • 459
    • 420
  • vortesnail

    1年前

    前端面试

    做了一份前端面试复习计划,保熟~

    • 50.3w
    • 8789
    • 468
  • Heartsuit创作等级LV.4

    私信

    获得点赞  203

    文章被阅读  83,788


    相关文章

    全栈开发之前端脚手架:Vue3.0快速集成ElementPlus,Axios,Echarts

    28点赞

     

     · 

     

    7评论

    导出文件:使用Hutool导出数据为Excel文件

    10点赞

     

     · 

     

    1评论

    关于Nginx,在日常工作中你可能用到的操作就这些了

    35点赞

     

     · 

     

    1评论

    全栈开发之Quartz分布式定时任务调度集群

    18点赞

     

     · 

     

    8评论

    全栈开发之后端脚手架:SpringBoot集成MybatisPlus代码生成,分页,雪花算法,统一响应,异常拦截,Swagger3接口文档

    34点赞

     

     · 

     

    4评论

    限时领掘金会员



    登录掘金后可立即获得以下权益:

    • 免费试学课程
    • 收藏有用文章
    • 查阅浏览足迹
    • 订阅优质专栏
    • 体验签到抽奖
    • 提升成长等级

    首次使用?

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

    872

    背景

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

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

    分析

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

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

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

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

    解决

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

    javascript
    复制代码
    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在备份的过程中每次只取一行数据,而不是把所有行都缓存到内存里,这主要考虑了服务器内存限制,以防备份失败。

    css
    复制代码
    mysqldump -hhost -uroot -ppassword --single-transaction --quick dbname > /opt/backup.sql

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

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


    If you have any questions or any bugs are found, please feel free to contact me.

    Your comments and suggestions are welcome!

    本文已参与「新人创作礼」活动,一起开启掘金创作之路。

    标签:
    文章被收录于专栏:
    cover
    数据库
    记录数据库相关文章,包括关系型、非关系型、时序数据库等
    cover
    服务器运维
    记录服务器运维以及线上问题处理流程
    相关小册
    「Nacos 核心源码精讲」封面
    Nacos 核心源码精讲
    IT贱男创作等级LV.2
    VIP.4 融会贯通
    798购买
    ¥24.95
    ¥49.9
    首单券后价
    「从零开发企业级 Go 应用」封面
    从零开发企业级 Go 应用
    孔令飞
    1101购买
    ¥24.95
    ¥49.9
    首单券后价
    评论
    看完啦,
    登录
    分享一下感受吧~
    相关推荐
  • 登录掘金后可立即获得以下权益:
    • 免费试学课程
    • 收藏有用文章
    • 查阅浏览足迹
    • 订阅优质专栏
    • 体验签到抽奖
    • 提升成长等级
    首次使用?

    点我注册点我注册

    「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
    关注作者
    【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论