MySQL常⽤操作之备份表结构及表数据
MySQL常⽤操作之备份表结构及表数据
场景描述
简介
⽣产上进⾏数据变更时,经常担⼼会对已有数据误操作,⼀般会先进⾏备份,这⾥记录⼀次MySQL备份失败解决过程。
报错信息
描述
-- 备份语句
CREATE TABLE新表SELECT*FROM旧表
-- 这种⽅法会将oldtable中所有的内容都拷贝过来,当然我们可以⽤delete from newtable;来删除。
-
- 不过这种⽅法的⼀个最不好的地⽅就是新表中没有了旧表的primary key、Extra(auto_increment)等属性。需要⾃⼰⽤"alter"添加,⽽且容易搞错。
Error Code: 1786 Statement violates GTID consistency: SELECT.
原因分析
MySQL 5.6及以上版本导致
这是因为在5.6及以上的版本内,开启了 enforce_gtid_consistency=true 功能导致的,MySQL官⽅解释说当启⽤
enforce_gtid_consistency 功能的时候,
MySQL只允许能够保障事务安全,并且能够被⽇志记录的SQL语句被执⾏,像create table … select 和 create temporarytable语句,以及同时更新事务表和⾮事务表的SQL语句或事务都不允许执⾏。
解决⽅案
⽅案⼀
修改数据配置
-- 执⾏sql脚本mysql操作官方文档
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=off;
-- 或修改配置⽂件
ENFORCE_GTID_CONSISTENCY =off;
⽅案⼆
-- 将 create table xxx as select 的⽅式拆分成两部分。
create table xxxx like test;
insert into xxxx select*from test;
参考链接
sql创建备份表和复制数据到备份表
解决 mysql 报错: Error Code: 1786 Statement violates GTID consistency: CREATE TABLE … SELECT.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。