MySQL备份文件导入GreatSQL MGR环境为什么出现大量报错?
MySQL备份文件导入GreatSQL MGR环境为什么出现大量报错?
- 问题信息
 
1.1 问题描述
客户计划将数据库由 MySQL 迁移到 GreatSQL,为客户安装好3节点 GreatSQL MGR 环境后,客户将使用mysqldump从MySQL8中导出的数据导入到GreatSQL中,导入过程中,出现大量报错信息 ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin. 
客户问:备份文件能正常导入 MySQL 数据库,为什么导入 GreatSQL 会有这么多报错信息?
我回复客户:MGR 环境有一些使用限制,我先检查下导入数据。
- 问题分析及处理
 
MGR 要求表是 InnoDB 类型 ,首先检查了表的存储引擎。
2.1 检查存储引擎
greatsql> SELECT TABLE_TYPE,ENGINE,count(*) FROM
information_schema.tables WHERE table_schema='jcdb' GROUP BY TABLE_TYPE,ENGINE;
+------------+--------+----------+
| TABLE_TYPE | ENGINE | count(*) |
+------------+--------+----------+
| BASE TABLE | InnoDB |     1355 |
| BASE TABLE | MyISAM |        1 |
| BASE TABLE | MEMORY |        1 |
| VIEW       | NULL   |        3 |
+------------+--------+----------+
4 rows in set (0.02 sec)
检查发现导入的数据存在 MyISAM 和 MEMORY 存储引擎。在MGR环境,能创建非 InnoDB 存储引擎的表,但插入数据时会报错。
greatsql> CREATE TABLE t0(id int primary key) ENGINE=MEMORY;
Query OK, 0 rows affected (0.03 sec)
greatsql> INSERT INTO  t0 SELECT 1;
ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin.
2.2 表主键检查
MGR要求表有主键,检查数据库中的表,是不是都有主键。检查发现有一部分表没有设置主键。
greatsql> SELECT count(table_name)
FROM information_schema.tables 
WHERE table_schema = 'jcdb' 
AND table_name NOT IN (
    SELECT table_name 
    FROM information_schema.table_constraints 
    WHERE constraint_type = 'PRIMARY KEY'
);
+-------------------+
| count(table_name) |
+-------------------+
|                67 |
+-------------------+
1 row in set (0.10 sec)
2.3 问题处理
1、对于非InnoDB 存储引擎的表,修改建表语句,将存储引擎修改为InnoDB
$ grep MyISAM jcdb.sql 
) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统日志表' ROW_FORMAT = DYNAMIC;
$ sed -i 's/ENGINE = MyISAM/ENGINE = InnoDB/g' jcdb.sql
$ grep MyISAM jcsh.sql 
2、对于没有主键的表通过设置系统变量``sql_generate_invisible_primary_key =on` 解决
从 8.0.30开始,当sql_generate_invisible_primary_key=ON时 ,创建InnoDB表时,如果没有显式指定主键的情况下,GreatSQL支持生成不可见主键,即 GreatSQL服务会自动添加一个生成的不可见主键(GIPK)到表中。
另外:从 8.0.13开始,新增sql_require_primary_key参数(建议全局设置选项 sql_require_primary_key=ON),其默认值为OFF,设置为ON时,建表时需要显示指定主键。
-- 主键相关的参数
greatsql> SHOW variables LIKE '%primary%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| sql_generate_invisible_primary_key | OFF   |
| sql_require_primary_key            | OFF   |
+------------------------------------+-------+
2 rows in set (0.00 sec)
greatsql> SET  sql_require_primary_key=on;
Query OK, 0 rows affected (0.00 sec)
greatsql> CREATE TABLE t01(id int) ;
ERROR 3750 (HY000): Unable to create or change a table without a primary key, when the system variable 'sql_require_primary_key' is set. Add a primary key to the table or unset this variable to avoid this message. Note that tables without a primary key can cause performance problems in row-based replication, so please consult your DBA before changing this setting.
greatsql> SET sql_require_primary_key=OFF;
greatsql> SET sql_generate_invisible_primary_key=ON;
Query OK, 0 rows affected (0.00 sec)
greatsql> CREATE TABLE auto_1 (c1 VARCHAR(50), c2 INT);
Query OK, 0 rows affected (0.26 sec)
greatsql> SHOW CREATE TABLE auto_1\G;
*************************** 1. row ***************************
       Table: auto_1
Create Table: CREATE TABLE `auto_1` (
  `my_row_id` bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */,
  `c1` varchar(50) DEFAULT NULL,
  `c2` int DEFAULT NULL,
  PRIMARY KEY (`my_row_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
ERROR: 
No query specified
greatsql> INSERT INTO  auto_1(c1,c2) VALUES('aaa',1);
Query OK, 1 row affected (0.04 sec)
greatsql> INSERT INTO auto_1(c1,c2) VALUES('aabb',10);
Query OK, 1 row affected (0.03 sec)
greatsql> SELECT * FROM auto_1;
+------+------+
| c1   | c2   |
+------+------+
| aaa  |    1 |
| aabb |   10 |
+------+------+
2 rows in set (0.00 sec)
-- 默认情况下,SELECT 的时候不会显示不可见主键
将 mysqldump 文件的非 InnoDB 存储引擎表修改为 InnoDB 存储引擎,并且设置sql_generate_invisible_primary_key=ON后,重新导入数据,数据可以正常导入到新的数据库中。
3.MGR使用限制
3.1 MGR基础要求
1、InnoDB Storage Engine.
表必须使用InnoDB存储引擎。
2、Primary Keys.
每个表必须有一个已定义的主键,或与主键等价的非空唯一键。
3、Network Performance.
网络延迟和网络带宽都会影响组复制的性能和稳定性。
3.2 MGR数据库实例配置要求
运行MGR的实例必须满足以下要求:
1、Unique Server Identifier.
同一个复制组,server_id唯一
2、Binary Log Active.
打开log_bin: 启用二进制日志,MySQL 8.0默认设置
3、Replica Updates
设置log_replica_updates=ON (from MySQL 8.0.26) or log_slave_updates=ON(before MySQL 8.0.26)MySQL 8.0默认设置
4、Binary Log Row Format.
二进制日志行格式为row模式: binlog_format=row MySQL 8.0默认设置
5、Binary Log Checksums Off
关闭二进制日志校验和:
binlog_checksum=NONE,MySQL 8.0.20
binlog_checksum=CRC32,MySQL 8.0.21+ 默认设置
6、Global Transaction Identifiers On
开启全局事务标识符: 设置gtid_mode=ON和enforce_gtid_consistency=ON
7、Replication Information Repositories
复制信息存储库设置: 设置master_info_repository=TABLE和 relay_log_info_repository=TABLE,这个设置在MySQL 8是默认设置。
8、Transaction Write Set Extraction
事务写集提取transaction_write_set_extraction=XXHASH64在MySQL中 从MySQL 8.0.26开始,这个设置是默认的。
9、Default Table Encryption
默认表加密:default_table_encryption=OFF,在所有组成员上设置相同的值。默认值为OFF
10、 Lower Case Table Names
表名大小写设置:lower_case_table_names=1,表名不区分大小写,对所有组成员使用相同的值。 不同的平台有不同的默认值
- 
  
Default Value (macOS)=2
 - 
  
Default Value (Unix)=0
 - 
  
Default Value (Windows)=1
 
11、Binary Log Dependency Tracking
binlog_transaction_dependency_tracking=WRITESET
12、Multithreaded Appliers
启用多线程复制,组复制成员可以配置为 多线程复制,使事务可以并行应用。从MySQL 8.0.27开始,所有的副本都是 默认配置为多线程。
4.参考文章
- 
  
https://dev.mysql.com/doc/refman/8.0/en/group-replication-requirements.html
 - 
  
https://dev.mysql.com/doc/refman/8.0/en/create-table-gipks.html
 
Enjoy GreatSQL :)
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。
相关链接: GreatSQL社区 Gitee GitHub Bilibili
GreatSQL社区:
社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html
社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html
(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)
技术交流群:
微信&QQ群:
QQ群:533341697
微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。
关注公众号
					低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 
							
								
								    上一篇
								    
								
								Apache Doris & SelectDB 技术能力全面解析
Apache Doris 是一款开源的 MPP 数据库,以其优异的分析性能著称,被各行各业广泛应用在实时数据分析、湖仓融合分析、日志与可观测性分析、湖仓构建等场景。Apache Doris 目前被 5000 多家中大型的企业深度应用在生产系统中,包含互联网、金融、制造、电信、能源、物流、政务等行业。目前项目已在 GitHub 获得超过 13000 Star,汇集 600 多名社区开发者,月度活跃贡献者数量连续数月位居全球大数据开源项目榜首,成为全球大数据领域最活跃的开源项目之一。 SelectDB 是北京飞轮数据科技有限公司基于 Apache Doris 研发的现代化实时数据仓库,提供包括面向私有化部署的 SelectDB Enterprise 和云原生存算分离的 SelectDB Cloud 云数仓服务。SelectDB 兼容 Apache Doris 的所有能力和接口,相比开源自建在安全、稳定、资源弹性等方面有明显优势。本文将对 Doris & SelectDB 适合的分析场景和技术能力进行概述解析。 1. Doris & SelectDB 典型分析场景 Selec...
 - 
							
								
								    下一篇
								    
								
								【直播预告】十年磨一剑,看华为如何内源
2014 年,华为启动了其内源计划,强调平台代码开放,强调代码可见可查可参考。 作为研发内部提升跨部门开发效率的一种有力手段,内源计划帮助了当时华为内部研发平台线和产品线协同不够的问题,要求 “平台要从封闭走向开放,通过内部开源释放生产力和创造力”,成为华为研发方法论 IPD 的一部分,为中国大型企业采用 InnerSource 树立了典范。 4月13日晚,COPU 常务副秘书长谭中意将做客开源中国《技术领航》直播间,与华为内源办公室负责人周代兵展开对话,聊一聊华为内源的发展历程,采用了那些有效措施推动内源落地,以及如何量化内源收益等话题。 微信扫码,预约直播: 《技术领航》是开源中国 OSCHINA 推出的一档直播栏目,旨在为开源软件、商业产品、前沿技术、知名品牌活动等各类项目提供一个展示平台,每周五晚上开播。栏目邀请项目的创始人、核心团队成员或资深用户作为嘉宾,通过路演式直播分享项目的亮点和经验,有助于提高项目的知名度,吸引更多的用户和开发者关注。 如果你手上也有好的项目,想要跟同行交流分享,欢迎联系我,栏目随时开放~
 
相关文章
文章评论
共有0条评论来说两句吧...

			
				
				
				
				
				
				
				
微信收款码
支付宝收款码