zoukankan      html  css  js  c++  java
  • 关于 MySQL 主从复制的配置(转)

     来源:http://www.oschina.net/bbs/thread/10388

    设置Mysql的主从设置很重要,有如下几点用处:

    1 做备份机器,一旦主服务器崩溃,可以直接启用从服务器作为主服务器
    2 可以直接锁定从服务器的表只读,然后做备份数据,这样不会影响主服务器的服务
    3 可以处理读写数据库的负载均衡

    阿权总结的设置主从的要点有如下:

    1 主从服务器的启动方式的不同点
    2 主服务器只读或者停止服务然后获取当前数据快照,清理日志或者重新开始记录日志
    3 从服务器一般需要只读,否则容易产生错误导致同步失败

    阿权制作主从的过程总结:

    1 停止数据库服务,并且删除当前的所有mysql日志(默认是mysql-bin.*)
    2 把当前的所有数据库打包,备用
    3 打包完成后,主服务器可以启动了
    4 把从服务器的同步日志删除(默认是mysql-relay-bin.*)
    5 把文件解压到从服务器的数据目录
    6 设置好cnf文件,启动即可

    当然,取得快照的方法还有别的:
    1 FLUSH TABLES WITH READ LOCK 锁定所有表
    2 打包文件或者是直接导出数据,比停止服务好的地方就是有一段读数据库的时间
    3 然后 unlock tables

    主从的配置区别:

    启动方式请参考《Mysql多实例启动
    主服务器没有设置 master的值,下面的参数影响同步:

    #设定不同步的数据库,这些库的修改不会记录到日志,可以添加多行
    binlog-ignore-db = test
    #设定记录的库,可以添加多行
    binlog-do-db = vnet



    从服务器设置了系列master的参数:

    master-host = 192.168.1.147
    master-port = 3308
    master-user = usr
    master-password = pwd
    master-retry-count = 999
    master-connect-retry = 60

    #并且可以设置忽略的库,可以添加多行
    replicate-ignore-db = testdb
    #设置仅处理的库,可以添加多行
    replicate-do-db = aslibra



    设置忽略的和处理的参数的一个就好,如果需要忽略哪些,就加上忽略的库,如果仅仅需要处理一两个,那就加上do-db的设置吧

    如何检查同步情况?

    show master status;
    show slave status;

    这里会列出当前同步的情况,包括同步哪些库,忽略哪些库

    如何检查发生同步错误?

    1 主服务器更新后没有反映在从服务器,这个是看的到的
    2 可以使用phpmyadmin看进程或者是命令 SHOW PROCESSLIST 
    主服务器会有一条slave用户的记录,比如

    slave   127.0.0.1:42157   无   Binlog Dump   598   Has sent all binlog to slave; waiting for binlog to be updated   ---  


    从服务器会有两条记录

    system user      无   Connect   724   Waiting for master to send event   ---  
    system user      无   Connect   187   Has read all relay log; waiting for the slave I/O thread to update it   ---  


    如果同步失败,则后一条没有

    同步特性及已知问题

    跨库的操作是不更新的,比如

    update dbtest.aslibra set domain='www.aslibra.com' where id=5



    更多内容可以参考《同步特性及已知问题》,这里就不详细列出了啦

    哪些从服务器操作会导致错误?

    1 删除表或者修改表结构会导致之后更新该表产生错误,可以恢复原先结构再继续同步就可以,错误如下

    080503  4:41:03 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000003' at position 244, relay log '/Data/mysql3309/var/mysql-relay-bin.000004' position: 381080503  4:44:00 [ERROR] Slave: Error 'Can't DROP 'id'; check that column/key exists' on query. Default database: 'dbtest'. Query: 'ALTER TABLE test DROP id', Error_code: 1091080503  4:44:00 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000004' position 252



    2 从服务器如果写入一条记录,自增字段加一,主键唯一性错误,这样主服务器就无法同步这样的数据,导致同步停止。如果不产生主键冲突的数据是不会有影响

    INTO aslibra (id, ddd) VALUES ('', '2008-05-02')', Error_code: 1062
    080503  4:36:44 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000003' position 244



    3 从服务器删除某条数据,主服务器再删除该条数据,不会产生错误

    阿权的总结:

    1 从服务器如果需要重新做同步数据,必须是主服务器开始记录日志的数据快照。所以快照很重要,可以用该快照立刻构建一个从服务器。
    2 日志只是记录sql语句,执行删除和更新如果与主服务器数据不同是不会产生错误
    3 如果执行插入数据,产生主键冲突则会导致错误,停止同步,除非从服务器执行本语句正常,则可以继续同步
    4 表结构修改如果返回错误,则也会导致同步停止

  • 相关阅读:
    迪杰斯特拉_优先队列 模板
    POJ3268(Dijkstra_邻接矩阵)
    Uva-10815
    Uva-10474
    同余方程
    欧几里得算法与扩展欧几里得算法
    大整数型的加法
    Uva442
    《哲学起步》读后感 读书笔记
    《论大战略》读后感 读书笔记
  • 原文地址:https://www.cnblogs.com/yuanermen/p/1797206.html
Copyright © 2011-2022 走看看