zoukankan      html  css  js  c++  java
  • mysql主从同步操作,及队列设计

    1.mysql主从同步操作
    参考搜索文章:
    http://7056824.blog.51cto.com/69854/400642
    http://lymrg.blog.51cto.com/1551327/696132
    http://tech.it168.com/a2009/0526/577/000000577322.shtml
    http://www.aslibra.com/blog/read.php?1038
    http://www.cnblogs.com/yuanermen/archive/2010/08/11/1797206.html
    http://www.linux521.com/2009/database/200901/170.html
    http://www.xuephp.com/main/detail.php?type=database&cid=16894


    主库:
    1> my.cnf
    log-bin=master-bin 二进制文件的名字,开启二进制日志
    log-bin-index=master-bin.index 正在使用的二进制文件的索引目录
    binlog-format=maxed
    server-id=1

    binlog-do-db = yourdb 需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可(据说是危险的)
    binlog-ignore-db = mysql 不需要备份的数据库苦命,如果备份多个数据库,重复设置这个选项即可

    2> server mysqld restart
    3> 检测修改是否有效
    mysql>show master status; 不应为空
    mysql>show variables like 'log_bin'; 不应为NO
    mysql>reset master; (清除日志文件)
    mysql>show master logs;
    4> 添加同步用户
    mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO repl@'192.168.1.%' IDENTIFIED BY 'passwd';
    mysql>FLUSH PRIVILEGES;
    5> 上锁
    mysql> FLUSH TABLES WITH READ LOCK;
    6> 同步现有的数据库
    tar -zcvf /tmp/mysql-yourdb.tar.gz ./yourdb
    scp mysql-yourdb.tar.gz root@192.168.1.103:/tmp/mysql-yourdb.tar.gz
    7> 解锁
    mysql> show master status;
    mysql-bin.000002 |      106 |
    记录该值。以后设置从服务器时需要使用这些值。
    它们表示复制坐标,从服务器应从该点开始从主服务器上进行新的更新。
    mysql> unlock tables;

    从库:
    1> 复制原库数据
    service mysqld stop
    tar -zxvf mysql-yourdb.tar.gz 注意解开之后的目录权限.
    2> my.cnf
    server-id=2
    3> 测试主库连接
    mysql -urepl -h 192.168.1.105 -P 3306 -ppasswd
    不通时检查网络,端口.(iptables)
    3> 启动从库
    mysql>change master to
    master_host='192.168.1.105',
    master_user='repl',
    master_password='passwd',
    master_port=3306,
    master_log_file='mysql-bin.000002',
    master_log_pos=106,
    master_connect_retry=30;
    4> 启动复制进程
    mysql> START SLAVE;
    5> 检查状态
    mysql> show slave status \G;
    上面出现: Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 表示复制正常

    2.同步过程
    http://www.diybl.com/course/6_system/linux/Linuxjs/2008108/149090.html
    客户端--D->主库sql--A->主库binlog--B->从库relay-log--C->从库sql.
    如果从库也开启binlog,则还可以继续级联同步下去.
    mysql的同步过程是异步的,从库可以在任意时间开启,继续之前的同步.日志队列可以保证不会错过一条语句.
    从库在线时,这个异步过程还是相当的快的.因为主库有更新时,会通知从库来取日志,而不是从库定时刷新主库.
    A应该是原子性的,B,C的操作使数据达到最终一致性.
    B,C出错时,同步过程会停止,等待人工干预.
    D,C执行的是一样的语句.为了达到分布式执行的效果,mysql在主从两台机器上都写了日志文件.
    简化,独立了B的操作,B只要完成binlog到relay-log的过程就好了.

    3.队列设计
    1> 日志文件单向增长
    log-bin-index 日志文件索引
    mysql-bin.000002 某日志文件
    pos 坐标
    从库按参数 master_log_file='mysql-bin.000002',master_log_pos=106, 来定位从队列的哪个位置开始读取数据.
    对relay-log也是一样的定位.
    3> 日志清理
    http://www.jzxue.com/shujuku/mysql/201102/22-6298.html

  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/greatqn/p/2367664.html
Copyright © 2011-2022 走看看