我是 MySQL 世界的新手,对两者感到困惑。它们不是都提供高可用性和分片吗?
另外,WebScaleSQL 如何比较?
我想将我的数据库实例从 AWS RDS MySQL 迁移到 Aurora,但我对复制以及 Aurora 如何管理写入/读取操作有疑问。
我有我的应用程序,我想将写入操作与读取操作分开。我想创建一个仅用于写操作的主实例,而其他实例(只读副本)仅用于读操作。
问题就在这里,我在 AWS 文档上读到我需要在我的应用程序上进行这种分离,我认为或者我希望找到一种方法来做到这一点并对我的应用程序透明。我画了一个简单的模式,我必须做什么才能使用 Aurora(来自 AWS):
-----------------
| Application |
-----------------
| |
| writes |reads
| |
------------ ------------------
| Master | | Read Replica |
------------ ------------------
^ ^
|replication |
|____________|
Run Code Online (Sandbox Code Playgroud)
我需要 Master 始终保持写入操作,并将读取重定向到只读副本实例。
-----------------
| Application |
-----------------
|
|write/read
|
------------ Reads ------------------
| Master | <-------> | Read Replica |
------------ ------------------
^ ^
| replication | …
Run Code Online (Sandbox Code Playgroud) 我有一个 mysql 集群,有 4 个 api 节点、2 个管理节点和 4 个数据节点。今天,我在尝试连接数据库时遇到问题,所有查询都挂在“打开表”状态。检查日志后,我在日志上发现了这些错误:
Api节点错误:
2015-08-20 19:44:14 15540 [Note] NDB Schema dist: Data node: 5 failed, subscriber bitmask 00
2015-08-20 19:44:14 15540 [Note] NDB Schema dist: Data node: 6 failed, subscriber bitmask 00
2015-08-20 19:44:14 15540 [Note] NDB Schema dist: Data node: 7 failed, subscriber bitmask 00
2015-08-20 19:44:14 15540 [Note] NDB Schema dist: Data node: 8 failed, subscriber bitmask 00
2015-08-20 19:44:14 15540 [Note] NDB Schema dist: cluster failure at epoch 3313124/17.
2015-08-20 …
Run Code Online (Sandbox Code Playgroud) 如何重启 MariaDB Galera 集群?
在所有节点都崩溃后,我尝试恢复集群但没有成功。我只有2个节点。
正如文档所说,我在其中一个节点上设置了一个参数:
set global wsrep_provider_options="pc.bootstrap=true";
Run Code Online (Sandbox Code Playgroud)
然后尝试启动第一个节点:
systemctl start mariadb
Run Code Online (Sandbox Code Playgroud)
之后我收到一个错误:
Oct 11 16:11:12 proxy1 sh[2367]: 2016-10-11 16:11:12 140291677038720 [Note] /usr/sbin/mysqld (mysqld 10.1.18-MariaDB) starting as process 2402 ...
Oct 11 16:11:15 proxy1 sh[2367]: WSREP: Recovered position b6c1dc93-8fa7-11e6-933e-e64cd44e3be0:141
Oct 11 16:11:15 proxy1 mysqld[2434]: 2016-10-11 16:11:15 140047023368320 [Note] /usr/sbin/mysqld (mysqld 10.1.18-MariaDB) starting as process 2434 ...
Oct 11 16:11:15 proxy1 mysqld[2434]: 2016-10-11 16:11:15 140047023368320 [Note] WSREP: Read nil XID from storage engines, skipping position init
Oct 11 16:11:15 proxy1 …
Run Code Online (Sandbox Code Playgroud) 最近有一个问题,在一个有 100 万行的表上添加一列需要 5 个小时。我添加了一个默认值为 1 的列。这是在夜间完成的,因此数据库上没有太多活动,但是一旦开始,它确实有很多锁。
查看服务器统计信息 CPU、内存和硬盘空间都远低于其最大值的一半。所以我不知道为什么这花了这么长时间,有问题的表只有 7 列,包括新的。数据类型为 int(11)、datetime 或 varchar(45)。
我使用的是 MySQL Cluster 7.3.3,有 4 个数据节点,它们都在同一个数据中心。
谁能建议为什么简单地添加一列需要 5 个小时?
表结构:
CREATE TABLE ddi_t (
id int(11) NOT NULL AUTO_INCREMENT,
ddi varchar(45) NOT NULL,
is_deleted tinyint(1) NOT NULL DEFAULT '0',
created_time datetime NOT NULL,
module_group_id int(11) DEFAULT NULL,
created_user_id int(11) DEFAULT NULL,
supplier_id int(11) DEFAULT '1',
PRIMARY KEY (id),
UNIQUE KEY uq_ddi_1 (ddi),
KEY fk_ddi_1_idx (module_group_id)
) ENGINE=ndbcluster AUTO_INCREMENT=935352 DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud) 我崩溃了我所有的 3 个节点。启动所有节点后,我注意到 mariadb 已死。我无法再次运行它。
我在所有服务器上使用 CentOS 7
我尝试启动第一个节点,然后再启动其他节点,但没有成功。
首先,我试图按照文档中的说明找到最新的 seqno。因此,我查看了所有 3 个节点上的此文件:/var/lib/mysql/grastate.dat
并注意到所有 3 个节点上的内容都相同(uuid 相同且 seqno 相同)!这是这个文件:
# GALERA saved state
version: 2.1
uuid: ec3e180d-bbff-11e6-b989-3273ac13ba57
seqno: -1
cert_index:
Run Code Online (Sandbox Code Playgroud)
好的。由于所有节点都是相同的,我可以将任何节点作为新节点运行并向其添加另一个节点。我使用了下一个命令:
galera_new_cluster
Run Code Online (Sandbox Code Playgroud)
它没有用。节点未启动。
这是我得到的:
-- Unit mariadb.service has begun starting up.
Dec 07 18:20:55 GlusterDC1_1 sh[4298]: 2016-12-07 18:20:55 139806456780992 [Note] /usr/sbin/mysqld (mysqld 10.1.19-MariaDB) starting as process 4332 ...
Dec 07 18:20:58 GlusterDC1_1 sh[4298]: WSREP: Recovered position ec3e180d-bbff-11e6-b989-3273ac13ba57:83
Dec 07 18:20:58 GlusterDC1_1 mysqld[4364]: 2016-12-07 18:20:58 139830894778560 [Note] /usr/sbin/mysqld (mysqld 10.1.19-MariaDB) …
Run Code Online (Sandbox Code Playgroud) 我有一个 MySQL 双主复制 MySQL,每台服务器都有 21 GB 内存,我现在正在为这个项目寻找集群解决方案,可能有 6 个服务器:其中两个有 20 GB RAM 和其他具有 10 GB RAM 的设备。在 MySQL Cluster 文档中,它写下了总内存和每个节点 RAM 的公式,看来我需要更多现有复制的 RAM,而且很难让我的公司同意这种 RAM 要求,除了目的集群不是让大型服务器使用相互连接的较小(资源中)服务器,但使用此公式,每个集群节点都比我现有的服务器大得多。
如果设计一个全新的数据库,可以使用以下计算来帮助确定数据节点的大致内存大小要求:
• (在内存中)数据大小 * 副本 * 1.25 = 总数据库内存要求 示例:50 GB * 2 * 1.25 = 125 GB
•(数据大小 * 副本数 * 1.25)/节点数 = 每个节点的 RAM 示例:(2 GB * 2 * 1.25)/4 = 31.25 GB
在这种情况下,我有一些问题:
[免责声明]我对数据库并不陌生,但对复制和集群完全是新手......
您可能知道 Mysql 提供了一项新功能:MySql 组复制。
有人可以向我解释这种架构和集群之间的根本区别吗?任何主要功能仅存在于两者之一吗?节点容错 ? 是否有能力回到现场状态?欢迎提出任何建议...
谢谢
mysql replication mysql-cluster mysql-innodb-cluster group-replication
我正在使用 mysql innodb 集群。连接到我的实例使用\c root@localhost:3306
.
当我发出 时,会弹出错误消息var cluster = dba.getCluster('testCluster')
。
我已经在上次会话中创建了集群。但是当我重新连接时它就不再起作用了。
我唯一改变的是主机名从localhost
到db005
并重新启动 mysql 服务器。也不知道和我的问题有没有关系。有人知道发生了什么事吗?
在谷歌上做了一些搜索。似乎这是 mysql 论坛的唯一资源。但还是没能解决我的问题。
https://forums.mysql.com/read.php?177,653826,657465#msg-657465
谢谢!
mysql ×4
clustering ×2
galera ×2
mariadb ×2
mariadb-10.1 ×2
replication ×2
amazon-rds ×1
failover ×1
innodb ×1
mysql-5.6 ×1
mysql-5.7 ×1
mysql-fabric ×1
ndbcluster ×1
recovery ×1
standby ×1
webscalesql ×1