在不锁定表的情况下运行MySQLDump

我想将实时生产数据库复制到本地开发数据库中。 有没有一种方法可以不锁定生产数据库?

我目前正在使用:

mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1

但是它在运行时锁定每个表。


#1楼

    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db

#2楼

要转储大表,应将--single-transaction选项与--quick结合使用。

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction


#3楼

--lock-tables=false选项有效吗?

根据手册页 ,如果要转储InnoDB表,则可以使用--single-transaction选项:

--lock-tables, -l

Lock all tables before dumping them. The tables are locked with READ
LOCAL to allow concurrent inserts in the case of MyISAM tables. For
transactional tables such as InnoDB and BDB, --single-transaction is
a much better option, because it does not need to lock the tables at
all.

对于innodb DB

mysqldump --single-transaction=TRUE -u username -p DB

#4楼

老实说,我将为此设置复制,就像您不锁定表一样,将从转储中获取不一致的数据。

如果转储需要更长的时间,则已经转储的表可能会与仅将要转储的某些表一起更改。

因此,要么锁定表,要么使用复制。


#5楼

答案因您使用的存储引擎而异。 理想的情况是使用InnoDB。 在这种情况下,您可以使用--single-transaction标志,这将在转储开始时为您提供数据库的一致快照。


#6楼

与那个说他迟到原始答案的人相比,这差不多晚了,但是在我的情况下(Windows 7上通过WAMP的MySQL),我不得不使用:

--skip-lock-tables

#7楼

这个年龄已经来不及了,但对正在搜索该主题的任何人都有利。 如果您不是innoDB,并且您不担心在转储时锁定,则只需使用以下选项:

--lock-tables=false

#8楼

对于InnoDB表,请使用标志--single-transaction

它会在发出BEGIN时转储数据库的一致状态,而不会阻止任何应用程序

MySQL DOCS

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction


#9楼

由于这些方法都不适合我,因此我做了一个:

mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]

它将同时排除LOCK TABLE <x>UNLOCK TABLES命令。

注意:希望您的数据中不包含该字符串!


#10楼

--skip-add-locks对我有帮助


#11楼

另一个较晚的答案:

如果您尝试制作服务器数据库的热副本(在Linux环境中),并且所有表的数据库引擎均为MyISAM, 则应使用mysqlhotcopy

根据文档:

它使用FLUSH TABLES,LOCK TABLES和cp或scp进行数据库备份。 这是备份数据库或单个表的快速方法,但是只能在数据库目录所在的同一台计算机上运行。 mysqlhotcopy仅适用于备份MyISAM和ARCHIVE表。

LOCK TABLES时间取决于服务器可以复制MySQL文件的时间(不进行转储)。


#12楼

今天,即使我也遇到了同样的问题,但是我无权访问命令行。所以我在记事本编辑器中打开了sql文件,并从表格的下面删除了

LOCK TABLES `yourtable name` WRITE;

然后我导入了我的开发环境。工作正常。 希望对大家有帮助


#13楼

由于https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables

某些选项(例如--opt(默认启用))会自动启用--lock-tables。 如果要覆盖此选项,请在选项列表末尾使用--skip-lock-tables。


#14楼

使用MySQL Workbench时,在“数据导出”中,单击“高级选项”,然后取消选中“锁定表”选项。

在此处输入图片说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值