• 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

  • 相关阅读:
    一个群发站内信的设计
    javascript typeof 小结
    setInterval,setTimeout的用法
    C#中常见异常类
    输入框关闭自动完成功能
    【转】javascript判断一个元素是否数组
    jquery的动态统计输入字符数方法
    giedview绑定数据格式化字符串
    jQuery 1.4单独为某个动画动作设效果
    GridView行编辑中找DropDownList控件
  • 原文地址:https://www.cnblogs.com/greatqn/p/2367664.html
Copyright © 2020-2023  润新知