MySQL备份文件导入GreatSQL MGR环境为什么出现大量报错? ...

打印 上一主题 下一主题

主题 1700|帖子 1700|积分 5100

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
MySQL备份文件导入GreatSQL MGR环境为什么出现大量报错?

1. 问题信息

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 环境有一些使用限定,我先查抄下导入数据。
2. 问题分析及处理

MGR 要求表是 InnoDB 范例 ,起首查抄了表的存储引擎。
2.1 查抄存储引擎
  1. greatsql> SELECT TABLE_TYPE,ENGINE,count(*) FROM
  2. information_schema.tables WHERE table_schema='jcdb' GROUP BY TABLE_TYPE,ENGINE;
  3. +------------+--------+----------+
  4. | TABLE_TYPE | ENGINE | count(*) |
  5. +------------+--------+----------+
  6. | BASE TABLE | InnoDB |     1355 |
  7. | BASE TABLE | MyISAM |        1 |
  8. | BASE TABLE | MEMORY |        1 |
  9. | VIEW       | NULL   |        3 |
  10. +------------+--------+----------+
  11. 4 rows in set (0.02 sec)
复制代码
查抄发现导入的数据存在 MyISAM 和 MEMORY 存储引擎。在MGR环境,能创建非 InnoDB 存储引擎的表,但插入数据时会报错。
  1. greatsql> CREATE TABLE t0(id int primary key) ENGINE=MEMORY;
  2. Query OK, 0 rows affected (0.03 sec)
  3. greatsql> INSERT INTO  t0 SELECT 1;
  4. ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin.
复制代码
2.2 表主键查抄

MGR要求表有主键,查抄数据库中的表,是不是都有主键。查抄发现有一部分表没有设置主键。
  1. greatsql> SELECT count(table_name)
  2. FROM information_schema.tables
  3. WHERE table_schema = 'jcdb'
  4. AND table_name NOT IN (
  5.     SELECT table_name
  6.     FROM information_schema.table_constraints
  7.     WHERE constraint_type = 'PRIMARY KEY'
  8. );
  9. +-------------------+
  10. | count(table_name) |
  11. +-------------------+
  12. |                67 |
  13. +-------------------+
  14. 1 row in set (0.10 sec)
复制代码
2.3 问题处理

1、对于非InnoDB 存储引擎的表,修改建表语句,将存储引擎修改为InnoDB
  1. $ grep MyISAM jcdb.sql
  2. ) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统日志表' ROW_FORMAT = DYNAMIC;
  3. $ sed -i 's/ENGINE = MyISAM/ENGINE = InnoDB/g' jcdb.sql
  4. $ 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时,建表时需要显示指定主键。
  1. -- 主键相关的参数
  2. greatsql> SHOW variables LIKE '%primary%';
  3. +------------------------------------+-------+
  4. | Variable_name                      | Value |
  5. +------------------------------------+-------+
  6. | sql_generate_invisible_primary_key | OFF   |
  7. | sql_require_primary_key            | OFF   |
  8. +------------------------------------+-------+
  9. 2 rows in set (0.00 sec)
  10. greatsql> SET  sql_require_primary_key=on;
  11. Query OK, 0 rows affected (0.00 sec)
  12. greatsql> CREATE TABLE t01(id int) ;
  13. 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.
  14. greatsql> SET sql_require_primary_key=OFF;
  15. greatsql> SET sql_generate_invisible_primary_key=ON;
  16. Query OK, 0 rows affected (0.00 sec)
  17. greatsql> CREATE TABLE auto_1 (c1 VARCHAR(50), c2 INT);
  18. Query OK, 0 rows affected (0.26 sec)
  19. greatsql> SHOW CREATE TABLE auto_1\G;
  20. *************************** 1. row ***************************
  21.        Table: auto_1
  22. Create Table: CREATE TABLE `auto_1` (
  23.   `my_row_id` bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */,
  24.   `c1` varchar(50) DEFAULT NULL,
  25.   `c2` int DEFAULT NULL,
  26.   PRIMARY KEY (`my_row_id`)
  27. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
  28. 1 row in set (0.00 sec)
  29. ERROR:
  30. No query specified
  31. greatsql> INSERT INTO  auto_1(c1,c2) VALUES('aaa',1);
  32. Query OK, 1 row affected (0.04 sec)
  33. greatsql> INSERT INTO auto_1(c1,c2) VALUES('aabb',10);
  34. Query OK, 1 row affected (0.03 sec)
  35. greatsql> SELECT * FROM auto_1;
  36. +------+------+
  37. | c1   | c2   |
  38. +------+------+
  39. | aaa  |    1 |
  40. | aabb |   10 |
  41. +------+------+
  42. 2 rows in set (0.00 sec)
  43. -- 默认情况下,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.参考文章


Enjoy GreatSQL
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表