• mysql 复制(主从复制)


    一、概述

      让一台服务器的数据与其他服务器数据保持同步。一台主库的数据可以同步到多台备库上,而备库本身也可以配置成其他服务器的主库。

      主要应用:

      1) 数据分布

      2) 负载均衡

      3) 伪备份。在备份基础上能增加更安全的技术补充

      4) 高可用性和故障切换。避免mysql单点失败

      5) 升级测试。升级数据库前,将数据复制到备库,使得查询能够在备库按照预期执行。

      支持两种复制方式

      1) 基于语句的复制

      2) 基于行的复制

      两种方式复制原理一样:在主库上记录二进制日志、在备库重放日志 实现异步的数据复制。异步代表在同一时间点备库的数据与主库不一致,几秒,几分甚至几个小时的延迟。

      复制是向后兼容,即备库数据库版本高于主库 而不能是 低于主库

      关于开销:

      1) 启用二进制日志带来的开销;

      2) 每个备库也会对主库增加一些I/O开销

      3) 锁竞争也会阻碍事务的提交

    二、复制的工作原理

      1. 在主库上把数据更改记录到二进制日志 (binary log) 中。

      2. 备库将主库上的日志复制到中继日志 (relay log) 中。

      3. 备库读取中继日志中的事件,将数据放入备库中。

      

    三、配置复制

      1. 创建复制账号

        建议为每台数据库服务器创建相同账号。

    mysql> grant replication slave,replication client on *.* to repl@'192.168.0.%' identyfied by 'password';

      2. 配置主库  

    vi /etc/my.conf 
        [mysqld]
        log-bin=mysql-bin   //[必须]启用二进制日志
        server-id=10      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

      

      3. 配置备库

    vi /etc/my.conf 
        [mysqld]
        log-bin=mysql-bin   //[非必须]启用二进制日志
        server-id=6     //[必须]服务器唯一ID,默认是1,一般取IP最后一段

      4. 分别重启数据库

    /etc/init.d/mysql restart

      5. 登录主服务器的mysql,查询master的状态  

    mysql>show master status;
           +------------------+----------+--------------+------------------+
           | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
           +------------------+----------+--------------+------------------+
           | mysql-bin.000004 |      308 |              |                  |
           +------------------+----------+--------------+------------------+
           1 row in set (0.00 sec)
           注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

    记下file 和 position 用于配置备库

      6. 配置备库 

    mysql>change master to master_host='192.168.145.10',master_user='repl',master_password='password',
        master_log_file='mysql-bin.000004',master_log_pos=308;   //注意不要断开,308数字前后无单引号。

      7. 启动从服务器复制功能 

    Mysql>start slave;   

      8. 检查从服务器复制功能状态

    mysql> show slave statusG
    
               *************************** 1. row ***************************
    
                  Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.145.10  //主服务器地址
                  Master_User: repl//授权帐户名,尽量避免使用root
                  Master_Port: 3306    //数据库端口,部分版本没有此行
                  Connect_Retry: 60
                  Master_Log_File: mysql-bin.000004
                  Read_Master_Log_Pos: 600     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
                  Relay_Log_File: ddte-relay-bin.000003
                  Relay_Log_Pos: 251
                  Relay_Master_Log_File: mysql-bin.000004
                  Slave_IO_Running: Yes    //此状态必须YES
                  Slave_SQL_Running: Yes     //此状态必须YES
                        ......
    
    注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

    参考:

      1) 高性能mysql第三版

      2) itwork的blog

  • 相关阅读:
    Socket send函数和recv函数详解
    isdigit()函数用法
    C语言的那些小秘密之字节对齐
    The Five Best Linux BitTorrent Clients
    怎么计算网站高峰期并发量和所需的带宽?
    软件需求包括3个不同的层次 业务需求、用户需求和功能需求
    右键删除选中的行总提示rowIndex
    SQL Server[转]SQL Server中临时表与表变量的区别
    面向对象的软件工程应用浅研
    OO开发思想:面向对象的开发方法(Object oriented,OO)
  • 原文地址:https://www.cnblogs.com/hejun695/p/5520149.html
Copyright © 2020-2023  润新知