`
liuye
  • 浏览: 53989 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

也谈 mysql 数据库的同步问题

阅读更多
网上有不少关于 mysql 数据库服务器的数据同步文章,其实只有二位朋友发表的文章,其他都是转抄。
  而这些文章中,仅对数据同步过程的操作作了一个记录,而没有把操作方法,原理与一些过程中出现的问题说明清楚。
  
  因为工作需要,我公司需要对美国服务器上的 mysql 数据库同步到香港服务器上,仅对部分业务相关表进行同步,而同时又需要把香港服务器上的产品数据同步到美国服务器上,这是同一个数据库,不同表 table 的双向同步,我在设置过程中,参考了网上的中文文章与 msql.com 网站上的在线文档,多次成败,也算是把 mysql 的这样同步搞个明白。
  
  下面就是一些记录文章,希望可以说明一些内在原理,一些出错现象与处理方法。
  
  mysql 的数据同步,在 mysql 官方网站文档上,叫 replication 字面是重作的意思,意译就是同步了。
  其实,mysql 的同步,并不是使用同步 sync 这个单词而是用重作 replication ,很准确表明了 mysql 数据库操作的实质,是作同样的操作,或叫重作同样的操作,以保持主数据库服务器 master 与 从属服务器 slave 之样的数据保持一致。replication 就是有重复,重作的意思。
  
  mysql 为了实现 replication 必须打开 bin-log 项,也是打开二进制的 mysql 日志记录选项。
  
  mysql 的 bin log 二进制日志,可以记录所有影响到数据库表中存储记录内容的 sql 操作,如 insert / update / delete 操作,而不记录 select 这样的操作。因此,我们可以通过二进制日志把某一时间段内丢失的数据可以恢复到数据库中,( 如果二进制日志中记录的日志项,包涵数据库表中所有数据,那么,就可以恢复本地数据库的全部数据了 )
  
  而这个二进制日志,如果用作远程数据库恢复,那就是 replication 了。
  这就是使用 replication 而不用 sync 的原因。
  这也是为什么要设置 bin-log = 这个选项的原因。
  
  在同步过程中,最重要的同步参照物,就是同步使用那一个二进制日志文件,从那一条记录开始同步。
  下面,我们来讲解最核心的过程
  
  
  上面同步的单词是 synchronization ,呵呵简写 sync ,也是 linux 下一个重要操作
  
  下面的官方文档,说明如何安装与设置 mysql 同步操作,当然,英文版
  http://dev.mysql.com/doc/mysql/en/Replication_HOWTO.html
  
  现在,我们用中文复述一下过程
  
  1. 首先,你应该有两个或两个以上的 mysql 数据库服务器,版本最好是在 3.3 以上 ( 当然啦,两个服务器不一定是两台机器,一台机器上安装两个 mysql 服务是可以的,同时,如果你对 mysql replication 原理十分精通的话,你甚至可以在一个 mysql 服务的两个不同数据库 database 之间作同步,看有没有需要了) 
    说明: 这两个服务器一般设置一个为 主服务器,或叫源服务器, master mysql server, 另一台或其他多台就是 replication slave 同步从服务器了。一台 slave 与多台 slave 设置方法是一样的,这样你就可以作类似数据库集群了
  
  2. 设置可访问 mysql 帐号,操作以英文为准
   说明:
  2.1 mysql 帐号一般设置为限定 ip 访问,以保障安全性
  2.2 mysql 帐号一般在 master 与 slave 设置为相同帐号,同时是远程可访问
  2.3 特别注意,如果你用 linux / unix 操作系统,那一定要注意一下防火墙 firewall 有没有限制 mysql 远程访问,如果是,最好是打开远程访问端口,并作好访问 ip 限制
  2.4 由于 my.cnf 中要明文存储 mysql 帐号密码,请注意保护 my.cnf 不让其他用户访问到( 看来要向 mysql 说明下以后用密码存 passwd )
  
  3. 第三步,当然是设置两个服务器要同步的数据库为同样的数据库了
    这里有一些技巧,包括 mysql 的 sql 指令说明下
   3.1 方法之一,就是英文说明中说的,先锁定数据库读写功能 ( 其实最好是停止 mysqld 服务,再作备份) 然后用 tar 备份数据库目录,转到 slave 服务器相同数据目录中
  
    3.2 方法之二,使用 mysql studio 这样的实用工具,直接使用 mysql studio 的 backup database 工具把数据库同步
  
    3.3 以上两种方法都是 master 数据库中有不少数据记录,按上两 种方法得到 master 与 slave 有相同数据库与数据记录。 而第三种方法,则是适合于新建数据库的情况,特别适合于 master 与 slave 在 my.cnf 已经设置好 replication 关系 (但 未指定 database 同步数据库 ) 的情况: 这就是使用 mysql 的 sql 语句 load table from master 与 load data from master;
    load table from master 可以从 master 数据库把表结构复制到 slave 数据库中,这样可以建立同步的表。
    load data from master 是从 master 数据库把数据导入到 slave 数据表中,条件是 master 从一开始安装运行就使用了 bin-log 参数而保存有二进制日志
  
  4. 接下来就是配置 master 与 slave 的 my.cnf 文件,使得 replcation 能有合适的启动参数以支持数据同步
    技巧: 如果你使用 win2k 的 mysql 那么,你可以下载 mysql.com 出的官方 mysql administrator 实用程序,直接在 mysql administrator 中即可配置 master 与 slave ,同时也可以配置 query-cache 哟
  
    在 master 的 my.cnf ( 如果是 win32 那就是 my.ini ) 增加
    [mysqld]
    log-bin =
    server-id=1
  
    注意,上面的 log-bin = 中的 等号 = 是不可少的
  
   在 slave 的 my.cnf 修改
    [mysqld]
    server-id=2 # 如果有多个 slave 就改为不重复的 id 就好,在mysql 4.1 中,这个已经取消了
    master-host=10.10.10.22
    master-user=backup #同步用户帐号
    master-password=1234
    master-port=3306
    master-connect-retry=60 #预设重试间隔60秒
    replicate-do-db=test # 告诉slave只做 test 数据库的更新
    bin-log =
  
  
  5. 检查 master 与 slave 配置状态,使用 show master status; 与 show slave status; 这两个 SQL 指令即可在 master 与 slave 查看配置状态。这里有两个状态变量十分重要
  
  mysql > SHOW MASTER STATUS;
  +---------------+----------+--------------+------------------+
  | File   | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +---------------+----------+--------------+------------------+
  | mysql-bin.003 | 73  | test   | manual,mysql  |
  +---------------+----------+--------------+------------------+
  
  注意 File 是 mysql-bin.003 而 position 是 73
  这个文件是对 test 这个 数据库的二进制日志记录,记录数据变化的当前记录条数是 73
  
  
  前面我们说过,二进制日志记录着某个数据库所有数据记录变化的 sql 操作语句,如 insert / update / delete 等,正是因为如此,在 slave 同步 mysql 数据库操作时,其实是读取master 中这个 mysql-bin.003 二进制日志中的 sql 操作,同在 slave 中执行这些 sql 操作,所以,同步成功有以下几个条件
    1. master 与 slave 有相同的数据库表结构,最好 database name 也一样 ( 可以设置为不一样的 database name)
    2. master 与 slave 有相同的初始数据记录,保证同步操作开始后两者数据一致
    3. master 必须使用 bin-log 二进制日志记录 ( 推荐 slave 也使用 bin-log )
    4. slave 是从 master 的 bin-log 是读取 sql 记录来同步,所以,从哪一条 log 开始读取很重要 ( 下面的第 7 条操作,就是保证 slave 能与 master 保持相同的记录读取,并读取正确的 bin-log 日志文件 )
  
  6.
  
  7. 在 slave 执行下面 sql 操作
  
  mysql> CHANGE MASTER TO
    ->  MASTER_HOST='master_host_name',
    ->  MASTER_USER='replication_user_name',
    ->  MASTER_PASSWORD='replication_password',
    ->  MASTER_LOG_FILE='recorded_log_file_name',
    ->  MASTER_LOG_POS=recorded_log_position;
  
  这里,把 上面的 redcorded_log_file_name 改为 mysql-bin.003 而 recorded_log_position 改为 73 (特别注意哟,这是关系关键)
  
  
  最后,测试一下吧
  
  
  linux 下的 mysql 与 win2k 下的 mysql 作 replication 会有什么技巧:
  
  
  1. 注意 linux 下有大小写区分,而 win2k 下没有
    所以最好使用 mysqldump 方法来让两个数据库初始化同步,而不能使用 tar 方式直接 copy 数据库表文件
    使用 mysql studio 来作 database backup 也不错
  
  2. 注意 win2k 下的 mysql 配置文件是 c:\my.ini
    你可以使用 mysql administrator 0.9 这个图型界面的实用工具来设置
  
  3. 如果 win2k 下的 mysql 为 master , 一定要注意 show master status 中显示出来的结果
  4. win2k 下的 mysql 为 slave 时,注意不要把同步时间周期设置太长。
分享到:
评论

相关推荐

    MySql数据库同步复制

    MySQL 数据库同步复制是一种强大的技术,它允许两个或多个数据库实例之间保持数据一致性。这种功能在高可用性、灾难恢复和负载均衡场景中至关重要。在MySQL中,同步复制主要通过主从模式和双机互备模式来实现。 1. ...

    MySQL数据库的同步

    【MySQL数据库同步】 在当前数字化时代,MySQL数据库的同步至关重要,因为它们承载着大量关键业务数据。MySQL是一个广泛应用的开源关系型数据库管理系统,尤其在中小型企业及网站中颇为流行,因其小巧、快速、成本...

    从sqlserver同步数据到Mysql数据库

    【标题】:“从sqlserver同步数据到Mysql数据库”是一个典型的跨数据库系统数据迁移的案例。在信息技术领域,数据迁移是常见的操作,特别是在企业级应用中,可能由于业务需求、性能优化或者系统升级等原因,需要将...

    mysql数据库同步canal框架分享PPT

    mysql数据库同步canal框架分享PPT mysql数据库同步canal框架分享PPT

    Mysql一键数据库同步和主主同步脚本

    MySQL数据库同步和主主同步是数据库管理中的重要概念,尤其对于需要实时数据共享或高可用性的系统至关重要。这里我们详细探讨这两个主题,并介绍如何通过特定的脚本来简化这一过程。 首先,**数据库同步**指的是将...

    mysql数据库的同步问题双机热备.pdf

    MySQL 数据库同步问题双机热备 MySQL 数据库同步问题双机热备是指在两个或多个 MySQL 服务器之间实现数据同步的过程。这种同步机制可以使得多个服务器之间的数据保持一致,从而提高数据的可靠性和可用性。 在 ...

    sqlserver与mysql数据库同步

    总结来说,SQL Server与MySQL数据库同步是一个复杂的过程,涉及多个步骤和技术选择。根据项目需求和资源,可以选择最合适的同步策略和工具,以实现高效、安全的数据同步。在实施过程中,务必对可能遇到的问题进行...

    java实现两个mysql同步主库的数据

    以上就是使用Java实现两个MySQL数据库同步的主要步骤和涉及的技术点。在实际开发中,你可能还需要关注性能优化、安全性、可扩展性等问题。通过这种方式,你可以构建一个可靠的数据库同步系统,保证数据的一致性,...

    如何在两台MySQL数据库间实现同步

    在开发环境中,有时需要在两台MySQL数据库之间实现数据同步,以确保数据的一致性和冗余。本教程将详细介绍如何在两台运行相同系统(FreeBSD 5.4)和软件(Apache 2.0.55、PHP 4.4.0、MySQL 4.1.15)的服务器上配置...

    同步数据,数据库同步,sql数据库同步

    同步当前数据库和服务器数据库的数据,使得两个数据库的数据一致,这个属于sql的高级应用,相信对你们都很有用处,也可以对你们的数据库能用有所提示,是一篇比较好的资料,由于该资料是本人开发的,所以希望尊重...

    Informatica连接Mysql数据库案例

    2. 数据同步:实时同步 Mysql 数据库和 Oracle 数据库的数据。 3. 数据集成:集成 Mysql 数据库和 Oracle 数据库的数据,实现数据的一致性。 Informatica 连接 Mysql 数据库可以实现数据的实时同步和集成,提高数据...

    sqlserver、mysql数据库同步备份工具

    这时,就需要第三方工具介入,如标题所提及的“数据库同步备份工具”。 这类工具通常具有以下特性: 1. **实时同步**:允许用户设置实时或计划的任务,以保持两个数据库之间的数据一致性。 2. **双向同步**:不仅...

    数据库同步软件,可实时同步Mysql,Sqlserver数据库,支持异构数据库

    SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用...

    同步两台mysql数据库

    标题"同步两台mysql数据库"指的是在两个或多个MySQL服务器之间进行数据复制和同步,确保数据的一致性。传统的MySQL同步通常涉及主从复制,即一个主数据库负责写操作,多个从库进行读操作并接收主库的更新。然而,这...

    两个MySQL数据库之间同步表结构及索引模式.md

    两个MySQL数据库之间同步表结构及索引模式

    MySQL数据库的主从同步备份在windows下实现

    MySQL数据库的主从同步备份是一种常见的高可用性和数据冗余策略,它允许在一个主服务器(Master)上执行写操作,而这些更改会自动复制到一个或多个从服务器(Slave)。在Windows环境下,这个过程需要一些特定的配置...

    mysql数据库同步

    ### MySQL数据库同步详解 在IT领域,特别是在数据库管理与维护方面,MySQL数据库的主从同步是一种常见的技术手段,用于实现数据的高可用性和容灾备份。本文将详细解析MySQL数据库的主从同步机制,包括其配置步骤、...

Global site tag (gtag.js) - Google Analytics