zoukankan      html  css  js  c++  java
  • 数据库的数据同步

    前言

    众所周知,随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,而且一般的系统“读”的压力远远大于“写”,因此我们可以通过实现数据库的读写分离来提高系统的性能。

    实现思路
    通过设置主从数据库实现读写分离,主数据库负责“写操作”,从数据库负责“读操作”,根据压力情况,从数据库可以部署多个提高“读”的速度,借此来提高系统总体的性能。

    要实现读写分离,就要解决主从数据库数据同步的问题,在主数据库写入数据后要保证从数据库的数据也要更新。


    主从数据库同步的实现思路如图:

    主服务器master记录数据库操作日志到Binary log,从服务器开启i/o线程将二进制日志记录的操作同步到relay log(存在从服务器的缓存中),另外sql线程将relay log日志记录的操作在从服务器执行。
    记住这张图,接下来基于这个图实际设置主从数据库。

    主从数据库设置的具体步骤
    首先要有两个数据库服务器master、slave(也可以用一个服务器安装两套数据库环境运行在不同端口,slave也可以举一反三设置多个),我们穷人就买虚拟云服务器玩玩就行 0.0。以下操作假设你的两台服务器上都已经安装好了mysql服务。

    1.打开mysql数据库配置文件

    vim /etc/my.cnf

    2.在主服务器master上配置开启Binary log,主要是在[mysqld]下面添加:

    server-id=1
    log-bin=master-bin
    log-bin-index=master-bin.index

    3.重启mysql服务

    service mysql restart

    ps:重启方式随意

    4.检查配置效果,进入主数据库并执行

    mysql> SHOW MASTER STATUS;

    可以看到下图表示配置没问题,这里面的File名:master-bin.000001 我们接下来在从数据库的配置会使用:

    5.配置从服务器的 my.cnf

    在[mysqld]节点下面添加: 

    server-id=2
    relay-log-index=slave-relay-bin.index
    relay-log=slave-relay-bin

    这里面的server-id 一定要和主库的不同。

     配置完成后同样重启从数据库一下

    service mysql restart

    6.接下来配置两个数据库的关联

     首先我们先建立一个操作主从同步的数据库用户,切换到主数据库执行:

    mysql> create user repl;
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从xxx.xxx.xxx.xx' IDENTIFIED BY 'mysql';
    mysql> flush privileges;

    这个配置的含义就是创建了一个数据库用户repl,密码是mysql, 在从服务器使用repl这个账号和主服务器连接的时候,就赋予其REPLICATION SLAVE的权限, *.* 表面这个权限是针对主库的所有表的,其中xxx就是从服务器的ip地址。 
    进入从数据库后执行:

    mysql> change master to master_host='主xxx.xxx.xxx.xx',master_port=3306,master_user='repl',master_password='mysql',master_log_file='master-bin.000001',master_log_pos=0;

    这里面的xxx是主服务器ip,同时配置端口,repl代表访问主数据库的用户,上述步骤执行完毕后执行start slave启动配置:

    mysql> start slave;

    停止主从同步的命令为:

    mysql> stop slave;

    查看状态命令,G表示换行查看

    mysql> show slave status G; 

    可以看到状态如下:

    这里看到从数据库已经在等待主库的消息了,接下来在主库的操作,在从库都会执行了。我们可以主库负责写,从库负责读(不要在从库进行写操作),达到读写分离的效果。

     

    我们可以简单测试:
    在主数据库中创建一个新的数据库:

    mysql> create database testsplit;


    在从数据库查看数据库:

    mysql> show databases;

    可以看到从数据库也有testsplit这张表了。在主数据库插入数据,从数据库也可以查到。
    至此已经实现了数据库主从同步

    原文链接:https://blog.csdn.net/starlh35/article/details/78735510 

  • 相关阅读:
    一提黄金肯定就是西方的货币史
    封装QtCore(在非Qt项目里使用QString,QJson,QFileInfo,QFile等类)
    Qt 自定义事件(三种方法:继承QEvent,然后Send Post就都可以了,也可以覆盖customEvent函数,也可覆盖event()函数)
    MAC 设置环境变量path的几种方法
    深入Qt 学习 -- 反射机制(比较简单清楚)
    排序
    寄存器,cache、伙伴系统、内存碎片、段式页式存储管理
    NET Core项目
    消息队列
    RedisHelper
  • 原文地址:https://www.cnblogs.com/fengyuduke/p/11138966.html
Copyright © 2011-2022 走看看