日期:2014-05-16  浏览次数:20744 次

100分讨论 想跟大家探讨一下mysql数据库同步异步的问题
现在如果有两个数据库A,B,A数据库作为系统的主数据库,B数据库作为备份数据库,这两个数据库是在不同的硬盘下,因为需求原因,这两个都必须24小时开着,也就是说不可以停止mysql服务然后手动去备份,那么请问这两个数据库应该如何实现备份呢?他们可以是在同一个服务器上的两块硬盘,也可能是不同的两个服务器上,或者同一块硬盘下的两个文件夹,我想问的是,用同步和异步的方式分别怎么做呢?

------解决方案--------------------
可以采用Master/Slave数据库复制备份。
------解决方案--------------------
备份分为冷备和热备,楼主说的不能停机备份,那就是不能做冷备,热备的方式有很多
mysqldump ,xtrbackup等工具都可以做到。
------解决方案--------------------
如果在不同服务器上,则可以直接使用 MYSQL全身提供的数据库复制功能。

引用

第6章:MySQL中的复制
目录

6.1. 复制介绍
6.2. 复制实施概述
6.3. 复制实施细节
6.3.1. 复制主线程状态
6.3.2. 复制从I/O线程状态
6.3.3. 复制从SQL线程状态
6.3.4. 复制传递和状态文件
6.4. 如何设置复制
6.5. 不同MySQL版本之间的复制兼容性
6.6. 升级复制设置
6.6.1. 将复制升级到5.0版
6.7. 复制特性和已知问题
6.8. 复制启动选项
6.9. 复制FAQ
6.10. 复制故障诊断与排除
6.11. 通报复制缺陷
6.12. 多服务器复制中的Auto-Increment
本章描述了MySQL提供的各种复制特性。引入了复制概念,显示如何设置复制服务器和服务以指导相应的复制选项。还提供了FAQ(以及答案) 列表,以及解决复制问题的排错建议。

关于复制相关的SQL语句的语法描述,参见13.6节,“复制语句”。

我们建议你经常访问我们的网址http://www.mysql.com,并检查对本章的修改。复制在不断地得到改进,我们用最新的信息定期更新本手册。

6.1. 复制介绍
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。(这与同步复制可以进行对比,同步复制是MySQL簇的一个特征—参见第17章:MySQL簇)。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

如果你想要设置链式复制服务器,从服务器本身也可以充当主服务器。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

单向复制有利于健壮性、速度和系统管理:

· 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。

· 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。

· 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。参见5.9.1节,“数据库备份”。

6.2. 复制实施概述
MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。参见5.11.3节,“二进制日志”。

每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

认识到二进制日志只是一个从启用二进制日志的固定时间点开始的记录非常重要。任何设置的从服务器需要主服务器上的在主服务器上启用二进制日志时的数据库拷贝。如果启动从服务器时,其数据库与主服务器上的启动二进制日志时的状态不相同,从服务器很可能失败。

将主服务器的数据拷贝到从服务器的一个途径是使用LOAD DATA FROM MASTER语句。请注意LOAD DATA FROM MASTER目前只在所有表使用MyISAM存储引擎的主服务器上工作。并且,该语句将获得全局读锁定,因此当表正复制到从


------解决方案--------------------
备份完全不需要停机的啊
直接mysqldump导出数据备份
------解决方案--------------------
如果是运行在同一个服务器下,不同的MYSQL服务进程中,则等同于不同MYSQL服务器之间的同步。参考复制功能即可。

如果是运行在同一MYSQL实例下。既然B在任何时刻都完全等同于A, 则最简单的方法就是直接在服务器上把这两块硬盘做成 raid1 镜像,则操作系统来完成两块硬盘的镜像。

如果由于没有服务器权限,则你可以考虑在A数据库的所有表中添加触发器,当有变更时,同步更新B中的记录。
------解决方案--------------------
探讨
现在如果有两个数据库A,B,A数据库作为系统的主数据库,B数据库作为备份数据库,这两个数据库是在不同的硬盘下,因为需求原因,这两个都必须24小时开着,也就是说不可以停止mysql服务然后手动去备份,那么请问这两个数据库应该如何实现备份呢?他们可以是在同一个服务器上的两块硬盘,也可能是不同的两个服务器上,或者同一块硬盘下的两个文件夹,我想问的是,用同步和异步的方式分别怎么做呢?