使用 Galera Cluster 而不是常规的 Master/Slave Replication 有什么缺点?Galera 的 0 从延迟时间、同步复制和无单点故障看起来很吸引人,那为什么 Galera 集群不常见呢?
我经常遇到列是varchar(255),所以大概这是各种约定。255 是 2^8 - 1。那么 2^n - 1 的长度有什么“神奇”之处吗?或者只是专门255?某些特定varchar长度是否有性能或存储优化优势?或者这只是不再适用于当前版本的 MariaDB 和 MySQL 的旧智慧?
用例:测量创建给定数量的图像。对于每张图像,我们需要存储一小组质量指标(浮点数、双精度数)以及图像整数 [1 ...N]、时间戳和一个或两个外键值。然后应该在 Web 应用程序 (PHP) 中“实时”绘制它以供用户评估。
每个 Web 客户端每 5 秒轮询一次数据库。理想情况下,每组质量指标的存储 + 检索应该花费 < 2 秒(大约)。在最坏的情况下,可能有大约 30 个同时进行的 Web 客户端轮询,并且可能同时写入大约 10 个测量值,从而导致大约 30 次的写入突发。每秒1000组质量指标。
在编程语言中,这类数据可能会存储在数组或列表中。由于我不知道在 MariaDB / MySQL 世界中有任何类似的东西,我只是使用一个常规的 InnoDB 表,上面提到的每个值都有一列。这已经有 90 多万行,预计在未来几个月会增长得更快。
InnoDB 总体上是最好的存储引擎,还是我应该考虑其他?最好的做法是在一段时间后存档数据,也许是在处理完所有测量图像后?它会帮助启用压缩,还是会对性能产生非常负面的影响?
我的表结构面临问题:
创建表`My_Table_Name1`( `twitter_id_str` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `twitter_screen_name` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 唯一键`twitter_id_str`(`twitter_id_str`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
对于数据库,我也有相同的字符集和排序规则:
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
我正在尝试在此表中插入一个表情符号:
insert into My_Table_Name1 values("2","")
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误:
错误代码:1366。不正确的字符串值:'\xF0\x9F\x98\x80' 列 'twitter_screen_name' 在第 1 行 0.00027 秒
如何解决这个问题?
提前致谢。
每次我重新启动 Mariadb 时,我的 max_connections 都会设置为 151,而在 my.cnf 中,我会设置为 300。为什么会发生这种情况?
尝试创建 EXCHANGE 表时失败:
CREATE TABLE BOOK
(PKACC_NO VARCHAR (20) PRIMARY KEY,
TITLE VARCHAR (50),
AUTHOR VARCHAR (50),
PUBLISHER VARCHAR (50),
EDITION INTEGER (4),
PRICE INTEGER (10));
CREATE TABLE MEMBER
(PKMEMBER_ID VARCHAR (20) PRIMARY KEY,
NAME VARCHAR (50),
TYPE VARCHAR (10),
CONTACT_NO BIGINT (10),
ADHAAR_NO BIGINT(12),
LAST_VISIT DATE );
CREATE TABLE STAFF
(PKSTAFF_ID VARCHAR (20),
NAME VARCHAR(50),
ADHAAR_NO BIGINT (12),
CONTACT_NO BIGINT(10) );
CREATE TABLE EXCHANGE
(TRANSACTION_ID VARCHAR(20) PRIMARY KEY,
FK1ACC_NO VARCHAR(20),
FK2MEMBER_ID VARCHAR (20),
FK3STAFF_ID VARCHAR(20),
DATE_OF_ISSUE DATE,
DATE_OF_RETURN DATE, …Run Code Online (Sandbox Code Playgroud) 我目前正在维护一个具有三个节点的 innodb 集群。它运行良好,但有时会出现一个节点,MISSING然后我必须将其重新上线。
问题是我插入了一个没有主键的表。然后一个节点失败了。当我想将故障节点重新加入集群时,它说它无法加入,因为有一个没有主键的表。我更改了集群中的表以为其提供主键,但故障节点仍然抱怨相同。所以我删除了故障节点中的表并期望它会重建该表。
现在它说
ERROR: Group Replication join failed.
ERROR: Error joining instance to cluster: '192.168.123.45@3306' - Query failed. 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log.. Query: START group_replication (RuntimeError)
Run Code Online (Sandbox Code Playgroud)
在我运行 cluster.checkInstanceState('root@192.168.123.45:3306'); 后
The instance '192.168.123.45:3306' is invalid for the cluster.
The instance contains additional transactions in relation to the cluster.
{
"reason": "diverged",
"state": "error"
}
Run Code Online (Sandbox Code Playgroud)
我知道这是因为不同数据库中的状态不一致。但是我搜索了互联网,但没有关于如何解决 innodb 集群冲突的文档。任何意见将是有益的!
我ALTER TABLE在 MariaDB Galera Cluster 10.2 上的一张大桌子上做了一个,但等待一段时间后我改变了主意并试图终止连接。然而,MariaDB 说ERROR 1095 (HY000): You are not owner of thread 123即使我绝对是所有者。那么发生了什么?
mysql ×7
mariadb ×5
galera ×2
innodb ×1
mariadb-10.1 ×1
mysql-5.5 ×1
mysql-5.7 ×1
percona ×1
replication ×1