企业生产环境数据库备份锁表问题

在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

如有不当之处,请多多指教。

mysqldump参数详解:http://blog.51cto.com/13691477/2149675
MySQL锁知识:https://blog.csdn.net/mysteryhaohao/article/details/51669741

原文地址:http://blog.51cto.com/13691477/2149677

时间: 2024-10-11 04:17:25

企业生产环境数据库备份锁表问题的相关文章

企业生产环境不同业务,系统分区建议(自定义分区布局)

Linux系统对分区的要求 1.最少要有/分区 2.swap(交换分区)的作用:虚拟化内存,swap区分的大小=105*物理内存容量(mem<8G) 3.建议设置独立的/boot分区 #linux引导分区,存放系统引导文件,如果linux内核等,所有文件大小一般只有十几M,因此,该分区设置100-200M 企业生产环境不同业务linux系统分区建议(自定义分区布局) 1.常规分区方案 /分区:剩余硬盘大小 swap分区:内存的1.5倍(mem>8G) /boot分区:100M 2.DB及存储

(转)企业生产环境用户权限集中管理方案案例

https://wenku.baidu.com/view/0acd163d4a73f242336c1eb91a37f111f1850d94.html http://blog.51cto.com/youngboy/1660551 https://www.cnblogs.com/redball/articles/6992236.html 企业生产环境用户权限集中管理方案案例 1问题现状 当前我们公司服务器上百台,各个服务器上需要管理的人很多(开发+运维+架构+DBA+产品+市场),在大家同时登录Li

企业生产环境NFS客户端挂载建议(八)

企业生产环境NFS客户端挂载建议: 一.把NFS rpc服务的启动命令和挂载命令均放到/etc/rc.local,然后通过nagios监控软件监控开机后的挂载情况.如: [[email protected] ~]# cat /etc/rc.local #!/bin/sh # # Thisscript will be executed *after* all the other init scripts. # You canput your own initialization stuff in 

ORACLE查询数据库的锁表情况

  查询数据库的锁表情况语句如下: SELECT p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name FROM v$process p,v$session a, v$locked_object b,all_objects c WHERE p.addr=a.paddr AND a.process=b.process AND c.object_id=b.object_id 如果表因为某些情况出现死

理解Docker(6):若干企业生产环境中的容器网络方案

本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 (6)若干企业生产环境中的容器网络方案 Docker 在早期只有单机上的网络解决方案,在 1.19 版本引入了原生的 overlay 网络解决方案,但是它的性能损耗较大,可能无法适应一些生产环

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

企业生产环境不同业务的Linux分区方案 1.常规分区 /boot   100M swap    内存的1.5倍(若内存大于16G,swap分配8-16G即可) /           剩余所有硬盘空间 2.DB及存储(有大量的重要数据) /boot   100M swap    内存的1.5倍(若内存大于16G,swap分配8-16G即可) /           50-200G /data    剩余所有硬盘空间 注:一般有重要数据的业务,要尽可能的把数据所在的分区单独分出来. 3.门户网站

企业生产环境shell脚本案例分享

1)Mysql数据库备份脚本(完整备份+异地备份) 一般Mysql数据库备份会采用在MYSQL从库上执行全量备份+增量备份方式.在从库备份避免Mysql主库备份的时候锁表造成业务影响. #!/bin/bash set -e #当脚本有错误时,便停止执行脚本 #备份的数据库名 DATABASES=( "magedu01" "magedu02" ) USER="root" PASSWORD="dbpwd123" MAIL=&quo

zabbix进行数据库备份以及表分区

由于测试环境上面使用的zabbix服务器配置比较低,经常会遇到性能瓶颈(主要是数据库和磁盘I/O等),于是倒逼我使用了一些方式来缓解这些问题. 主要是以前使用的那个备份数据库的脚本是对zabbix数据库进行全备的,使用的又是mysql自带的工具mysqldump,当数据量大了之后进行全备所花的时间比较长,这样将会造成数据库的锁读...从而使zabbix服务以为mysql死掉了,产生一大堆的报警. 后来发现原来造成数据库数据量大量增加的是zabbix数据库中的一些存储数据的大表导致的.于是备份数据

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

携程事故,是偶然还是必然?老板,你公司的服务器权限需要重规划了!! 当前问题: 进入公司以后,发现一个比较严重的问题,那就是服务器上的管理人员太多,其中包括开发.运维.架构.DBA.产品.市场,在大家登陆使用Linux服务器的时候,不同岗位的员工水准不同,因此导致操作很不规范,基本上都是在使用root权限,导致的问题是:有时候文件莫名的丢失,以及服务器的安全存在很大的不稳定性和操作安全隐患,还查不出是谁干的,据调查企业服务器环境,50%的安全事故来源于内部,也就是员工的误操作导致.携程就是一个很