mysql主从基础知识

mysql主从复制

mysql日志
二进制日志
数据目录 mysql.bin.XXXXXXXXXX
滚动:达到最大上限。flush logs;服务器重启
mysql>PURGE
二进制日志的格式:
statement 不建议使用
row 一般使用
mixed

    mysql-bin.index 二进制日志文件的索引文件
    mysql >SHOW MASTER STATUS;
    mysql >SHOW BINARY LOGS;
    mysql >SHOW BINLOG EVENTS IN "file";

    event
            timestamp
            position,offset,operstion server_id

    即时点还原,用二进制日志恢复的数据和原始数据会有可能不一样。因为二进制记录日志的时候,有些事物执行的时候是并行的,所以会导致恢复的时候会有不一样。   二进制日志恢复数据很慢。

    mysql的隔离级别:
        READ-UNCOMMITTED
        READ-COMMITTED
        REPEATABLE-READ     + STATMENT 很有可能导致二进制日志恢复的和源数据不一样。建议raw格式
        SERIAILZABLE

主从模型:
master数据库执行语句,会保存一个事件。记录本地二进制文集
把二进制日志产生的事件发送到另一台数据库slave服务器上,
先保存到relay log 中继日志。
另一台服务器根据这个日志事件,执行写操作。
从的服务器会慢一点。如果主服务器上如果写操作太快的话,从数据库同步会慢一点。
默认要异步。同步会导致瓶颈。

        从数据库上不应该允许写操作。只让它能读就行了。

        可以一主多从。
            只保证一个节点,同步到了信息。其他的不管。
            从服务器和主服务器有可能不在一个机房里。


        从数据库服务器就不需要记录二进制日志文件了。没必要。
        但是一个从可能是从的从。所以有的情况下也有需要。多级复制。

        复制的作用
            辅助实现备份。
            高可用
            异地容灾
            最重要的就是分摊负载了。。scale out。
        读 从服务器
        写 主服务器
        不能在一个服务器上不能同时读写。

多个从的时候,负载均衡器,找一个mysql代理,能将mysql语句读写分离。rw-splitting
可以把多个从mysql做一个lvs。
查询到的先存到memcache缓存中,再一次查的时候先查memcache。再查从服务器。
主向从服务器,每一个都要发一次二进制文件。会导致大量IO。
单独拿出来一个从,负载给其他从发送二进制文件。这个从,只负责发送。本地不需要保存。要提供二进制文件。要有中继日志。但是不写又没有二进制文件。但是写了又浪费io。
block hole 。写到block hole里。不会保存。但是会产生二进制文件。

简化结构:
master slave
主从结构中 不使用mysql代理,如何让主的负责写,从的负责读。
比如让php程序(论坛)自己寻找主从。比较麻烦。

双主模型。但并不建议使用。
    能分担读操作。但是对写操作无法减轻。

如果写实在是太大太多
分库,分表。
把大数据库拆分。垂直拆分。热分。
水平拆分表。

事物日志
错误日志
一般查询日志
中继日志
慢查询日志

一个mater对应n个slave
一从只能属于一个主服务器。
mysql5.6以后复制上 有了gtid。使得复制更加安全。不会产生数据混乱。
引入了多线程复制 multi-thread replication

配置mysql复制的基本步骤

master
    1.启用二进制日志
        log-bin = mater-bin
        log-bin-index = master-bin.index
    2 选择一个唯一的server-id
        server-id = {0-2^32}
    3创建具有复制权限的用户
        REPLICATION SLAVE
        REPLICATION CLIENT

SLAVE
    1 启用中继日志
        relay-log =relay-log
        relay-log-index =
    2 选择一个唯一的server-id
        server-id ={0-2^32}
    3 连接至主服务器,并开始复制数据:
        CHANGER MASTER TO
        MASTER_HOST = '',MASTEER_PORT='',MATER_LOG_FILE='',MASTER_LOG_FILE_POS=''
        MASTER_USER='',MASTER_PASSWORD=''
        START SLAVE;
    mysql的复制线程
        主 提供dump线程。 从 io线程 ,io接受保存至中继日志。sql进程读取中继日志。
        执行sql。 IO_Thread SQL_tHREAD

具体步骤:

mysql要5.5或者5.6的?

用5.1的做。
修改master配置文件vim /etc/my.cnf
port=3306
log-bin=/var/lib/mysql/mysql-binlog
server-id=1
binlog_do_db=handb

innodb_file_per_table=1

修改slave配置文件
server-id=2
master-host=172.25.254.118
master-user=han
master-password=han
master-port=3306
master-connect-retry=5
replicate-do-db=handb

master:
mysql>grant replication slave,reload,super on . to han@172.25.254.119 identified by ‘han’;
mysql>create database handb;

show master status; 

slave
mysql -uhan -phan -h 172.25.254.118
mysql>show slave status;

             Slave_IO_Running: Yes

如果同步不成功
主库
slave stop
show master status;
手动同步
mysql>change master to
master_host=”
master_user=
master_password=
master_port=
master_log_file=
master_log_pos=

slave start

跳过异常
slave stop
SET GLOBAL sql_slave_skip_counter =1;
slave start

1 创建主库 从库
2 dump主库数据灌到从库
3 修改主库 从库配置
4 主库grant 从库 start slave

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值