我在 mysql 中有 MM 复制,我想在框中挤出一些可用空间以删除不必要的文件,我在mysql-bin里面遇到了这些文件/var/db/mysql/有数百个这样的文件mysql-bin.000123,mysql-bin.000223等等。我已经检查了 mysql 复制show master status,show slave status它们是在某些位置使用一些 mysql-bin 文件,但我猜所有其他 bin 文件都是剩余的,不会再使用了。在这种情况下,删除除复制当前指向的文件之外的所有 mysql-bin 文件是否安全?
如果删除是安全的,那么我可以做些什么来在不使用这些文件时自动删除它们?
更新2
使用 WireShark 我发现了问题字符串(我希望我做到了):
28 | 9.582638 | 192.168.18.128 | 192.168.18.129 | MySQL Response Error 1043
Run Code Online (Sandbox Code Playgroud)
错误是(根据docs):
Error: 1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)
Message: Bad handshake
Run Code Online (Sandbox Code Playgroud)
下面是两种情况下WireShark的截图:
从 Windows 8 连接(成功):

来自 CentOS 的连接(失败):

为什么会发生这种情况?
更新
一个有趣的声明:
我与主数据库使用的是Windows 8成功连接(192.168.18.1)通过在主修改ssluser设置的192.168.18.1主机-做出了改变:从REQUIRE SSL到REQUIRE X509。然而,这在我们的从站到主站连接的情况下不起作用。
我在 CentOS-6.3 中遇到过 SSL 复制问题。我正在使用 OpenSSL 创建客户端和服务器证书,并且客户端和服务器证书都由同一个 CA 签名。
Server IP: 192.168.18.128
Slave IP: 192.168.18.129
MySQL version 5.1.66 SSL
Run Code Online (Sandbox Code Playgroud)
我使用MySQL 帮助页面的“为 MySQL 设置 SSL 证书和密钥”部分收到的所有证书。
服务器的 my.cnf文件: …
当机器突然关闭时,MySQL v5.1.61 中继被损坏。我试图修复它,但没有奏效。
- 我如何解决它?我做错什么了吗?
据我所知,损坏的 MySQL 中继日志很容易修复:
change master to master_log_file='<Relay_Master_Log_File>',
master_log_pos=<Exec_Master_Log_Pos>;
Run Code Online (Sandbox Code Playgroud)
其中Relay_Master_Log_File和Exec_Master_Log_Pos由以下列出:
mysql> show slave status;
但是,当我这样做时change master status ...,我收到了主键违规错误。这怎么可能?上述程序是否不正确,或者例如缺少一些+1?
(现在我只是将 --master-data mysqldump 从主服务器重新导入到从服务器,这解决了问题。但是,在将来,这样做可能不合适。)
以下是有关我的特定问题的详细信息:
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: the-master-host
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000021
Read_Master_Log_Pos: 33639968
Relay_Log_File: mysql-relay-bin.000271
Relay_Log_Pos: 2031587
Relay_Master_Log_File: mysql-bin.000020
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB: the_database
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1594 …Run Code Online (Sandbox Code Playgroud) 由于以下警告mysqld.log:
[警告] 使用语句格式写入二进制日志的不安全语句,因为 BINLOG_FORMAT = STATEMENT。该语句是不安全的,因为它使用了 LIMIT 子句。这是不安全的,因为无法预测包含的行集。
我想将复制格式切换为MIXED.
但根据 MySQL 文档:
当存在任何临时表时,不建议在运行时切换复制格式,因为仅在使用基于语句的复制时才会记录临时表,而使用基于行的复制时不会记录它们。
那么,问题是如何确定是否存在任何临时表来安全地切换二进制日志格式?
使用带有拉取订阅者的 SQL 2008 R2 事务复制,当我们添加一篇文章时,我想避免创建整个快照(数据库约为 80 GB,因此这需要几个小时)。
从这篇文章 中,我已经看到了如何通过关闭即时同步来使用部分快照来做到这一点,但这对我们不起作用。
理想情况下,我只想将它作为我们的 db 脚本的一部分运行来创建表,所以如果我们想要复制它,我们会这样做:
Create Table ...
sp_addArticle ...
sp_PushThisToOurSubscribersNow
Run Code Online (Sandbox Code Playgroud) 我刚刚建立了一个出版物,我正在尝试更快地应用快照。到目前为止,分发代理遵守MaxBCPThreads设置,但快照代理不遵守。我期望它拆分文件,以便分发代理上的线程会去获取数据。但是在我拍摄快照时似乎无法做到这一点。
我在网上看到的一些可能的解决方案在哪里更新代理配置文件(我最初只是用标志编辑了代理步骤,这适用于 dist 代理但不适用于快照)。
我尝试更新代理配置文件,但没有任何区别。我还发现有人说你应该将 sync_method 设置为native所以我检查了我的脚本,我已经创建了指定native模式的发布。
我想知道是否缺少MaxBCPThreads将所有 bcp 文件拆分为不同文件所需的特定设置。
我以为我已经解决了我自己的问题:看起来您必须有一个具有一组不同范围的聚集索引才能让 SQL Server 将文件拆分为多个分区。但是现在我的索引似乎在所有范围内都是 0。
DBCC SHOW_STATISTICS经过额外的测试,我发现这似乎只适用于复制表。如果您要基于(索引)视图进行复制,那么您似乎只能获得 1 bcp 文件,而不是从普通表中获得的分区内容。
问题是:为什么 SQL 复制不能像对普通表那样为索引视图分区 bcp 文件?
我正在复制没有表的索引视图本身(“索引视图作为表”)。原因是我必须加入数据库的识别信息供订阅者用于其他事情。到目前为止,我发现的唯一方法是使用 手动拆分我的视图BETWEEN,这不是特别有效。我希望我可以让 SQL Server 在复制普通表时做我期望的事情。
replication sql-server clustered-index index-tuning transactional-replication
我按照本指南在 Percona Server 5.5 上运行了复制,并想知道我是否应该添加read-only=1到我的从属设备my.cnf以使其只读?
该指南为 mysql 表设置复制,以便复制用户,但我主要使用从属来获取 mysqldumps,在紧急情况下将其重新配置为主,所以我认为我们不需要(或应该)启用写入它不断?
我们的用户需要能够查询大部分是最新的数据库。数据可能会过时长达 24 小时,这是可以接受的。使用生产副本获取和保持第二个数据库最新的最低成本方法是什么?有没有我没有想到的方法?
我们有一个第三方应用程序用于监控股票交易活动。白天,作为各种工作流程的一部分,会发生许多小的变化(是的,这笔交易是有效的。不,这是可疑的,等等)。晚上,我们执行基于大集合的操作(加载前一天的交易)。
我们使用数据库快照。晚上 10 点,我们删除并重新创建快照。然后开始 ETL 处理。这显然对我们的磁盘造成了负担,但允许我们的用户能够在不锁定数据库的情况下查询数据库(他们使用 Access 前端)。他们在深夜和清晨使用它,因此他们会注意到停机时间。
这种方法的问题有两方面。首先,万一夜间处理失败,这种情况并不少见,我们可以恢复导致快照被删除的数据库。另一个问题是我们的处理时间超过了 SLA。在确定了写得不好的查询和缺乏索引后,我们正试图通过与供应商合作来解决这个问题。数据库快照也是造成这种放缓的罪魁祸首,这一点可以从存在与不存在时的速度差异中得到证明——我知道,这令人震惊。
我们打开了数据库集群,但这并没有解决使数据可用的需求,而且通常只会使管理员的生活变得复杂。它已被关闭。
我们上周开始研究复制。我们的理论是,我们可以建立第二个目录并与生产数据库同步。在 ETL 开始之前,我们将切断连接,只有在 ETL 过程完成后才重新启用它。
管理员从快照复制开始,但他担心需要多天的高 CPU 使用率来生成快照以及所需的磁盘消耗。他表示,它似乎在向订阅者发送之前将所有数据写入物理文件,因此我们的 .6TB 数据库将花费 1.8TB 的存储成本。此外,如果生成快照需要数天时间,则它不符合所需的 SLA。
阅读完这篇好文章后,似乎 Snapshot 可能是初始化订阅者的方式,但之后我们希望切换到事务复制以保持同步。我假设打开/关闭事务复制不会强制完全重新初始化?否则,我们将打破我们的时间窗口
我们的数据库处于完全恢复模式,因此数据库镜像是一种选择,但我对它的了解甚至比复制还要少。我确实找到了指示“数据库镜像阻止直接访问数据,镜像数据只能通过数据库快照访问”的SO 答案。
听起来日志传送也可能是一种选择,但这是我一无所知的另一件事。它会是比其他任何解决方案(实施和维护)成本更低的解决方案吗?基于 Remus 的评论“日志传送允许对副本副本进行只读访问,但在应用收到的下一个备份日志时(例如,每 15-30 分钟)将断开所有用户的连接。” 我不确定停机时间会转化为多长时间,因此可能会导致用户有些焦虑。
我上周末才听说使用Sync,还没有研究它。我不想为像这个问题那样具有高知名度的东西引入新技术,但如果它是最好的方法,那就这样吧。
我们在这里做了大量的 SSIS,所以生成几百个 SSIS 包来保持辅助同步对我们来说是一种选择,尽管这是一个丑陋的选择。我不喜欢这样做,因为我不希望我的团队承担很多维护开销。
过去,我听说我们的管理员使用一些 SAN 技术对整个磁盘进行即时备份。也许有一些 EMC …
replication ×10
mysql ×6
sql-server ×3
binlog ×2
backup ×1
corruption ×1
index-tuning ×1
mysql-5 ×1
mysql-5.5 ×1
percona ×1
postgresql ×1
ssl ×1