复制

复制

    让一台服务器的数据和另外的服务器保存同步
    MySQL支持的复制方案:基于语句复制,基于行复制。都是通过记录主服务器的二进制日志,并在从服务器上进行重放完成复制,都是异步的。从服务器上的数据并非随时都是最新的,也不保证从服务器上的延迟具体大小。

复制用途

    数据分布
    负载平衡,可以把读取分布在不同的服务器上。
    备份
    高可用性和故障转移
    测试MySQL升级

复制过程

    1.主服务器把数据更改记录到二进制日志中
    2.从服务器把主服务器的二进制日志事件拷贝到自己的中继日志中
    3.从服务器重放中继日志中的事件,把更改应用到自己的数据上
    从服务器处理过程:
              1.启动I/O从线程,开启一个普通的客户端连接,启动一个特殊的二进制日志转储进程,从主服务器的二进制日志中读取事件。不会对事件进行轮询。如果跟上了主服务器,就会进入休眠状态,并等待有新事件发生时主服务器发出的信号。I/O线程把事件写入从服务器的中继日志中。
              2.SQL从线程读取中继日志,并重放其中的事件,更新从服务器的数据。中继日志在操作系统的缓存中,开销很低
    从服务器打开的连接在主服务器上启动一个线程。
    I/O线程可以独立于SQL线程,从服务器上的复制是串行的。

创建复制

    1.在每一台服务器上建立复制账号
    2.配置主从服务器
    3.指导从服务器进行连接于复制
    创建复制账号
        GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO username@'192.168.0.%' IDENTIFIED BY 'passwd';
    配置主从服务器
        主服务器的my.cnf中输入:log_bin = mysql-bin(日志文件位置)
                                                       server_id = 10
        SHOW MASTER STATUS(验证二进制文件是否建立)
        从服务器配置:log_bin = mysql-bin
                                   server_id = 2
                                   relay_log = mysql-relay-bin(定义中继日志的位置和文件名)
                                   log_slave_updates = 1(使从服务器把复制的事件记录到自己的二进制日志中)
                                   read_only = 1(阻止任何没有特殊权限的线程更改数据,通常不够实际)
    启动复制
        在从服务器中使用命令启动复制:CHANGE MASTER TO MASTER_HOST='server1', MASTER_USER=' ',MASTER_PASSWORD=' ',MASTER_LOG_FILE = '   ',MASTER_LOG_POS=0;
                                                                    SHOW SLAVE STATUS\G查看从服务器设置是否正确
                                                                    START SLAVE;开始复制
                                                                    SHOW SLAVE STATUS\G(查看从服务器I/O线程和SQL线程的状态)
                                                                    SHOW PROCESSLIST\G(主服务器上可以看到从服务器建立的连接,从服务器上可以看到两个线程,I/O和SQL)
    从另一个服务器开始复制
        主从服务器同步数据条件:1.某个时间上主服务器数据的快照
                                                        2.主服务器当前的日志。可以用SHOW MASTER STATUS查找主服务器的日志文件坐标
                                                        3.从快照时间到现在的主服务器二进制日志文件
        复制方法:1.冷拷贝,关闭主服务器把文件拷贝到从服务器,启动主服务器,它会启动一份新的二进制日志,利用CHANGE MASTER TO在二进制日志的开头启动从服务器。
                            2.热拷贝
                            3.使用mysqldump。使用InnoDB,用mysqldump --single-transaction -all-databases --master-data=1 --host=server1 | mysql -host=server2来转储主服务器的内容到从服务器。如果没有使用事务表,使用--lock-all-tables。
                            4.使用LVM快照或备份。可以使用主服务器的快照或备份来初始化从服务器,然后使用CHANGE MASTER TO
    注意复制配置
        主服务器设置sync_binlog = 1,每次提交事务时候二进制日志同步到磁盘上。
        如果是InnoDB:innodb_flush_logs_at_trx_commit=1  innodb_support_xa=1 innodb_safe_binlog
        从服务器:skip_slave_start(阻止从服务器在崩溃后自动启动) read_only(防止大部分用户更改非临时表)
复制其他事项
    基于命令复制
        通过记录主服务器上改变数据的查询来完成工作。当从服务器从中继日志中读取事件并执行它的时候,实际上执行了和主服务器同样的查询。
    基于行复制
        把实际的数据更改记录到二进制日志中。缺点二进制日志会变得大,但可以高效的复制数据
    其他文件
        Mysql-bin.index 和二进制日志文件同名。记录了磁盘上的二进制日志文件
        Mysql-relay-bin.index  中继日志的索引文件
        Master.info  包含了从服务器连接主服务器需要的信息
        Relay-log.info  包含了从服务器的当前二进制日志和中继日志的坐标
        expire_logs_days 定义MysSQL清除过期日志的方式
    发送复制事件到其他服务器
        log_slave_updates把一台从服务器变成主服务器。指导MySQL把自己执行的事件写到二进制日志,然后自己的从服务器可以取得这些事件并执行它。

复制拓扑

    基本原则:1.一个MySQL从服务器只能有一个主服务器
                        2.每个服务器有唯一的服务器ID
                        3.一个主服务器可以有很多从服务器
                        4.如果打开了log_slave_updates,一个从服务器能把主服务器的改动传播下去,并且成为其他从服务器的主服务器
    一主多从
        在写入较少,读取较多的时候最有用。
        用途:  为不同的角色使用不同的从服务器
                      把一个从服务器当成待命主服务器,除了复制就没其他数据流量
                      把远程的数据中心作为从服务器,以备灾难恢复
                      延迟一个或多个从服务器,以备灾难恢复
                      为备份,培训,开发或测试使用从服务器
    主动-被动模式下的主主复制
            有很强的容错和高可用,有一个服务器是只读的‘被动’服务器
            可以轻易交换主动、被动服务器角色,故障转移和故障恢复很容易
            配置方式:1.启用二进制日志,选择唯一服务器ID,添加复制账号
                                2.启用记录从服务器更新功能
                                3.把被动服务器设置为只读
                                4.确保服务器有相同数据
                                5.启用服务器上MySQL
                                6.将每个服务器设置为对方的从服务器,使用新创建的二进制日志工作

定制复制解决方案

    选择性复制
        复制少量数据到从服务器
        简单的方法:把数据分到不同的数据库中,然后把数据库移到不同的从服务器上。
    数据归档
        在主服务器上执行删除查询并保证它不在从服务器上执行,以把数据保存在从服务器上,并从主服务器上删除。
        方法:1)选择性的在主服务器上禁用二进制日志
                    2)在从服务器上使用replicate_ignore_db规则
    从服务器用于全文搜索
        在一台从服务器上,通过把某些表的存储引擎变为MyISAM实现全文搜索
    创建日志服务器
        创建没事数据的“日志服务器”,目的使其容易重放并且过滤二进制日志事件

复制管理

    监控复制
    测量从服务器延迟
    确定主,从服务器是否一致
    从主服务器重新同步从服务器
    改变主服务器
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值