mysql数据库架构和同步复制流程

在线网址:

https://www.syncnavigator.cn/chm/index.htm

 

官网下载:https://www.syncnavigator.cn

创建第一个同步项目


使用 HKROnline SyncNavigator 创建一个数据库同步项目。只需要通过简单的配置,创建完成后您可以随时执行数据库同步任务。

1. 点击 "SyncNavigator(Client)" 图标进入系统。

2. 在登录界面中输入连接到的服务器地址,点击 "确定" 按钮开始连接。

  • 注意:这里不是登陆您的数据库,而是登陆到本软件的管理端。
  • 默认情况下直接点击 "连接" 按钮即可(本机默认已经安装)。
  • 默认服务器登录用户名为 "admin" 密码为空。
  • 本机服务器地址 = 127.0.0.1 。
  • 您可以使用域名或者IP地址作为服务器地址。如果指定了端口号可以使用 IP:Port 方式填写。

mysql数据库架构和同步复制流程_第1张图片

3. 切换到 "同步管理" 面板中点击 "新建" 按钮开始创建同步项目。


4. 首先切换到 "来源数据库" 选项卡。填写同步的来源数据库信息。 

  • 一般情况下只需要输入数据库地址,数据库名称,登录用户名,登录密码。

  • 数据库地址: 连接到的数据库地址。可以是域名或者IP地址。如果指定了端口号可以使用 IP:Port 方式填写。
  • 数据库名称: 使用的数据库名称。如果已经指定了默认的登录数据库可以为空。
  • 登录用户名: 登录数据库服务器使用的用户名。如果需要使用Windows账户登录请变更 "登录方式"
  • 连接测试: 测试输入的信息是否正确。如果连接失败则会返回具体错误信息。

 

5. 切换到 "目标数据库" 选项卡。以相同的方式填写同步的目标数据库。 

  • 您只需要创建一个新的目标数据库,软件会自动创建最大兼容的表结构。

  • 如果您希望目标数据库与来源数据库表结构完全一致,您只需要在目标数据库创建一个空表结构即可。
  • 当您使用 MySQL 作为来源数据库时,同步的表至少需要一个主键。
  • 目标数据库不应包含外键约束,因为它可能导致部分数据无法同步。
  • 如果您的目标数据库与来源数据库结构(如字段类型,约束)不兼容,这可能导致部分数据无法同步。
  • 假设您设置来源库为 192.168.1.2 ,设置目标数据库为 192.168.1.3, 那么数据将从192.168.1.2 同步到 192.168.1.3。如果您的方向设置错误,可能会导致数据被覆盖。

6. 切换到 "同步内容设置" 选项卡。选择需要同步的数据库表。

  • 如果需要设置每个表的具体内容可以点击 "详细设置" 按钮进行调整。

  • 您可以设置条件过滤。比如只查询评分大于90的表记录,或者隐藏不需要同步的字段。
  • 如果在这一个步骤未勾选任何表则不会同步任何内容。

    在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的。

    首先我们来说说数据库的架构。

    1、mysql主从架构,如图:

    这种架构基本上90%以上会采用的数据库架构。这种架构的
    优点:
    1、数据库架构简单
    2、维护方便
    缺点:
    1、master存在单点问题,不能停机维护
    2、读压力大slave过多的话,主从同步会影响master的性能

    2、Dual Master 复制架构
    上面的主从架构存在明显的单点master问题,master不能停机维护,那么就有了接下来这猴子那个双主架构。如图:

    这种双主架构,数据库有两个主,主和主之间是有双向复制的,但是我们应用程序切记不能有一个写入口,不能同时两个master都做写操作,这样可以避免可能出现的数据不一致的情况,另外一台主机视情况而定,如何读压力大,另外一台主机可以做读操作,读压力不大,另外一台主机纯粹是为了做多活做主的备份,可以用第三方工具做主备切换,比如keepalived。
    这种双主架构的
    优点:
    1、不存在master的单点问题
    缺点:
    1、读压力大的时候,扛不住

    3、级联复制架构(Master — Slaves — Slaves …) …)
    级联复制架构是为了解决大量slave连到master造成master性能下降的问题。那么架构图如下:

    从架构图看,由slave来把数据同步到另外的slave,这样连接到master节点的slave就变少了。
    优点:
    1、减轻了master复制数据的压力
    缺点
    1、存在数据延迟的问题

    4、Dual Master 与级联复制结合架构(Master - Master - Slaves)
    前面的双主和级联复制都存在问题,现在这个架构是结合了这两种的架构,架构图如下:

    这种架构就集合前面两种架构的优点
    优点
    1、不存在master单点问题
    2、减轻了写节点master的复制压力
    缺点
    1、写节点master挂了以后,另外一台master变成写节点,挂了的master启动以后,要把所有slave切换到这台启动的master上做数据同步。

    前面讲到了4种数据库加过,里面大量提到了数据库同步的概念,那么接下来说说mysql数据库同步流程,流程图如下:

    mysql默认是采用的异步复制模式,流程如下:
    master端
    1、用户提交
    2、写binlog日志
    3、引擎级别提交
    4、结果返回客户端程序

    slave端
    1、master端event监控到binlog日志变化,通知给master端的dump进程
    2、dump进程通知给slave端的IO进程
    3、IO进程从master-info中获取需要同步的文件和文件位置
    4、IO进程把binlog文件和pos位置通知master端dump进程
    5、master准备数据把数据同步给slave端
    6、slave收到数据把数据写到relay log中
    7、slave relay log写成功后给master一个成功的应答

    mysql异步复制配置
    master端my.cnf配置
    server-id=135
    #开启复制功能
    log-bin=mysql-bin
    auto_increment_increment=2
    auto_increment_offset=1
    lower_case_table_names=1
    #binlog-do-db=mstest //要同步的mstest数据库,要同步多个数据库
    #binlog-ignore-db=mysql //要忽略的数据库

    slave端my.cnf配置
    server-id=133
    log-bin=mysql-bin
    auto-increment-increment=2
    auto-increment-offset=2
    lower_case_table_names=1
    #replicate-do-db = wang #需要同步的数据库
    #binlog-ignore-db = mysql
    #binlog-ignore-db = information_schema

    1、在master mysql添加权限
    GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON . TO ‘repluser’@’%’ IDENTIFIED BY ‘123456’;
    FLUSH PRIVILEGES;

    2、在master上查看master的二进制日志
    show master status;

    3、在slave中设置master的信息
    change master to master_host=‘192.168.88.135’,master_port=3307,master_user=‘repluser’,master_password=‘Jack@123456’,master_log_file=‘mysql-bin.000001’,master_log_pos=154;

    4、开启slave,启动SQL和IO线程
    start slave;

    5、查看slave的状态
    show slave status\G

    6、master slave查看进程信息
    SHOW PROCESSLIST;

    mysql增强版半同步复制
    增强版半同步复制配置:
    1、加载lib,所有主从节点都要配置
    主库:install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
    从库:install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
    可以一起装。建议一起装,因为会有主从切换的情景

    2、查看,确保所有节点都成功加载
    show plugins;

    3、启用半同步
    先启用从库上的参数,最后启用主库的参数
    从库:set global rpl_semi_sync_slave_enabled = {0|1}; # 1:启用,0:禁止
    主库:
    set global rpl_semi_sync_master_enabled = {0|1}; # 1:启用,0:禁止
    set global rpl_semi_sync_master_timeout = 10000; # 单位为ms

    4、前面配置弄完以后,在slave节点必须关闭io_thread节点才能使半同步复制生效
    stop slave io_thread;
    start slave io_thread;

    master节点日志信息:
    开启半同步,关闭异步
    半同步复制在master端进行引擎提交的时候会等待,直到slave写relay log成功后,给master ACK应答成功才会进行引擎提交
    ————————————————
     

你可能感兴趣的:(mysql数据库架构和同步复制流程)