• MySQL主从复制


    原理

    主服务器在执行写的操作后 ,会生成log dump线程 来生成binaryLog文件给从机

    从机有两个线程,一个IO线程,一个SQL线程

    IO 线程会主动请求大哥的日志文件 ,小弟的SQL线程会读取解析生成SQL逐一执行

    注意

    1. 主机要开启binlog日志功能 ,通常为了数据安全考虑,从机也开启这个功能

    2. 从机开启IO线程 和SQL线程

    3. 尽量版本相同,要么主机的版本低于从机的

    4. 主从复制至少需要两个mysql服务

    5. 主机和从机需要时间同步

    主从复制

    1.一主一从

    2.主主复制

    3.一主多从

    4.多主一从

    5.联机复制

    配置文件

    【准备工作:所有机器安装好mysql就行了】

    1. 主(大哥的)机器

    #配置vi /etc/my.cnf 复制下面放在文件最下面就行
    ###################################################
    log-bin=master-bin #日志文件名 ,这个名字自己定义
    binlog-format=ROW  #三种格式:row、statement、mixed,
    #row  基于行的复制 把改变的内容复制过去,不是把命令执行一遍
    #statement 基于语句的复制,效率较高
    #mixed 一旦发现基于语句的无法精确的复制时,就采用基于行的复制,用的比较多
    server-id=1 #要求各个服务器的id必须不一样
    binlog-do-db=msb #同步的数据库名称
    binlog-ignore-db=mysql #这个库过滤掉一般不用复制
    expire_logs_days=7 #为避免占用磁盘,默认0不删除
    #跳过复制中的错误,避免slave端复制中断
    slave_skip_errors=1062 #指主键重复错误,1032错误是因为主从数据库不一致
    ##################################################
    [root@dlb ~]# systemctl restart mysqld 重启服务  
    #进入mysql 执行
    mysql> show master status; #查看状态 ,看同步的数据库名称在不
    +-------------------+----------+--------------+------------------+-------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-------------------+----------+--------------+------------------+-------------------+
    | master-bin.000001 |      156 | msb          |                  |                   |
    +-------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    ####################################################
    #给小弟配置下权限 进入mysql 这里可以省略,其实就是分配一个账号登录
    set global validate_password_policy=0;
    set global validate_password_length=1;
    grant replication slave on *.* to 'root'@'%' identified by 'Sony+168';
    flush privileges;

     2.小弟从机的配置

    ##配置vi /etc/my.cnf 复制下面的
    log-bin=master-bin #日志文件名 ,这个名字自己定义
    binlog-format=ROW  #三种格式:row、statement、mixed,
    server-id=2 #要求各个服务器的id必须不一样
    binlog-ignore-db=mysql #这个库过滤掉一般不用复制
    expire_logs_days=7 #为避免占用磁盘,默认0不删除
    #跳过复制中的错误,避免slave端复制中断
    slave_skip_errors=1062 #指主键重复错误,1032错误是因为主从数据库不一致
    #配置中继日志,默认采用 主机名-relay-bin的方式保存
    relay_log=liuchong-relay-bin
    #从机将事件写进自己的日志
    log_slave_updates=1
    #防止改变数据(只读操作,除了特殊线程)
    read_only=1
    #####################################################
    [root@iZbp1e0fmgc5gof1ly9cmlZ home]# vi /etc/my.cnf
    [root@iZbp1e0fmgc5gof1ly9cmlZ home]# systemctl restart mysqld #重启服务 
    [root@iZbp1e0fmgc5gof1ly9cmlZ home]# mysql -uroot -p
    change master to MASTER_HOST='47.101.165.96',MASTER_USER='admin',MASTER_PASSWORD='Amanda+3213',MASTER_PORT=3306,MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=156;
    #################################以下为测试端口复制出来的
    mysql> change master to MASTER_HOST='47.101.165.96',MASTER_USER='admin',MASTER_PASSWORD='Amanda+3213',MASTER_PORT=3306,MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=156;
    Query OK, 0 rows affected, 9 warnings (0.02 sec)
    
    mysql> start slave;   #启动从机线程,此时已经能够建成一主一从
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> show slave status\G    #这里是查看信息!注意没有分号
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 47.101.165.96
                      Master_User: admin
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: master-bin.000001
              Read_Master_Log_Pos: 156
                   Relay_Log_File: iZbp1e0fmgc5gof1ly9cmlZ-relay-bin.000002
                    Relay_Log_Pos: 325
            Relay_Master_Log_File: master-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes

    主从复制完成

  • 相关阅读:
    使用SignTool对软件安装包进行数字签名(二)--进行数字签名
    使用SignTool对软件安装包进行数字签名(一)--制作证书
    三角形相关算法--求解三角形顶点坐标
    子网掩码与子网个数、主机地址个数的关系
    pgsql中的lateral使用小结
    Git中rebase失败了如何进行恢复
    灰度发布
    go 中的WaitGroup
    pgsql中json格式数组查询结果变成了字符串
    Go中的unsafe
  • 原文地址:https://www.cnblogs.com/9080dlb/p/15719453.html
Copyright © 2020-2023  润新知