zoukankan      html  css  js  c++  java
  • MYSQL主从复制

    主从复制原理 : 通过在主库记录二进制日志, 在从库重放日志.

    复制如何工作

    1.在主库更改记录到二进制日志

    2.备库将主库的日志复制到自己的中继日志

    3.备库读取中继日志的事件, 将其重放到备库数据之上.

    实际操作

    主库是阿里云 : 112.74.20.150   ,  

    备库是腾讯云 : 119.29.108.230

    复制是大部分是向后兼容的, 也就是说新版本的mysql可以作为老版本mysql的备库, 反过来就不行了.

    主服务器开启日志记录:  在配置文件 my.cnf  中 [mysqld] 添加下面两行 :

    log_bin = mysql-bin
    server_id = 10

    server_id 必须唯一,  默认指定是 1. 我这里改成了 10.   

    重启之后, 用  show variables like '%log_bin%'; 查看,  发现log_bin已经开启.

    备库上的修改大致相同

    log_bin = mysql-bin
    server_id = 2
    relay_log = /var/lib/mysql/mysql-relay-bin
    log_slave_updates = 1
    read_only = 1

     relay_log 指定中继日志位置和名字;

     log_slave_updates = 1 允许备库将其重放到事件也记录在自身到二进制日志中 ,   用与环形复制;

     read_only 阻止没有特权到线程修改数据.

    在主库上创建一个专门用于复制的测试帐号

    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'%' IDENTIFIED BY '1234';

    show master status;  记录下 FIle 和  Position 的值

    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000007 |      489 |              |                  |
    +------------------+----------+--------------+------------------+

    在从库上开始基本的复制命令

    CHANGE MASTER TO MASTER_HOST = '112.74.20.150',
    MASTER_USER = 'slave',
    MASTER_PASSWORD = '1234',
    MASTER_LOG_FILE = 'mysql-bin.000007',
    MASTER_LOG_POS = 489;

    先关闭复制  stop slave; 再执行复制操作   start slave; 这样就可以实现复制操作.

    这里有两点注意:

     mysql 默认只能12.7.0.0.0访问.  需要修改配置文件

    #bind-address           = 127.0.0.1       这一行注释掉

    如果复制失败, 主库上可以使用  flush logs; 刷新日志.

    在主库上可以看到由备库I/O线程向主库发起的连接

    mysql> show processlistG
    *************************** 1. row ***************************
         Id: 51
       User: slave
       Host: 119.29.108.230:39265
         db: NULL
    Command: Binlog Dump
       Time: 1477
      State: Master has sent all binlog to slave; waiting for binlog to be updated
       Info: NULL

    在备库上也可以看到两个线程,  一个I/O线程, 一个SQL线程.

    mysql> show processlistG
    *************************** 1. row ***************************
         Id: 41
       User: system user
       Host: 
         db: NULL
    Command: Connect
       Time: 1548
      State: Waiting for master to send event
       Info: NULL
    *************************** 2. row ***************************
         Id: 42
       User: system user
       Host: 
         db: NULL
    Command: Connect
       Time: 1483
      State: Slave has read all relay log; waiting for the slave I/O thread to update it
  • 相关阅读:
    Appium(一)安装
    Adb am/pm的使用
    RESTful API 设计指南
    选择物体生成Prefab
    C++网络开发Boost库
    Unity 猫眼效果
    React Native网络请求
    Unity高德LBS
    EasyTouch物体的旋转缩放
    Unity截屏分享朋友圈(微信)
  • 原文地址:https://www.cnblogs.com/tanxing/p/6617864.html
Copyright © 2011-2022 走看看