在MySQL数据库场景,使用mysqldump命令备份时,我们会遇到一个锁表的问题?如果进行锁表了,在备份期间用户就无法访问数,若是备份时长几个小时,那么就表示几个小时内,用户都无法访问数据,会对业务造成很大影响;如果不锁表,又会导致备份的数据不一致,因为在备份的过程中,有可能会有数据写入,这样无法保证备份后的备份文件中的数据是你想要的某个时间点的数据。

如何解决锁表问题?
关于MySQL备份时,是否需要锁表,这要根据公司的业务场景进行分析。
案例1:
某金融咨询公司,公司客户都是以select为主,即查询为主,公司的数据几乎全是公司内部导入,并且公司数据库引擎是混合引擎,MyIsam和Innodb两种存储引擎的表。
对于这种业务场景,可以不进行锁表,直接备份数据库即可,然后再通过binlog日志来保证数据的一致性(增量备份)
因为MySQL默认是开启--lock-tables参数的,若不需要锁表,则要关闭此参数--skip-lock-tables。
在用LOCK TABLES给表显式加表锁时,必须同时取得所有涉及到表的锁,也就是说,在执行LOCK TABLES后,只能访问显式加锁的这些表,不能访问未加锁的表;同时,如果加的是读锁,那么只能执行锁表的查询操作,MyISAM总是一次获得SQL语句所需要的全部锁。这也正是MyISAM表不会出现死锁(Deadlock Free)的原因。

#混合引擎和MyIsam引擎
mysqldump -uroot -p -A -B -F -R --skip-lock-tables --events|gzip >/tmp/all_$(date +%F).sql.gz
案例2:
在用户对数据更新频繁的业务场景中,使用mysqldump命令备份MySQL数据库,可使用锁表的功能了保证数据的一致性;但这样带来了一个问题,在备份锁表的期间,用户无法正常访问和更新数据。
对于这种场景,建议在业务低谷的时候进行备份,正所谓月黑风高杀人夜啊。
另一种更好的解决办法就是做主从复制,然后在从库上进行备份,这样子锁表产生的影响就会降得更低。
网上也有网友说使用--lock-tables只读锁表功能(即不能更新插入数据,只能读取数据锁表)来进行备份,然后通过binlog日志来达到数据一致性。这对于有可能有大量数据插入的场景,效果也不是很佳。
myisam引擎企业生产备份命令(适合所有引擎或混合引擎):
由于MyISAM引擎为表级锁,因此,在备份时需要防止在备份期间数据写入而导致不一致, 所以,在备份时使用--lock-all-tables(-x)锁表。

mysqldump -uroot -p -A -B -F -R -x -events|gzip >/tmp/all_$(date +%F).sql.gz
innodb引擎企业生产备份名:
InnoDB引擎为行锁,因此,备份时可以不对数据库加锁的操作,可以加选项--single-transaction进行备份。它有一些要求:只能是 innodb 引擎;导出的过程中,不能有任何人执行 alter table, drop table, rename table, truncate table等DDL语句。实际上DDL会被事务所阻塞,因为事务持有表的metadata lock 的共享锁,而DDL会申请metadata lock的互斥锁,所以阻塞了。

mysqldump -uroot -p -A -B -F -R --events --single-transaction|gzip >/tmp/all_$(date +%F).sql.gz

转载于:https://blog.51cto.com/13728740/2314223

企业生产环境数据库备份锁表问题相关推荐

  1. 企业生产环境利用ATIES对服务器进行远程备份

    服务器是企业网络的核心应用设备,制定并执行服务器备份策略是管理员必须要做的事情,当然也是一项枯燥而劳力的工作.尤其在大型局域网环境中,服务器遍布各处,甚至各地,如何实现服务器的远程灵活备份呢?这里向大 ...

  2. Linux企业生产环境用户权限集中管理项目方案案例

    企业生产环境用户权限集中管理项目方案案例: 1 问题现状 当前我们公司里服务器上百台,各个服务器上的管理人员很多(开发+运维+架构+DBA+产品+市场),在大家登录使用Linux服务器时,不同职能的员 ...

  3. 企业生产环境不同业务的Linux分区方案

    企业生产环境不同业务的Linux分区方案 1.常规分区 /boot   100M swap    内存的1.5倍(若内存大于16G,swap分配8-16G即可) /           剩余所有硬盘空 ...

  4. ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL、DBA必备)

    ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL.DBA必备) 文章目录 ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL.DBA必备) 前 ...

  5. sql server数据库备份单个表的结构和数据生成脚本

    1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...

  6. Mysql数据库备份——数据库备份和表备份

    Mysql中数据备份使用的命令是:mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中.mysqldump命令的 工作原理很简单.它先查出需要备份的表 ...

  7. mysql数据库备份与表备份

    一.Mysql中的数据备份: Mysql中数据备份使用的命令是:mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中.mysqldump命令的 工作原 ...

  8. mysql 备份表和数据_Mysql数据库备份(一)------数据库备份和表备份

    一.Mysql中的数据备份: Mysql中数据备份使用的命令是:mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中.mysqldump命令的 工作原 ...

  9. Mysql数据库备份(一)------数据库备份和表备份

    一.Mysql中的数据备份: Mysql中数据备份使用的命令是:mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中.mysqldump命令的 工作原 ...

最新文章

  1. Python进程学习笔记-进程创建fork
  2. button按钮怎么实现超链接
  3. MySQL高级 - NULL值的判定
  4. 推荐一个免费的在线图片工具网站
  5. matlab中select,[转载]MATLAB阈值获取函数ddencmp、thselect、wbmpen和w
  6. 匹配除中文和空格意外的正则写法
  7. 你真的会玩SQL吗?你所不知道的 数据聚合
  8. 九度OJ-1525 子串逆序打印
  9. 一步一步 ITextSharp Anchor Image Chapter Section使用
  10. 거든---表示条件,后接祈使,劝诱,意志语句
  11. 如果软件也玩凡尔赛文学,将如何对话?
  12. 私有云计算保密技术谁家靠谱?云宏CNware®虚拟化平台安全体系设计
  13. matlab数值计算习题解析,第3章MATLAB数值计算-习题
  14. 计算机谈歌曲简单,计算机应用基础公开课制作一首简单的MP3歌曲.ppt
  15. Retrofit(Okhttp)Dns解析服务器域名异常时尝试使用服务器IP访问
  16. linux 录制软件下载,Ubuntu下安装屏幕录像软件(SimpleScreenRecorder)
  17. 4kvideodownloader视频下载工具
  18. MCGS 根据时间实现动态密码进行登陆
  19. 神秘的程序员头像包 第二发
  20. 变量之间的相关性研究

热门文章

  1. java程序员年龄大了怎么办,互联网行业“中年”危机
  2. matlab 一元线性微分,怎样用matlab求一元线性函数极值
  3. android 调用wcf json,使用 JSONP
  4. php 监控nginx日志,nginx启用status监控服务器状态的方法详解
  5. form表单会跨域_form 表单跨域提交
  6. 在React的render方法中使用箭头函数
  7. c语言追加字符串_Redis源码解析二--简单动态字符串
  8. php7 电子书 下载,PHP 7: Real World Application Development
  9. oppo手机android是多,OPPO手机卡屏?教你三招轻松解决卡顿问题,大部分安卓都适用...
  10. 求解最大公因子(JAVA辗转相除法)、python的最大公因子,最小公倍数