我有一个django应用程序与复制服务器一起工作,并配置为使用master作为只写,slave作为只读.但是当我开始监控我的数据库负载时,我发现主机有很多读取流量,经过一些调查我发现:
def get_or_create(self, **kwargs):
# Update kwargs with the related object that this
# ForeignRelatedObjectsDescriptor knows about.
kwargs.update({rel_field.name: instance})
db = router.db_for_write(rel_model, instance=instance)
return super(RelatedManager, self.db_manager(db)).get_or_create(**kwargs)
get_or_create.alters_data = True
Run Code Online (Sandbox Code Playgroud)
因此,从该代码开始,我将使用write数据库进行get_or_create所需的读取和写入操作,而不是使用slave来读取和master来按照预期"创建",是否有人遇到过此问题?除了重写get_or_create函数之外,还有其他方法来解决它吗?
我在从属端的MySQL复制有错误22,特别是关于charset错误.
该错误表明它找不到charset'#45',我发现它很奇怪,因为使用的查询是陈述的DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci,我确实检查了charset\Index.xml它确实存在.
师父: Server version: 5.5.30-log
奴隶 : Server version: 5.1.66-log
当前复制状态:
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.10.2.21
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000024
Read_Master_Log_Pos: 1065715871
Relay_Log_File: mysqld-relay-bin.000029
Relay_Log_Pos: 86980698
Relay_Master_Log_File: mysql-bin.000024
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 22
Last_Error: Error 'Character set '#45' is not a compiled character set and is …Run Code Online (Sandbox Code Playgroud) 在 MySQL 数据库服务器中,我们有名为test 的模式。该架构具有名为users 的表。
rails 应用程序在任何地方都没有使用过用户表。找到的用户条目的唯一位置是在 schema.rb 中。
在用户表中有一些数据存储和数据被通过运行一些其他服务器上的其他Java应用程序插入。rails 应用程序通过 HTTPs 对 JAVA 应用程序进行 API 调用,并在需要时检索数据以供使用。
每天将 MySQL 主数据库复制到从服务器。
在复制过程中,波纹管查询记录在慢日志中并导致复制滞后。
root localhost test Query 93 Sending data SELECT /*!40001 SQL_NO_CACHE */ * FROM `users`
root localhost test Query 62 Writing to net SELECT /*!40001 SQL_NO_CACHE */ * FROM `users`
Run Code Online (Sandbox Code Playgroud)
此查询不是从 Rails 应用程序触发的 - 我们可以在日志中看到连接的用户和主机是 root 和 localhost。
如果有人帮助我确定查询的来源以及如何或可以做些什么来避免查询,我将不胜感激。
我已经在 2 个不同服务器的 2 db 内实现了 PostgreSQL 10 中的逻辑复制,并且我知道序列不同步,因此我在两个数据库中创建了如下触发器函数:
CREATE FUNCTION update_ogc_fid()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
Declare
iInt integer;
BEGIN
execute 'Select nextval('|| chr(39) || 'address_ogc_fid_seq' || chr(39) ||');' into iInt;
NEW.ogc_fid = iInt;
RETURN NEW;
END;
$BODY$;
CREATE TRIGGER update_ogc_fid_address
BEFORE INSERT
ON address
FOR EACH ROW
EXECUTE PROCEDURE update_ogc_fid();
Run Code Online (Sandbox Code Playgroud)
事实上,实际上ID在 DB1 中只使用奇数,而在 DB2 中使用偶数,为什么在第二个数据库中没有触发该函数?
如果我在 DB1 中插入一条记录,我有ID3,它会进行复制,并且在 DB2 中我有相同的记录ID,我将检查 DB2 中的序列,它仍然是 1,而不是 3。
现在我要在 DB2 …
postgresql replication database-replication multi-master-replication
我对因果一致性如何影响在读取关注“本地”与“可用”之间进行选择的决定感到困惑。
当它是非因果一致会话时,为什么辅助节点的读取关注“可用”是默认值?
我了解分片集群的“可用”行为与非分片集合的“本地”行为。
我只是无法根据阅读文档建立联系。
如果有人帮助我建立桥梁,我将非常感激。先谢谢了。
MySQL 版本 - RDS 上的 8.0.23 我正在将本地数据库复制到 AWS RDS MySQL 实例。但我收到此错误:
2021-11-11T22:43:09.091947Z 378 [ERROR] [MY-010584] [Repl] Slave I/O for channel '': error connecting to master 'replicator@localhost:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061
Run Code Online (Sandbox Code Playgroud)
我的 RDS 从属状态:
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: localhost
Master_User: replicator
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: DESKTOP-7DL3FOM-bin.000010
Read_Master_Log_Pos: 700
Relay_Log_File: relaylog.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: DESKTOP-7DL3FOM-bin.000010
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table: …Run Code Online (Sandbox Code Playgroud) 我最近开始玩CouchDB,只是涉及一些小问题.
我正在尝试使用以下命令将数据从aremote服务器复制到我的远程计算机:
curl -X POST -d '{"source":"http://xxx.xxx.xx.xxx:5984/testing_replicate","target":"http://localhost:5984:testing_replicate"}' http://localhost:5984/_replicate
Run Code Online (Sandbox Code Playgroud)
不知怎的,这个命令没有响应.
做
和curl -X GET http://localhost:5984/
curl -X GET http://xxx.xxx.xx.xxx:5984/
Run Code Online (Sandbox Code Playgroud)
返回预期的响应: {"couchdb":"Welcome","version":"0.10.0"}
任何人都可以开导我吗?
最好的祝福.
我在多主复制设置中配置了两个MySQL服务器.每个人都是奴隶,掌握着另一个人.我的应用程序要求在后台运行一些大型查询,这些查询的结果将用于填充表.我想,我可以在一台服务器上运行这些大型查询,而应用程序前端则使用另一台服务器.这样,在服务器运行这些查询时,应用程序不会变慢.
这些查询非常大INSERT .... SELECT.通过我的复制设置,似乎当一个服务器完成查询时,而不是仅仅将INSERT发送到从服务器,它使从服务器运行原始的大型INSERT/SELECT.
这真的发生了吗?或者有没有办法看到从主服务器发送到从服务器的命令,以验证这是行为?我能告诉的唯一方法是CPU负载.
是否有一种方法让奴隶只能从INSERT中获得结果INSERT ...在主服务器上运行SELECT?
集群中有两个DB.大师(db3.example.com):
[mysqld]
wsrep_cluster_address = 'gcomm://'
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_retry_autocommit = 0
wsrep_sst_method = rsync
wsrep_node_address = 12.79.29.209
Run Code Online (Sandbox Code Playgroud)
和slave(db4.example.com):
[mysqld]
wsrep_cluster_address='gcomm://db3.example.com'
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_sst_method=rsync
wsrep_sst_receive_address=12.79.29.206
wsrep_node_address = 12.79.29.206
Run Code Online (Sandbox Code Playgroud)
从站不会连接到主站.记录下面.
130821 20:12:04 [Warning] option 'table_cache': unsigned value 2097152 adjusted to 524288
130821 20:12:04 [Warning] The syntax '--log-slow-queries' is deprecated and will be removed in a future release. Please use '--slow-query-log'/'--slow-query-log-file' instead.
130821 20:12:04 [Note] WSREP: Read nil XID from storage engines, skipping position init
130821 20:12:04 [Note] WSREP: wsrep_load(): loading provider library '/usr/lib/galera/libgalera_smm.so' …Run Code Online (Sandbox Code Playgroud) 是否有任何云存储系统(即Cassandra,Hazelcast,Openstack Swift),我们可以在哪里更改所选对象的复制因子?比方说,我们已经在系统中发现了热点对象,因此我们可以将复制因子作为解决方案来增加?谢谢
openstack-swift database-replication cassandra infinispan hazelcast
mysql ×5
replication ×3
amazon-rds ×1
cassandra ×1
couchdb ×1
database ×1
django ×1
galera ×1
hazelcast ×1
infinispan ×1
mariadb ×1
master-slave ×1
mongodb ×1
postgresql ×1
sharding ×1