转载: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!
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
标签:
文章被收录于专栏:
数据库
记录数据库相关文章,包括关系型、非关系型、时序数据库等
服务器运维
记录服务器运维以及线上问题处理流程
相关小册
Nacos 核心源码精讲
798购买
¥24.95
¥49.9
首单券后价
从零开发企业级 Go 应用
1101购买
¥24.95
¥49.9
首单券后价
评论
看完啦,
登录
分享一下感受吧~
相关推荐
4年前
8927
44评论
1年前
685
5评论
3年前
2685
3评论
2年前
3.7w
142
3年前
5.2w
847
1年前
逻辑备份:mysqldump vs物理备份:XtraBackup
1430
6评论
3年前
MySQL常用备份策略详解 —— mysqldump、mysqlpump 和 Xtrabackup
2607
111
5年前
2.7w
1552
1月前
125
1评论
4年前
中高级前端大厂面试秘籍,为你保驾护航金三银四,直通大厂(上)
66.6w
7114496
3年前
30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)
64.9w
8162289
2年前
MySQL常用备份策略详解 —— mysqldump、mysqlpump 和 Xtrabackup
1583
3评论
4月前
69.4w
459420
1年前
50.3w
8789468
相关文章
全栈开发之前端脚手架:Vue3.0快速集成ElementPlus,Axios,Echarts
·
7评论
导出文件:使用Hutool导出数据为Excel文件
10点赞
·
1评论
关于Nginx,在日常工作中你可能用到的操作就这些了
35点赞
·
1评论
全栈开发之Quartz分布式定时任务调度集群
18点赞
·
8评论
全栈开发之后端脚手架:SpringBoot集成MybatisPlus代码生成,分页,雪花算法,统一响应,异常拦截,Swagger3接口文档
34点赞
·
4评论

登录掘金后可立即获得以下权益:
免费试学课程
收藏有用文章
查阅浏览足迹
订阅优质专栏
体验签到抽奖
提升成长等级
首次使用?
mysqldump备份时导致所有数据表锁定,无法提供服务
背景
有接到用户反馈:系统页面卡住不动。。
这个问题发生在生产环境下数据库的每日备份过程中,一个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!
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
8927 - 44
评论
685 - 5
评论
3.7w - 14
2
5.2w - 84
7
2.7w - 155
2
125 - 1
评论
66.6w - 7114
496
64.9w - 8162
289
69.4w - 459
420
50.3w - 8789
468
- 免费试学课程
- 收藏有用文章
- 查阅浏览足迹
- 订阅优质专栏
- 体验签到抽奖
- 提升成长等级
点我注册点我注册




