我正在编写一个 bash 脚本,以在 Ubuntu trusty 下将我们组织中的 Postgres 服务器从 9.6 升级到 10.4。我已经完成了主升级,但我们在开发、登台和生产中都有实例,有或没有备用服务器。我知道如何升级备用服务器,但我正在努力寻找一种通用方法来确定主服务器是否有备用服务器,如果有,则确定它们的主机名。有人已经这样做了并且可以分享一些关于这方面的信息吗?
我有一个node.js Express项目,它使用MySQL 5.6数据库和mysql客户端连接到它。项目中没有 ORM,原始查询针对数据库运行。现在,我需要更改代码,将SELECT查询(不在事务内)路由到 MySQL 只读副本。由于我以前从未在任何其他项目上做过类似的事情,所以我想知道这样做的最佳实践是什么(在 Node.js 中)。
我发现该sequelize库具有允许单独指定读取和写入副本的配置选项,然后不同的查询将被路由到不同的数据库,但我没有在客户端库中找到任何执行此操作的选项mysql。我尝试使用sequelize,但似乎对于 RAW 查询不支持此功能。
除此之外,我想知道从架构的角度来看最好的解决方案是什么?目前,我看到的唯一选择是拥有一些具有query方法的数据库包装服务,该服务反过来封装mysql connection.query并根据提供给它的 sql 决定使用哪个数据库连接 - 读取或写入(除非它是事务 - 然后我想一切都应该在同一个数据库中完成)。这是一个相当愚蠢的解决方案,但这是我现在唯一的想法。
有人可以分享一些这方面的经验吗?不仅在 Node.js 项目中 - 欢迎任何架构想法。也许有某种方法可以在请求到达主机之前对其进行代理?感谢您提前的任何答复。
阅读 PgPool 的文档后,我很困惑哪个选项最适合我的用例。我需要一个主数据库实例来服务查询,以及主数据库实例的 1 个或多个副本(备用)用于灾难恢复场景。对我来说非常重要的是,所有成功提交到主节点的事务都保证最终被复制到副本,这样当发生故障转移时,副本数据库实例将拥有直到并包括应用于其的最新事务的所有事务。
在异步复制方面,我在 PgPool 文档中没有看到任何提及是否是这种情况,但是,它确实提到了一些潜在的数据丢失,这对我来说有点太模糊了,无法得出任何结论。
为了防止这种数据丢失,文档建议使用同步流复制,在主节点中提交事务之前,确保所有副本也应用了该更改。因此,这种方法比异步方法慢,但如果没有数据丢失,它是可行的。
同步复制是允许我实现用例的唯一方法吗?还是异步复制也可以实现这一点?另外,异步复制中潜在的数据丢失是什么构成的?
我想编写一个sql脚本来进行基本的冒烟测试,以检查我的服务器上的复制设置是否正确.
我认为针对应该复制的表的一组简单的CRUD操作将实现我所追求的目标,我想工作流将看起来像这样:
INSERT 一行到发布者数据库中的复制表我的问题是,我该如何做第2步?我想我可以通过查看msdb..sysjob*表格查看相关工作上次执行的时间,但我不确定这是解决问题的最佳方法.
Server1:xxx.xxx.xxx.xxx
server-id=1
binlog-do-db=sample
master-host = xxx.xxx.xxx.xxx
master-user = someuser
master-password = somepassword
master-connect-retry = 60
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
Run Code Online (Sandbox Code Playgroud)
服务器2:xxx.xxx.xxx.xxx
server-id=2
binlog-do-db = sample
master-host = xxx.xxx.xxx.xxx
master-user = someuser
master-password = somepassword
master-connect-retry = 60
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
Run Code Online (Sandbox Code Playgroud)
我已经在2台测试服务器上设置了主主机复制配置,我还为服务器上的mysql 3306打开了端口我面临从机连接问题我一直得到
以下错误101021 19:12:23 [错误]从属I/O:错误连接到主服务器'root@xxx.xxx.xxx.xxx:3306' - 重试时间:60次重试:86400,错误代码:1045
服务器1有mysql 5.0.77,服务器2有mysql版本5.1.41
我正在设置将持续运行的SQL Server事务复制.接收数据的服务器上的此设置的分发服务器
如果连续运行,我是否应该对事务日志文件大小有任何疑虑?
我发现自己的情况是其他人必须在某个时候陷入困境.
我们公司运行一个内部基于MSSQL的数据库,我们的网站然后坐在外部服务器上,目前运行MySQL.问题在于两个数据库需要越来越频繁地相互通信.
我们当前的解决方案涉及SSIS包,但它们是临时的并且通常很慢.我们最终经常不得不在我们的实时生产服务器上删除表,然后从内部服务器重建它们.当然这会导致数据不一致,因此我们尝试在高峰时段之外执行这些操作.然而,这导致一些数据从MySQL传输到MSSQL的24小时延迟,然后再将24小时的延迟恢复到MySQL.这些都不是理想的.
我正在寻找的是一个解决方案,允许我们的内部MSSQL服务器和任何可以坐在Linux盒子上的数据库之间的复制,并与PHP很好地配合.正如我所说,我们目前正在运行MySQL,所以我们优先考虑任何包含该解决方案的解决方案,但所有其他建议都会得到很好的接受.
我已经读过某个地方,PostgreSQL是一个vialbe解决方案,但我现在正在努力找到我读到的地方.我已经找到了一些可能有用的工具,例如DBMoto和Slony-I,有没有人在这种情况下有任何经验?
或者,我们是否只是完全咆哮错误的树,我们是否应该尝试将MSSQL集成到我们的PHP环境中?
任何想法或建议都会感激不尽.
非常感谢
抢
我已成功在我的2个数据库服务器上设置主从复制.我还设置了主服务器以在从服务器上进行复制,并且当主服务器关闭时,主服务器复制的从服务器也可以工作.但是,我无法设置此时间间隔.我尝试使用master_delay以及master_heartbeat_period.这些似乎都没有起作用.
mysql> change master to master_host='192.168.0.2',
-> master_user='master',
-> master_password='masterpass',
-> master_log_file='mysql-bin.000008',
-> master_log_pos=3733
-> master_delay=30; //to set the time limit for the interval
mysql> change master to master_host='192.168.0.2',
-> master_user='master',
-> master_password='masterpass',
-> master_log_file='mysql-bin.000008',
-> master_log_pos=3733
-> master_heartbeat_period=30; //to set the time limit for the interval
Run Code Online (Sandbox Code Playgroud)
复制仍然立即发生..任何想法我做错了什么?
我需要使用'--skip-slave-start'选项启动mysql服务器,如教程/文档中所述.
我怎么能做到这一点?
尝试下一个命令不起作用:
service mysql start --skip-slave-start
Run Code Online (Sandbox Code Playgroud)
start:无效选项: - skip-slave-start
mysql>SLAVE START --skip-slave-start;
Run Code Online (Sandbox Code Playgroud)
错误1064(42000):您的SQL语法有错误;
我有一个现有的HANA仓库,该仓库没有创建/更新时间戳。我需要生成许多夜间批处理增量文件,以发送到另一个平台。我的问题是如何检测哪些记录是新记录或已更改记录,以便可以在复制过程中捕获这些记录。
有没有办法使用HANA的内置功能来检测新记录/更改记录?
mysql ×5
postgresql ×3
sql-server ×3
replication ×2
cdc ×1
hana ×1
master-slave ×1
node.js ×1
pgpool ×1
php ×1
setinterval ×1
sql ×1
standby ×1
upgrade ×1