Articles of mysql replication

诊断Mysql复制问题

我们在我们的备份服务器上运行一个mysql复制客户端。 自上周停电以来,停止复制。 在此之前,它连续运行了好几个月。 我试过重新启动主和奴隶,但这并没有帮助。 我可以从奴隶访问主服务器,所以networking不是问题。 还有什么我可以做的,以尝试诊断问题是什么? mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Master_Host: master Master_User: username Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000060 Read_Master_Log_Pos: 46277494 Relay_Log_File: mysqld-relay-bin.000348 Relay_Log_Pos: 98 Relay_Master_Log_File: mysql-bin.000060 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 46277494 Relay_Log_Space: 98 Until_Condition: None Until_Log_File: […]

为什么使用基于混合的复制为MySQL

我正在configurationMySQL复制的过程,并打算使用基于行的复制,但我也读了基于混合的复制。 这是默认的基于声明的地方,然后在某些情况下( http://dev.mysql.com/doc/refman/5.1/en/binary-log-mixed.html),MySQL将切换到基于行。 当列表切换到基于行的时候,列表将被放弃。 我的问题是: 有没有使用混合? 如果是的话,你为什么select只使用一个或另一个呢? 提前致谢

如何摆脱mysql的binlogs?

我一直在使用mysql进行开发。 我不使用复制,但我想我已经有一段时间在我以前的计算机上启用二进制日志logging,我已经在不知不觉中积累了数百个二进制日志文件。 我现在在使用Linux,实际上我需要开始使用二进制日志logging。 当我尝试启用my.cnf中的二进制日志 – mysql服务器不启动,这是我在错误日志中find: 1 110314 14:39:40 [Note] Plugin 'FEDERATED' is disabled. 2 110314 14:39:40 InnoDB: Started; log sequence number 0 36669358 3 ^G/usr/sbin/mysqld: File '.\mysql-bin.000179' not found (Errcode: 2) 4 110314 14:39:40 [ERROR] Failed to open log (file '.\mysql-bin.000179', errno 2) 5 110314 14:39:40 [ERROR] Could not open log file 6 110314 […]

MySQL包升级(Debian apt-get)总是会因为mysql架构的变化而中断主 – 主复制

我在2台Debian服务器上设置了master-master复制,它们复制了一切,包括mysql数据库本身(以便新用户等也可以复制)。 这通常工作得很好,除了大多数(如果不是全部的话)apt升级包括mysql数据库模式的一些改变,这会导致复制错误,停止复制。 最终,我总是需要通过跳过每一边的错误语句来手动修复。 这总是很耗时间,我担心我可以手动进行错误(跳过太多的语句,忘记CHANGE MASTER细节等等)。 有什么我可以做的,以确保将来的apt-get更新将得到顺利处理,而不会导致复制问题? 当然,这有一个行之有效的最佳实践?

提高MySql复制速度

我正在寻找如何提高一个mysql奴隶的复制速度的指针。 正常生产速度足够快,但由于某种原因,需要很长时间才能赶上。 (如果服务器被closures或复制停止了几个小时等) 一些数据: 数据库大概是2TB,每天写的binlog大概是500GB。 对于正常的生产使用奴隶滞后停留在0或1秒 当试图追赶它接近每秒约1秒掌握。 (所以赶上10个小时需要10个小时) 从站只是将数据重放为故障转移机器,没有select运行它,它应该能够取代主人,如果他死了(我们所有的东西都慢,但那是可以的) 服务器在同一个物理networking中 可以做些什么来提高速度? (是的,改善硬件是一种select,但我们希望确保在花费大量资金之前检查其他选项) 编辑: 一些数据回应@ 3molo问题: 带宽使用,赶上:〜2MB / s到10MB / s,没有问题,我猜。 CPU使用率低,io等待时间长(从服务器只有2个CPU,占用率高达70%到85%,所以这意味着磁盘的瓶颈? 内存使用量为4GB(其余部分为“caching”)。 所以我没有看到那么多潜力? (因为它只是写入负载(?)) 如果瓶颈是磁盘(6磁盘RAID 10设置)除了增加RAID还有其他的select,或者我们必须去?

MySQL从服务器不会删除旧的中继二进制日志

我有一个MySQL服务器与另一台主机上的从属复制。 今天,我偶然发现了从属主机的高磁盘使用率,并侵入了占用所有空间的东西。 事实certificate,这个空间被奴隶继电器日志占用。 我试图closuresexpire_logs_daysvariables并重新启动MySQL守护进程,但报告的磁盘空间保持不变。 我无法find任何可以清除旧日志的FLUSH LOGS 。 我试过没有结果。 有什么办法可以减less中继日志占用的磁盘空间吗?

哪种binlog格式用于MySQL复制?

刚开始使用MySQL复制,我想知道什么样的binlog格式是最好的使用? 有行,声明和混合。 我将要使用5.1.49。 Row目前正在获胜,但我只是想知道为什么我应该使用混合而不是行。 非常感谢, Delenda

我怎样才能在三个或更多地理位置独立的服务器之间集中MySQL数据?

为了解释这个问题的背景: 我们有一个在Linux服务器上运行的本地PHP应用程序(用于运行在线语言学习课程),并在本地主机上使用MySQL来保存用户数据(例如,testing结果,提交工作的标记,花在不同页面上的时间课程等)。 由于我们有来自不同地理位置的学生,因此我们目前在这些地点(西class牙,英国和香港)附近托pipe了3台虚拟服务器,并将用户添加到离他们最近的服务器上(他们通过不同的URL访问,例如europe.domain.com ,uk.domain.com和asia.domain.com)。 这个工作,但是是一个pipe理的噩梦,因为我们必须记住一个特定的用户在哪个服务器上,用户只能连接到一个服务器。 我们希望以某种方式集中化信息,以便所有用户都可以在任何服务器上看到,并且用户可以连接到3台服务器中的任何一台。 问题是,我们应该用什么方法来实现这一点。 这肯定是一个很多人遇到的问题,但是我还没有find任何结论性的search结果。 我看到的最接近的解决scheme是: 像master-master复制,但我已经阅读了这么多的post,这表明这不是一个好主意,因为像auto_increment字段可以打破。 循环复制,这听起来很完美,但引用O'Reilly的高性能MySQL,“一般来说,环是脆弱和最好的避免” 我们不反对在应用程序中重写代码,以使其能够与任何需要的解决scheme一起工作,但我不确定是否使用复制是正确的。 谢谢, 安迪 PS我应该补充一点,我们尝试写入中央数据库,然后使用本地数据库读取,但不同服务器之间写入的响应时间相当糟糕,写入数据立即可用于读取也很重要,所以如果复制太慢,这可能会导致过期的数据被返回。 编辑:我一直在考虑编写我自己的基本复制脚本,这个脚本涉及到每个用户都有一个服务器ID来说明他的“主服务器”,比如亚洲的用户会被标记为香港服务器自己的服务器 然后复制脚本(这将是一个PHP脚本设置为合理频繁地运行,例如每15分钟左右),将独立运行在系统中的每个服务器上。 他们将通过数据库并将有关用户的任何信息与“主服务器”一起分配给运行脚本的服务器,以便将其发送到系统中的所有其他数据库。 他们还需要吸收已经添加到系统上的其他数据库的新信息,其中“主服务器”标志是运行脚本的服务器。 我需要弄清楚细节并构build处理冲突的逻辑,但是我认为这是可能的,但是我想确保没有一个正确的解决scheme已经在那里,因为它似乎是必须的这是很多人已经遇到的问题。

用InnoDB和MyISAM表创build*一致的* *在线* MySQL备份

我花了几个小时build立一个新的数据库服务器,从一个月前创build的mysqldump文件中取代了两个失败的服务器,然后使用我的服务器的bin-logs使mysqldump保持最新状态。 现在我已经有了这个新的数据库服务器,并且已经运行了几天,我需要完成服务器设置并重新实现一个备份策略。 我需要为新服务器联机(至less)一个MySQL Replication Slave,并且在事情再次失败时开始创build可用的备份。 在我进一步行动之前: 我忘记了(eep)在导入旧的逻辑备份和执行旧的bin日志之前启用了新的MySQL服务器上的bin日志(在这个时候,在这个时候被唤醒了24小时)。 我的数据由多个数据库组成,所有这些数据库都混合使用了MyISAM表和InnoDB表。 同样,在启用新服务器上的bin日志的同一行中,我忘记了在导入所有数据之前打开my.cnf的innodb-file-per-table选项。 现在在新的MySQL服务器上启用了二进制日志,但是每个表的inno文件选项几乎是一个无法解决的问题,直到我可以导入另一个逻辑备份(我可能最终会启动第二个从服务器,并提升第一个从服务器掌握和放弃当前的主 – 因为configuration不是我需要它的地方)。 所以,问题是: 我需要备份MySQL服务器,但是我不能让新的MySQL服务器脱机。 我需要继续写作,并提供几乎没有停机时间的阅读。 这个“小到没有停机”的要求被定义为不到10分钟。 我的数据目前在服务器上使用大约100GB的空间(mysql数据文件),而逻辑备份大概是50GB(这是很多的索引..哈哈)。 我不在乎这个备份是合乎逻辑的,还是从MySQL数据目录拷贝数据文件。 我可以创build一个逻辑备份从奴隶后,我得到它在线。 而问题是: 你将如何创build这个需要的备份? 我知道这不容易,很多人会说这是不可能的。 但我拒绝相信这是不可能的,必须有办法做到这一点。 有关服务器的说明:它运行Ubuntu 10.04,MySQL 5.1.41,数据存储在其上的文件系统是ext3。 服务器在Rackspace Cloud上运行,所以文件系统几乎“现在就是这样”,除非我可以重新分区根设备,并用另一个FS(XFS也许?)重新分区来做快照。 我已经阅读了Perconas XtraBackup Tool,但它只适用于InnoDB表。 他们有一个MyISAM工具,但我真的不明白它如何(或者甚至是否与XtraBackup一起工作)创build一个完全一致的备份。 我已经阅读了关于mysqlhotcopy但它只适用于MyISAM表。 很明显,我知道mysqldump ,但(显然),这里的问题是创build一个一致的备份,而不locking整个数据库服务器的小时数,它将需要输出整个sql备份文件。

testingMySQL数据库复制/同步

我正在设置一个MySQL Master数据库,它复制到几个Slave数据库。 我的问题是监视和/或testing从属数据库是否最新的最佳实践是什么,并且在出现导致复制停止的错误时提醒pipe理员。 我search了监视工具,但一直没能find合适的东西。 另外,testing从站之间同步的“最佳实践”方法是什么? 有没有像unit testing数据库复制? 我很抱歉,如果我对这个问题的无知冒犯了任何人。