论坛首页 入门技术论坛

mysql-syn-数据库单项同步(主/从)

浏览 2610 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-20   最后修改:2009-12-22

 

这几天在网上查找了许多资料,几乎全部是雷同的信息,经过一番测试作出如下结论,经过本人测试。

 

主从单向数据同步

1、数据库版本
    主数据库/从数据库    版本号5.0.24a

2、分别修改(主从)mysql安装目录-根目录下的配置文件【my.ini】

3、我的测试环境是这样的
    主数据库机器ip地址:192.168.1.120
    从数据库机器ip地址:192.168.1.119

4、主/从机器中的配置细节如下

    0)、start.
    1)、按照官方的提法主/从数据库配置文件my.ini中的server-id = (num)的值不能相同即可。
    2)、修改主数据库配置文件my.ini文件找到[mysqld]标识符(建议在添加以下代码之前首先创建号要同步的数据库),键入以下代码
        log-bin=mysql-testsyn-bin    #--主库二进制日志文件名的前缀(会在data目录中出现)
        binlog-do-db=syntest        #--要同步的数据库
        server-id = 1            #--serverid和从库不同即可
    3)、步骤2)执行完毕后重启mysql服务,root用户登录执行以下命令
        1、创建用户syntest.拥有replication slave权限
            grant replication slave on *.* to "syntest"@"192.168.1.%" identified by 'syntest' with grant option;
        2、在设置syntest用户 增删改查,等权限。
    4)、查看主库状态,使用mysql自带命令行
        show master status;
        +---------------------------------+----------+------------------+------------------------+
        | File                                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
        +---------------------------------+----------+------------------+------------------------+
        | mysql-testsyn-bin.000003 |      640 | syntest           |                               |
        +---------------------------------+----------+------------------+------------------------+
        1 row in set (0.01 sec)

        根据提示可以看出,
            file=表示同步使用的索引文件(文件后最默认是从000001开始)
            position=偏移量
            Binlog_Do_DB=备份的数据库
            Binlog_Ignore_DB=忽略的数据库
        经过测试、如果从步骤 2)-3)配置完后当执行步骤4)时如果没有结果说明配置失败.
    5)、修改从数据库配置文件my.ini文件找到[mysqld]标识符(建议在添加以下代码之前首先创建号要同步的数据库),键入以下代码
        server-id = 2            #--serverid和主库不同即可
        master-host = 192.168.1.120    #--主机ip地址
        master-user = syntest        #--主机登录用户名
        master-password = syntest    #--主机登录密码
        master-port = 3306        #--主机端口
        master-connect-retry = 5    #--重试间隔时间(秒)
        replicate-do-db = syntest    #--同步db
    6)、步骤5)执行完毕后重启mysql服务,root用户登录执行命令
        show SLAVE status;
    7)、执行以下代码
        stop slave;
        start slave;
    8)、在主数据库中创建一张表(需要使用代码的方式创建表),在看从数据库.
    9)、end.

 

5、如何正确的使用同步,以下是测试到的步骤(同仁如有其它测试结果请一并贴出来 )
    1)、主从配置完后需要测试
        1、查看data目录下的(*.err)文件如果没有出现[ERROR]字符说明通信成功,从数据库中data目录.
        2、主从库中分别创建一张一模一样的表,注意第一次创建测试是否已通信成功,不能使用MySQL-Front等工具创建,不吃这一套;得用代码创建.
        3、与步骤2同时在写一个insert添加语句执行。
        4、查看以上2-3步骤皆为在主库中执行,于此同时查看从书库,如果有一模一样的数据则说明通信成功.
    2)、主/从双方的库中表保持一致,此时创建一张“临时表”作为测试是否通信.
        在保持一致的同时从库中表的内容不能与主表中的内容不一致
        【
            例如:test表在主从中同时出现,id字段将从1开始,地址从表中已经有了一条记录,说明占用了id为1值,此时在主库中表test添加一条记录
            id同时也是1,这时就通信失败了,由于数据库表字段唯一标识因此导致通信失败,则1、删除从表中的记录;2、必须重启服务,才能挽救通信.
        】
    3)、如果主从库中的配置---配置完成在启动mysql服务之前先删除data目录中的日志等文件,除了“目录”,“ibdata1”文件外其余全部删除.
    4)、在通信测试未成功之前不能使用工具创建表,添加记录等操作,第一次必须使用代码的形式来创建执行;通信成功后方可使用工具执行.
    5)、一旦通信成功切忌双方中data目录中的文件不能随意打开,原因:“由于mysql服务一旦启动则会自动根据设定的时间通信,如果打开索引等文件则就占用了IO流操作,固因此
        服务会自动终止通信(需要重启才能拯救).



6、同步实现大概的流程(同仁如有其它不同的看法与流程图,敬请贴出来交流 )

    1、主/从双方修改配置文件,通过某种通信两台机器知道谁是“主”,谁是“从”.
    2、查找“主”方是否配置成功,使用代码 show MASTER status;所返回的结果中记录了关于同步时所使用到的索引文件;根据log-bin=[文件前缀名称].00001,每重启一次则后面的编号会自动加一.
    3、“从”数据库机器mysql服务启动时根据配置信息找到主数据库,将会根据“主” show master status中的file字段信息,生成4个文件分别如下:
        第一次配置成功启动:
            *-relay-bin.000001(*号代表本机的“计算机名称”)
            *-relay-bin.index
            master.info
            relay-log.info
        第二次启动
            *-relay-bin.000001后面的编号会变
        以上提到的文件作用流程如下:
            1、“从”服务器启动mysql服务时,根据配置文件信息找到“主”服务器,根据 show master status 中的file字段信息首先创建master.info文件,记录了关于
            链接“主”服务器的参数配置信息,其中最主要的一条是:“以字段file的值”记录,
            2、其次创建relay-log.info文件,其中主要是记录以master.info文件中“以字段file的值”的一个关联.于此同时记录该文件与*-relay-bin.index文件的关联
            3、再次通过文件*-relay-bin.index中的记录在创建具体操作文件就是:(*-relay-bin.000001)索引文件.
            4、每次通信会将“主”服务器上的索引文件内容当下来存放在*-relay-bin.00000num索引文件中,同时,执行“主”最近更新的数据,到“从”服务器中.
    4、最简单的理解就是:
        1、“主”服务器启动后生成索引文件,用于记录对数据库更新的sql语句.
        2、“从”服务器启动后会根据“主”服务器上的索引文件生成本地索引文件,用于记录从“主”服务器上当下来的数据.
        3、“从”服务器根据设定的时间间隔从“主”服务器上抓取数据,然后在执行,最后成为本地数据.
    5、如图:
        流程图    /查看“流程图”目录.
        ... ...


        本流程图是根据以上实现步骤的实现,总结出自己对数据同步的流程图,同志们方可参考,如有不对的地方,请与我来信(594131528@qq.com),如果可以的话,提出修改建议等。。。谢谢合作。

感兴趣者请查看附件、其中包含了本人的理解,在测试中遇到了那些问题,等等。。。

 

  • 大小: 60.2 KB
   发表时间:2010-06-30  
写的 太详细了 !太棒了 !连流程图都有 ! 赞
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics