zoukankan      html  css  js  c++  java
  • mysql主从复制原理及步骤

    参考1:https://blog.csdn.net/qq_41768400/article/details/80774848

    参考2:https://blog.csdn.net/qq_35622837/article/details/81130776

     原理:

    1 master开启bin-log功能,日志文件用于记录数据库的读写增删
    2 需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,
    3 Slave 通过IO线程连接master,并且请求某个bin-log,position之后的内容。
    4 master服务器收到slave IO线程发来的日志请求信息,io线程去将bin-log内容,position返回给slave IO线程。
    5 slave服务器收到bin-log日志内容,将bin-log日志内容写入relay-log中继日志,创建一个master.info的文件,该文件记录了master ip 用户名 密码 master bin-log名称,bin-log position。
    6 slave端开启SQL线程,实时监控relay-log日志内容是否有更新,解析文件中的SQL语句,在slave数据库中去执行。

    步骤一:

    准备两个mysql,一个做主,一个做从。防火墙,selinux都要关闭,保证可以ping通对方

    //主服务器配置:
    vim /etc/ntp.conf
    
    //添加:
    server 127.127.1.0
    fudge 127.127.1.0 stratum 8
    service ntpd start    #因为同步数据 两个服务器的时间也要同步。

    稍后要在从服务器执行来同步时间

    //先找到配置文件目录
    /usr/bin/mysql --verbose --help | grep -A 1 'Default options'

    //编辑配置文件
    vim /etc/my.cnf
    server-id = 1 #设置服务器的id ,主从库都必须唯一且不同
    log-bin = master-bin #二进制日志文件名
    syn_binlog = 1 #开启二进制日志同步功能

    //数据库目录
    /var/lib/mysql

    auto.cnf文件中server-uuid的值和从库不能一样,可以编辑;#server-id和server-uuid主库和从库之间都不能相同

    其他内容都可以保持默认。

    步骤二:在主服务器登录mysql 给从服务器授权。

    mysql> grant replication slave on *.* to zs@'192.168.43.%' identified by '123456';

    授权用户zs 密码为123456 允许192.168.43.0的网络连接 一会儿要在slave上使用这个账号

    mysql> show master status;    #此命令查看主服务器的bin-log日志文件名称和position点

    从服务器就是要指定这个文件maste-bin.000001 (随着mysql增删修改日志文件名字也有可能改变)  和 107 (position点 主服务器增删修改都会改变)所以现在开始就不要再在主服务器创表干啥的了,

    mysqldump -uroot -p --opt --all-databases >/all_databases.sql  #导出主数据库的数据
    
    scp -r /all_databases.sql root@192.168.43.2:/   #用scp把数据复制到从服务器。

    因为主从复制是从主从关系建立完毕开始同步的。也就是现在 position 107之前的内容复制不了所以要手动复制主之前的数据导入从数据库。

    步骤三:从服务器配置

    /usr/sbin/ntpdate 192.168.43.22  #和主服务器同步时间。192.168.43.22为主服务器ip

    mysql -u root -p  </all_databases.sql   #导入数据
    vi /etc/my.cnf
    server-id = 2 #设置服务器的id
    log-bin = slave-bin #二进制日志文件名
    syn_binlog = 1 #开启二进制日志同步功能

    步骤四:修改后重启mysql服务

    进入从服务器的mysql

    change master to master_host='192.168.43.22',master_user='zs',master_password='123456',master_log_file='maste-bin.000001',master_log_pos=107;
    start slave;  #开启从库SQL线程 (关闭:stop slave)

     

    show slave statusG;    查看从服务器状态

    注意两个都要是yes才是正常。

    步骤五:查看效果

    在主服务器上创建个库看看。

    从数据库也会有

     

    同样删掉数据库从数据库也会复制。

    主库上删除一个数据库。

     

     从库上也没了。

  • 相关阅读:
    fopen & fcolse & fseek & ftell & fstat 文件操作函数测试
    python基础练习题30道
    2636652995 揭秘骗子qq
    python的异常处理try/except 万能处理exception
    类的装饰器的基本原理
    描述符的应用
    描述符
    组合的方式完成授权
    继承的方式完成包装__attr__
    类的内置方法__attr__介绍
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/10902143.html
Copyright © 2011-2022 走看看