• 从无到有实现主从复制


    读写分离的实现需要两个步骤:

    第一:读写操作分别指向不同服务器。

    第二:不同服务器的数据保持同步。

    这里面的知识含量非常的大,我要做的是将流程尽量简化进行博客记录,方便日后更加直接高效的部署数据库。

    读写操作部分对于开发者来说最常用的方式是在项目中根据sql类型进行选择不同的数据库地址,如insert update 走主库  select走从库,还有一种方式是使用第三方开发的中间件服务。

    这篇博客主要记录主从复制。

    在网上找了一张图,虽然丑了点,但意思就是这样

    如图所示,完成主从复制的整个流程需要三个进程:

    (为了思路清晰,我特意按照顺序进行阐述)

    前提:开启二进制日志记录后,主库每次提交事务完成数据更新前,会将数据更新的事件记录到二进制日志中,然后才会进行事务提交。

    1.从库I/O线程:此线程会跟主库建立一个客户端连接,连接建立完成后,主库上会启动一个二进制转储线程。

    2.主库二进制转储线程:负责读取主库上的二进制日志中的事件,读取到后,从库I/O线程会将事件记录到从库的中继日志中。

    3.从库的SQL线程:该线程从中继日志中读取事件并在从库中执行,从而实现数据更新。

    接下来,我将根据标准流程部署主从复制。

    我这里开了两台虚拟机,centos1为主库,centos2为从库。

    创建复制账号:
    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO qq000@'192.168.31.%' IDENTIFIED BY 'ZZZxxx/123456'
    此sql主从都需执行一遍,至于主从都赋予这两个权限是因为从库需要有随时变成主库的准备。

    主库配置:
    vim /etc/my.cnf

    log_bin = mysql-bin
    server_id = 1

    (log_bin为二进制日志指定名称可自定义,server_id需要唯一,我的centos1设为1,centos2设为2)

    配置好后重启MySQL: 

    systemctl restart mysqld

    在MySQL中执行:

    show master status;

    会看到MySQL已经创建了二进制日志文件

    从库配置:
    vim /etc/my.cnf

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

    (

    relay_id指定中继日志的路径,

    log_slave_update允许从库将其重放的事件也记录到自身的二进制日志中,

    read_only是设置从库只读状态 但不会影响slave同步复制的功能。

    )

    重启MySQL:

    systemctl restart mysqld

    在从库中执行sql进行复制目标的配置:

    CHANGE MASTER TO 
    MASTER_HOST='192.168.31.244',
    MASTER_USER='qq000',
    MASTER_PASSWORD='ZZZxxx/123456',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=0;

    开始复制:

    START SLAVE

    查看状态:

    SHOW SLAVE STATUS

    接下来很大几率就是解决各种报错的问题了

    这两个字段 必须为yes

    如果不对,那么下面这个字段会有报错信息:

    或者配置信息有误,或者防火墙不通(firewalld selinux),或者从库本身的数据和主库有比较大的差异。

    如果出现表存在库存在的错误 可以用如下两条三条sql搞定:

    stop slave;
    set global sql_slave_skip_counter=1;
    start slave;

    错误处理完成后 在主库创建一张表test_a

    从库自动同步

  • 相关阅读:
    机器学习系列丛书
    Growing Pains for Deep Learning
    What qualities characterize a great PhD student
    PHP中$_SERVER的具体參数与说明
    JavaScript总结(二) 系统分析
    .net中将DataTable导出到word、Excel、txt、htm的方法
    World Wind Java开发之十五——载入三维模型
    插入排序:二路插入
    使用HashMap对象传递url參数有用工具类
    mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/8045274.html
Copyright © 2020-2023  润新知