
Mysql單表備份有很多方式,對于數(shù)據(jù)量比較大的表,可以使用mysqldump
小表通常使用如下語句就行了。
create table A as select * from B
在一次備份中出現(xiàn)如下錯誤。
mysql> create tables deptmember_bak as select * from deptmember;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'tables deptmember_bak as select * from deptmember' at line 1
查詢官方資料,原因是MySQL 5.6.7及更高的版本,開啟了enforce_gtid_consistency=true 功能導(dǎo)致的,MySQL官方解釋說當(dāng)啟用 enforce_gtid_consistency 功能的時候,MySQL只允許能夠保障事務(wù)安全,并且能夠被日志記錄的SQL語句被執(zhí)行,像create table … select 和 create temporarytable語句,以及同時更新事務(wù)表和非事務(wù)表的SQL語句或事務(wù)都不允許執(zhí)行,所以默認(rèn)關(guān)閉掉,需要開啟時再啟用
查看環(huán)境enforce_gtid_consistency參數(shù)為開啟狀態(tài)。
mysql> show variables like 'ENFORCE_GTID_CONSISTENCY';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| enforce_gtid_consistency | ON |
+--------------------------+-------+
1 row in set (0.01 sec)
下面提供了2種方案,可以根據(jù)情況自由選擇
一、方法一:修改數(shù)據(jù)庫參數(shù)
解決辦法關(guān)閉GTID模式
mysql配置my.cnf里面修改參數(shù)如下
gtid_mode = OFF
enforce_gtid_consistency = OFF
重啟mysql再次查看已經(jīng)生效,再次執(zhí)行備份就不會報錯了
mysql> show variables like '%gtid_mode%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode | OFF |
+---------------+-------+
1 row in set (0.01 sec)
mysql> show variables like '%enforce_gtid_consistency%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| enforce_gtid_consistency | OFF |
+--------------------------+-------+
1 row in set (0.01 sec)
二、方法二:分步操作
方法二采用先復(fù)制目標(biāo)表結(jié)構(gòu),然后插入數(shù)據(jù)的方式,這種方法的好處是不用重啟數(shù)據(jù)庫
mysql> create table deptmember_bak like deptmember;
Query OK, 0 rows affected (0.11 sec)
mysql> insert into deptmember_bak select * from deptmember;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0