精华内容
下载资源
问答
  • Mysql 双向复制

    2013-07-11 21:37:42
    MySQL replication提供了数据库复制的功能,可以实现多个数据库实时同步,具体如果下: mysql replication 数据同步 我们为什么要用mysql replication呢,当你的网站一天的独立IP流量能达到100W时,全部流量能...

    一,mysql replication是什么,干什么用的

    MySQL replication提供了数据库复制的功能,可以实现多个数据库实时同步,具体如果下图:

    mysql replication 数据同步

    mysql replication 数据同步

    我们为什么要用mysql replication呢,当你的网站一天的独立IP流量能达到100W时,全部流量能达到1000W时,单个服务器,根本无法满足现有需要,100W,1000W就是举个例子。尽管你做了许多的技术上面的措施,比如内存缓存(如memcache),文件缓存啊,对于大数据量表进行分表啊等等,还是网站还是挺慢的(这可能有多方面原因),在这儿只是以MYSQL为例。

    二,mysql replication 的安装和配置

    mysql 3.23.15以后,装mysql的时候,就自带有mysql replication。我四年前做开发的,那个时候,我接触的mysql4,如果现在还有用mysql3的,那我就表示无语了。

    1)安装mysql

    下个mysql,安装一下,导入表和内容。我就不在这儿详细说了。

    2)在192.168.1.91上修改my.ini

    a,在192.168.1.91上修改mysql的配置文件my.ini,master是windows系统

    1. server-id=1   
    2. binlog-do-db=test1   
    3. auto_increment_offset= 2   
    4. log-bin=d:/wamp/mysql/master-bin.log   
    5. log-bin-index = d:/wamp/mysql/master-log-bin.index   
    6. log-error = d:/wamp/mysql/master-error.log   
    7. relay-log = d:/wamp/mysql/slave-relay.log   
    8. relay-log-info-file = d:/wamp/mysql/slave-relay-log.info   
    9. relay-log-index = d:/wamp/mysql/slave-relay-log.index   
    10. set-variable=max_connections=500  
    server-id=1
    binlog-do-db=test1
    auto_increment_offset= 2
    log-bin=d:/wamp/mysql/master-bin.log
    log-bin-index = d:/wamp/mysql/master-log-bin.index
    log-error = d:/wamp/mysql/master-error.log
    relay-log = d:/wamp/mysql/slave-relay.log
    relay-log-info-file = d:/wamp/mysql/slave-relay-log.info
    relay-log-index = d:/wamp/mysql/slave-relay-log.index
    set-variable=max_connections=500
    

    b, 其次仍然在该区域修改, 配置为以该机为slave

    1. master-host=192.168.1.5   
    2. master-user=xtajmd   
    3. master-password=xtajmd   
    4. master-port=3306   
    5. master-connect-retry=60   
    6. replicate-do-db=test1   
    7. log-slave-updates  
    master-host=192.168.1.5
    master-user=xtajmd
    master-password=xtajmd
    master-port=3306
    master-connect-retry=60
    replicate-do-db=test1
    log-slave-updates
    

    解释:

    server-id=1表示是本机的序号为1,一般来讲就是master的意思.

    binlog-do-db=test1表示需要备份的数据库是test这个数据库,

    replicate-do-db=test1 表示同步test数据库;

    如果需要备份多个数据库,那么应该写多行,如下所示:

    binlog-do-db=test1

    binlog-do-db=test2

    binlog-do-db=test3

    log-bin表示打开binlog,打开该选项才可以通过I/O写到Slave的relay-log,也是可以进行replication的前提;

    auto_increment_increment定义下一次AUTO_INCREMENT的步长

    auto_increment_offset= 1定义AUTO_INCREMENT的起点值

    这两个参数用于避免多master情况下,多个master同时存取字段类型为AUTO_INCREMENT的冲突。其它几个字段为日志文件配置信息

    set-variable=max_connections=500 设定数据库最大连接数为500

    master-host=192.168.1.91 表示本机做slave时的master为192.168.1.91;

    master-user=xtajmd 这里表示master(192.168.1.91)上开放的一个有权限的用户,使其可以从slave连接到master并进行复制; 建议两台主机的授权用户和密码完全相同。

    master-password=xtajmd 表示授权用户的密码;

    master-port=3306 表示master(192.168.1.91)上MySQL服务Listen3306端口;

    master-connect-retry=60 同步间隔时间;

    log-slave-updates:从master读到的更新操作都记录到slave二进制日志中

    3)在192.168.1.5上修改my.cnf

    vi my.cnf

    找到

    # The MySQL server
    [mysqld]

    在mysqld里面加上以下部分

    1. server-id=2                                     #表示本机序号,不要和主机相同   
    2. binlog-do-db=test1   
    3. log-bin=/usr/local/mysql/master-bin.log   
    4. log-bin-index = /usr/local/mysql/master-log-bin.index   
    5. log-error = /usr/local/mysql/master-error.log   
    6. relay-log = /usr/local/mysql/slave-relay.log   
    7. relay-log-info-file = /usr/local/mysql/slave-relay-log.info   
    8. relay-log-index = /usr/local/mysql/slave-relay-log.index   
    9. set-variable=max_connections=500   
    10. master-host=192.168.1.91   
    11. master-user=xtajmd   
    12. master-password=xtajmd   
    13. master-port=3306   
    14. master-connect-retry=60   
    15. replicate-do-db=test1   
    16. log-slave-updates  
    server-id=2                                     #表示本机序号,不要和主机相同
    binlog-do-db=test1
    log-bin=/usr/local/mysql/master-bin.log
    log-bin-index = /usr/local/mysql/master-log-bin.index
    log-error = /usr/local/mysql/master-error.log
    relay-log = /usr/local/mysql/slave-relay.log
    relay-log-info-file = /usr/local/mysql/slave-relay-log.info
    relay-log-index = /usr/local/mysql/slave-relay-log.index
    set-variable=max_connections=500
    master-host=192.168.1.91
    master-user=xtajmd
    master-password=xtajmd
    master-port=3306
    master-connect-retry=60
    replicate-do-db=test1
    log-slave-updates
    

    4),准备二个一样的数据库

    从一台机器上面的mysql中导出一个数据库,什么数据库都行,然后导入到另一台机器的数据中。

    方法请参考:http://blog.51yip.com/mysql/139.html

    5) 建立账户,分配权限

    在192.168.1.91和192.168.1.5上使用mysql登陆,分别操作如下操作:

    GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO  xtajmd@'%' IDENTIFIED BY 'xtajmd';

    flush

    在192.168.1.91和192.168.1.5上分别测试所添加用户能否正常登陆另外一台服务器。

    在192.168.1.5上:mysql -u xtajmd -p -h 192.168.1.91

    mysql -u xtajmd -p -h 192.168.1.91
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 11
    Server version: 5.0.27-community-nt-log MySQL Community Edition (GPL)

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql>

    在192.168.1.91上:mysql -u xtajmd -p -h 192.168.1.5

    注意:

    如果二台linux系统间的数据同步的话,请确认两台服务器上iptables的3306端口已经开通,以保证通信正常。

    如果是windows和linux系统间的数据同步的话,确保linux服务器上iptables的3306端口已经开通,windows下面防火墙,杀毒软件是不是允许外界通过3306来连接本地数据库

    6) 二台服务器都重起mysql,查master,slave状态,以及注意问题

    在192.168.1.91上

    mysql> show master status;
    +-------------------+----------+--------------+------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    | master-bin.000072 |       98 | test1        |                  |
    +-------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)

    在192.168.1.5上

    mysql> show slave status\G;
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 192.168.1.91
    Master_User: xtajmd
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: master-bin.000072
    Read_Master_Log_Pos: 98
    Relay_Log_File: slave-relay.000330
    Relay_Log_Pos: 244
    Relay_Master_Log_File: master-bin.000072
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Replicate_Do_DB: test1
    Replicate_Ignore_DB:
    Replicate_Do_Table:
    Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
    Replicate_Wild_Ignore_Table:

    注意:在这里Slave_IO_State:后面有可能没有任何参数,或者是Waitting to connect

    我们一定要确保,master里面File和Master_Log_File内容是一样的,position和Read_Log_File_Pos要一样的。

    反过来也要一样。如果不一样怎么办呢?如下

    解决步骤:
    重启master库:
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000072 |       98 |      test1        |                  |
    +------------------+----------+--------------+------------------+
    mysql> slave stop;
    mysql> change master to Master_Log_File='mysql-bin.000072',Master_Log_Pos=98;
    mysql> slave start;
    mysql> show slave status\G

    到这里基本上算是配置好了,现在测试一下吧,在91上的数据库test1里面,加张表试一下,看看5上面有没有。哈哈。

    forward from http://blog.51yip.com/mysql/357.html
    展开全文
  • 数据库双向同步复制

    2020-12-14 23:21:45
     如上所示,复制程序写入时也会产生 binlog,如何识别由复制程序产生的 binlog 并将其过滤掉是避免循环复制的关键。  原生 Dual Master 方案  MySQL 自身支持双主配置,但并没有去解决潜在的主键和双写带来...
  • 看了几个教程都不够全面,这里综合一下,按照以下三个步骤完成能保证实现主机到虚拟机+虚拟机到主机的双向粘贴复制 1.在VirtualBox管理器选中虚拟机jian中勾→设置→常规→高级→选“双向“ 2.在VirtualBox管理器...

    看了几个教程都不够全面,这里综合一下,按照以下三个步骤完成能保证实现主机到虚拟机+虚拟机到主机的双向粘贴复制

    1.在VirtualBox管理器选中虚拟机jian中勾→设置→常规→高级→选“双向“
    在这里插入图片描述
    2.在VirtualBox管理器选中虚拟机jian中勾→设置→存储→勾选“使用主机输入输出(I/O)缓存”选项 和 “xx.dvi”→勾选“固态驱动器(S)”选项(按照下面两个图勾选,需要关掉正在运行的虚拟机才能勾选,否则向我一样处于不可选定状态)
    在这里插入图片描述
    在这里插入图片描述
    3.安装增强功能-见教程
    如果菜单栏被隐藏找不到”设备“按:右Ctrl+C

    展开全文
  • 【OGG】OGG简单配置双向复制(三) 一.1 BLOG文档结构 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① OGG的双向实时复制...

    【OGG】OGG简单配置双向复制(三)

    OGGOGG简单配置双向复制()

    一.1  BLOG文档结构图

     

    wps5E60.tmp 

     

    一.2  前言部分

     

    一.2.1  导读

    各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:

    OGG的双向实时复制功能

     

     

    注意:本篇BLOG中代码部分需要特别关注的地方我都用黄色背景和红色字体来表示,比如下边的例子中,thread 1的最大归档日志号为33thread 2的最大归档日志号为43是需要特别关注的地方。

      List of Archived Logs in backup set 11

      Thrd Seq     Low SCN    Low Time            Next SCN   Next Time

      ---- ------- ---------- ------------------- ---------- ---------

      1    32      1621589    2015-05-29 11:09:52 1625242    2015-05-29 11:15:48

      1    33      1625242    2015-05-29 11:15:48 1625293    2015-05-29 11:15:58

      2    42      1613951    2015-05-29 10:41:18 1625245    2015-05-29 11:15:49

      2    43      1625245    2015-05-29 11:15:49 1625253    2015-05-29 11:15:53

     

     

     

     

     

    本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力。

    一.2.2  实验环境介绍

     

    项目

    source db

    target  db

    db 类型

    单实例

    单实例

    db version

    11.2.0.3

    11.2.0.3

    db 存储

    FS type

    FS type

    ORACLE_SID

    ogg1

    ogg2

    db_name

    ogg1

    ogg2

    主机IP地址:

    192.168.59.129

    192.168.59.130

    OS版本及kernel版本

    RHEL6.5 64位,2.6.32-504.16.2.el6.x86_64

    RHEL6.5 64位,2.6.32-504.16.2.el6.x86_64

    OGG版本

    11.2.1.0.1 64

    11.2.1.0.1 64

    OS hostname

    orcltest

    rhel6_lhr

     

     

     

    一.2.3  相关参考文章链接

     

    OGGOGG的下载和安装篇:http://blog.itpub.net/26736162/viewspace-1693241/

    OGGOGG的单向DML复制配置():http://blog.itpub.net/26736162/viewspace-1696020/

    OGGOGG的单向复制配置-支持DDL()http://blog.itpub.net/26736162/viewspace-1696031/

     

     

    一.2.4  本文简介

     

     

    本文基于OGG的双向复制功能,主要参考网址为:http://ylw6006.blog.51cto.com/all/470441/16 ,非常感谢斩月大师。

     

    在完成ogg的单向复制配置后,自然会想着向前推进一层,实现双向复制;在实际应用中,双向复制面临着许多问题,主要有如下几点:

    1. 如果两个库同时更新同一条记录 如何处理?

    2. 如果网络出现失败如何处理?

    3. 如果数据不同步后如何修复?

    wps5E70.tmp 

     

    本文介绍如何在前文的基础上简单实现ogg的双向复制!双向复制一般用于双业务中心环境下,目前笔者的生产环境中未使用到oggogg系列的文章只是从技术上提前做一个准备,因而许多问题的细节未能理清,后续将继续学习研究!在开始之前,请先配置好db1-db2的单向复制(include ddl replicat)!

     

     

     

     

     

     

    一.3  实验部分

     

    一.3.1  实验目标

     

    实现OGG1OGG2的双向复制功能。

     

    一.3.2  配置OGG1,添加checkpoint

    注意:本文OGG1OGG2互为sourcetarget,因而直接采用OGG1OGG2来标识两台数据库服务器

     

    [oracle@orcltest gg11]$ ggsci

     

    Oracle GoldenGate Command Interpreter for Oracle

    Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO

    Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14

     

    Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.

     

     

     

    GGSCI (orcltest) 1> view params ./GLOBALS 

     

    GGSCHEMA ggusr

     

     

    GGSCI (orcltest) 2> edit params ./GLOBALS 

    GGSCHEMA ggusr

    checkpointtable ggusr.rep_demo_ckpt

    ~

    ~

    ~

    ~

    。。。。。。。。。。。。。。。。

    ~

    ~

    ~

    ~

    ~

    "./GLOBALS" 2L, 51C written

     

     

    GGSCI (orcltest) 3> view params ./GLOBALS 

     

    GGSCHEMA ggusr

    checkpointtable ggusr.rep_demo_ckpt

     

     

    GGSCI (orcltest) 4>

     

    GGSCI (orcltest) 4> dblogin userid ggusr@ogg1,password lhr

    Successfully logged into database.

     

    GGSCI (orcltest) 5> add checkpointtable  ggusr.rep_demo_ckpt

     

    Successfully created checkpoint table ggusr.rep_demo_ckpt.

     

    GGSCI (orcltest) 6> add checkpointtable  ggusr.rep_demo_ckpt

    ERROR: OCI Error ORA-00955: name is already used by an existing object (status = 955). Creating checkpoint table ggusr.rep_demo_ckpt, SQL <CREATE TABLE ggusr.rep_demo_ckpt (  group_name VARCHAR2(8) NOT NULL,  group_key NUMBER(19) NOT NULL,  seqno NUMBER(10),  rba NUMBER(19) NOT NULL,  audit_ts VARCHAR2(29),  create_ts DATE NOT NULL,  last_update_ts DATE NOT NULL,  current_dir VARCHAR2(255) NOT NULL,  log_csn VARCHAR2(129),  log_xid VARCHAR2(129),  log_cmplt_csn VARCHAR2(129),  log_cmplt_xids VARCHAR2(2000),  version NUMBER(3),  PRIMARY KEY (group_name, group_key))>.

     

    GGSCI (orcltest) 7>

     

     

    一.3.3  配置OGG2,运行相关的脚本,支持DDL的复制

    [oracle@rhel6_lhr gg11]$ ggsci      

     

    Oracle GoldenGate Command Interpreter for Oracle

    Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO

    Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14

     

    Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.

     

     

     

    GGSCI (rhel6_lhr) 1>  view params ./GLOBALS 

     

    checkpointtable ggusr.rep_demo_ckpt

     

     

    GGSCI (rhel6_lhr) 2> edit  params ./GLOBALS

     

     

     

    GGSCI (rhel6_lhr) 3>  view params ./GLOBALS 

     

    GGSCHEMA ggusr

    checkpointtable ggusr.rep_demo_ckpt

     

     

    GGSCI (rhel6_lhr) 4>

     

     

     

     

     

    [oracle@orcltest ~]$ cd $OGG_HOME

    [oracle@orcltest gg11]$ sqlplus sys/lhr@ogg2 as  sysdba

     

    SQL*Plus: Release 11.2.0.3.0 Production on Wed Jun 10 17:10:45 2015

     

    Copyright (c) 1982, 2011, Oracle.  All rights reserved.

     

     

    Connected to:

    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    SQL> select name,SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING from v$database;

     

    NAME      SUPPLEME FOR

    --------- -------- ---

    OGG2     NO       NO

     

    SQL> alter database add supplemental log data ;

     

    Database altered.

     

    SQL> archive log list;

    Database log mode              Archive Mode

    Automatic archival             Enabled

    Archive destination            USE_DB_RECOVERY_FILE_DEST

    Oldest online log sequence     7

    Next log sequence to archive   9

    Current log sequence           9

    SQL>

     

    SQL> grant execute on utl_file to ggusr;

     

    Grant succeeded.

     

    SQL> @marker_setup.sql

     

    Marker setup script

     

    You will be prompted for the name of a schema for the Oracle GoldenGate database objects.

    NOTE: The schema must be created prior to running this script.

    NOTE: Stop all DDL replication before starting this installation.

     

    Enter Oracle GoldenGate schema name:ggusr

     

     

    Marker setup table script complete, running verification script...

    Please enter the name of a schema for the GoldenGate database objects:

    Setting schema name to GGUSR

     

    MARKER TABLE

    -------------------------------

    OK

     

    MARKER SEQUENCE

    -------------------------------

    OK

     

    Script complete.

    SQL> @ddl_setup.sql

     

    Oracle GoldenGate DDL Replication setup script

     

    Verifying that current user has privileges to install DDL Replication...

     

    You will be prompted for the name of a schema for the Oracle GoldenGate database objects.

    NOTE: For an Oracle 10g source, the system recycle bin must be disabled. For Oracle 11g and later, it can be enabled.

    NOTE: The schema must be created prior to running this script.

    NOTE: Stop all DDL replication before starting this installation.

     

    Enter Oracle GoldenGate schema name:ggusr

     

    Working, please wait ...

    Spooling to file ddl_setup_spool.txt

     

    Checking for sessions that are holding locks on Oracle Golden Gate metadata tables ...

     

    Check complete.

     

     

     

     

     

     

     

    Using GGUSR as a Oracle GoldenGate schema name.

     

    Working, please wait ...

     

    DDL replication setup script complete, running verification script...

    Please enter the name of a schema for the GoldenGate database objects:

    Setting schema name to GGUSR

     

    CLEAR_TRACE STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    CREATE_TRACE STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    TRACE_PUT_LINE STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    INITIAL_SETUP STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    DDLVERSIONSPECIFIC PACKAGE STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    DDLREPLICATION PACKAGE STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    DDLREPLICATION PACKAGE BODY STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    DDL IGNORE TABLE

    -----------------------------------

    OK

     

    DDL IGNORE LOG TABLE

    -----------------------------------

    OK

     

    DDLAUX  PACKAGE STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    DDLAUX PACKAGE BODY STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    SYS.DDLCTXINFO  PACKAGE STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    SYS.DDLCTXINFO  PACKAGE BODY STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    DDL HISTORY TABLE

    -----------------------------------

    OK

     

    DDL HISTORY TABLE(1)

    -----------------------------------

    OK

     

    DDL DUMP TABLES

    -----------------------------------

    OK

     

    DDL DUMP COLUMNS

    -----------------------------------

    OK

     

    DDL DUMP LOG GROUPS

    -----------------------------------

    OK

     

    DDL DUMP PARTITIONS

    -----------------------------------

    OK

     

    DDL DUMP PRIMARY KEYS

    -----------------------------------

    OK

     

    DDL SEQUENCE

    -----------------------------------

    OK

     

    GGS_TEMP_COLS

    -----------------------------------

    OK

     

    GGS_TEMP_UK

    -----------------------------------

    OK

     

    DDL TRIGGER CODE STATUS:

     

    Line/pos             Error

    -------------------- -----------------------------------------------------------------

    No errors            No errors

     

    DDL TRIGGER INSTALL STATUS

    -----------------------------------

    OK

     

    DDL TRIGGER RUNNING STATUS

    ----------------------------------------------------------------------

    ENABLED

     

    STAYMETADATA IN TRIGGER

    ----------------------------------------------------------------------

    OFF

     

    DDL TRIGGER SQL TRACING

    ----------------------------------------------------------------------

    0

     

    DDL TRIGGER TRACE LEVEL

    ----------------------------------------------------------------------

    0

     

    LOCATION OF DDL TRACE FILE

    ------------------------------------------------------------------------------------------------------------------------

    /u01/app/oracle/diag/rdbms/ogg2/ogg2/trace/ggs_ddl_trace.log

     

    Analyzing installation status...

     

     

    STATUS OF DDL REPLICATION

    ------------------------------------------------------------------------------------------------------------------------

    SUCCESSFUL installation of DDL Replication software components

     

    Script complete.

    SQL> @role_setup.sql

     

    GGS Role setup script

     

    This script will drop and recreate the role GGS_GGSUSER_ROLE

    To use a different role name, quit this script and then edit the params.sql script to change the gg_role parameter to the preferred name. (Do not run the script.)

     

    You will be prompted for the name of a schema for the GoldenGate database objects.

    NOTE: The schema must be created prior to running this script.

    NOTE: Stop all DDL replication before starting this installation.

     

    Enter GoldenGate schema name:ggusr

    Wrote file role_setup_set.txt

     

    PL/SQL procedure successfully completed.

     

     

    Role setup script complete

     

    Grant this role to each user assigned to the Extract, GGSCI, and Manager processes, by using the following SQL command:

     

    GRANT GGS_GGSUSER_ROLE TO <loggedUser>

     

    where <loggedUser> is the user assigned to the GoldenGate processes.

    SQL>

    SQL> GRANT GGS_GGSUSER_ROLE TO ggusr;

     

    Grant succeeded.

     

    SQL> @ddl_enable.sql 

     

    Trigger altered.

     

    SQL> @?/rdbms/admin/dbmspool.sql

     

    Package created.

     

     

    Grant succeeded.

     

     

    SQL> @ddl_pin.sql ggusr

     

    PL/SQL procedure successfully completed.

     

     

    PL/SQL procedure successfully completed.

     

     

    PL/SQL procedure successfully completed.

     

    SQL> exit

    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

    [oracle@orcltest gg11]$

     

    一.3.4  OGG2上配置extractpump进程

    [oracle@rhel6_lhr gg11]$ ggsci

     

    Oracle GoldenGate Command Interpreter for Oracle

    Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO

    Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14

     

    Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.

     

     

     

    GGSCI (rhel6_lhr) 1> dblogin userid ggusr@ogg2,password lhr

    Successfully logged into database.

     

    GGSCI (rhel6_lhr) 2> add trandata hr.* 

     

    Logging of supplemental redo data enabled for table HR.COUNTRIES.

     

    Logging of supplemental redo data enabled for table HR.DEPARTMENTS.

     

    Logging of supplemental redo data enabled for table HR.EMPLOYEES.

     

    Logging of supplemental redo data enabled for table HR.JOBS.

     

    Logging of supplemental redo data enabled for table HR.JOB_HISTORY.

     

    Logging of supplemental redo data enabled for table HR.LOCATIONS.

     

    Logging of supplemental redo data enabled for table HR.REGIONS.

     

    Logging of supplemental redo data enabled for table HR.T1.

     

    Logging of supplemental redo data enabled for table HR.T2.

     

    2015-06-10 03:11:40  WARNING OGG-00869  No unique key is defined for table 'T3'. All viable columns will be used to represent the key, but may not guarantee uniqueness.  KEYCOLS may be used to define the key.

     

    Logging of supplemental redo data enabled for table HR.T3.

     

    GGSCI (rhel6_lhr) 3> edit params eora_hr2

     

     

     

    GGSCI (rhel6_lhr) 4> view params eora_hr2

     

    extract eora_hr2 

    setenv (ORACLE_SID=ogg2)

    setenv (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

    setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

    ddl include all

    userid ggusr,password lhr

    tranlogoptions excludeuser ggusr   //避免出现死循环复制,db1上的extract进程也需要进行此项设置

    exttrail ./dirdat/ab

    table hr.*;

     

    GGSCI (rhel6_lhr) 4> add extract eora_hr2,tranlog,begin now  

    EXTRACT added. 

     

     

    GGSCI (rhel6_lhr) 5> add exttrail ./dirdat/ab,extract eora_hr2,megabytes 100 

    EXTTRAIL added.

     

     

    GGSCI (rhel6_lhr) 6> start extract eora_hr2

     

    Sending START request to MANAGER ...

    EXTRACT EORA_HR2 starting

     

     

    GGSCI (rhel6_lhr) 7> edit params pora_hr2

     

     

     

    GGSCI (rhel6_lhr) 8> view params pora_hr2

     

    extract pora_hr2 

    setenv (ORACLE_SID=ogg2)

    setenv (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

    setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)  

    passthru 

    rmthost 192.168.59.129,mgrport 7809 

    rmttrail ./dirdat/pb 

    table hr.*;

     

     

    GGSCI (rhel6_lhr) 9> add extract pora_hr2,exttrailsource ./dirdat/ab 

    EXTRACT added.

     

     

    GGSCI (rhel6_lhr) 10> add rmttrail ./dirdat/pb extract pora_hr2,megabytes 100 

    RMTTRAIL added.

     

     

    GGSCI (rhel6_lhr) 11> start extract pora_hr2

     

    Sending START request to MANAGER ...

    EXTRACT PORA_HR2 starting

     

     

    GGSCI (rhel6_lhr) 12> info all 

     

    Program     Status      Group       Lag at Chkpt  Time Since Chkpt

     

    MANAGER     RUNNING                                          

    EXTRACT     RUNNING     EORA_HR2    00:00:00      00:04:16   

    EXTRACT     RUNNING     PORA_HR2    00:00:00      00:00:00   

    REPLICAT    RUNNING     RORA_HR     00:00:00      00:00:01   

     

     

    GGSCI (rhel6_lhr) 13>

     

     

     

     

    OGG1上设置抽取进程参数,添加tranlogoptions excludeuser ggusr

    GGSCI (orcltest) 15> view params EORA_HR

     

    extract eora_hr 

    setenv (ORACLE_SID=ogg1)

    setenv (ORACLE_HOME=/u02/app/oracle/product/11.2.0/dbhome_1)

    setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) 

    ddl include all

    tranlogoptions excludeuser ggusr

    userid ggusr,password lhr

    exttrail ./dirdat/hr 

    table hr.*;

     

     

    GGSCI (orcltest) 16>

     

     

     

    一.3.5  OGG1上配置replicat进程

     

    [oracle@orcltest gg11]$ ggsci

     

    Oracle GoldenGate Command Interpreter for Oracle

    Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO

    Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14

     

    Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.

     

     

     

    GGSCI (orcltest) 1> info all

     

    Program     Status      Group       Lag at Chkpt  Time Since Chkpt

     

    MANAGER     RUNNING                                          

    EXTRACT     RUNNING     EORA_HR     00:00:00      00:00:10   

    EXTRACT     RUNNING     PORA_HR     00:00:00      00:00:05   

     

     

     

    GGSCI (orcltest) 2> view params rora_hr2

    ERROR: PARAMS file RORA_HR2 does not exist.

     

     

    GGSCI (orcltest) 3> edit params rora_hr2

    replicat rora_hr2

    setenv (ORACLE_SID=ogg1)

    setenv (ORACLE_HOME=/u02/app/oracle/product/11.2.0/dbhome_1)

    setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

    ddl include all

    ddlerror default ignore retryop maxretries 3 retrydelay 5

    userid ggusr,password lhr

    handlecollisions

    assumetargetdefs

    discardfile ./dirrpt/rora_hr2.dsc,purge

    map hr.* ,target hr.*;

    ~

    ~

    ~

    ~

    。。。。。。。。。。。。。。。

    ~

    ~

    ~

    ~

    ~

    "dirprm/rora_hr2.prm" [New] 11L, 345C written

     

     

    GGSCI (orcltest) 4> view params rora_hr2

     

    replicat rora_hr2

    setenv (ORACLE_SID=ogg1)

    setenv (ORACLE_HOME=/u02/app/oracle/product/11.2.0/dbhome_1)

    setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

    ddl include all

    ddlerror default ignore retryop maxretries 3 retrydelay 5

    DDLOPTIONS REPORT

    userid ggusr,password lhr

    handlecollisions

    assumetargetdefs

    discardfile ./dirrpt/rora_hr2.dsc,purge

    map hr.* ,target hr.*;

     

     

    GGSCI (orcltest) 5> add replicat rora_hr2,exttrail ./dirdat/pb 

    REPLICAT added.

     

     

    GGSCI (orcltest) 6> start replicat rora_hr2

     

    Sending START request to MANAGER ...

    REPLICAT RORA_HR2 starting

     

     

    GGSCI (orcltest) 7> info all 

     

    Program     Status      Group       Lag at Chkpt  Time Since Chkpt

     

    MANAGER     RUNNING                                          

    EXTRACT     RUNNING     EORA_HR     00:00:00      00:00:00   

    EXTRACT     RUNNING     PORA_HR     00:00:00      00:00:09   

    REPLICAT    RUNNING     RORA_HR2    00:00:00      00:00:04   

     

     

    GGSCI (orcltest) 8>

     

    一.3.6  测试

    一.3.6.1  ddl测试

    [oracle@orcltest gg11]$ sqlplus hr/hr@ogg1

     

    SQL*Plus: Release 11.2.0.3.0 Production on Wed Jun 10 18:07:48 2015

     

    Copyright (c) 1982, 2011, Oracle.  All rights reserved.

     

     

    Connected to:

    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    SQL>  create table t5 as select * from dual;

     

    Table created.

     

    SQL> conn hr/hr@ogg2

    Connected.

    SQL> select count(1) from t5;

     

      COUNT(1)

    ----------

             1

     

    SQL> alter table t5 add name varchar2(255);

     

    Table altered.

     

    SQL> conn hr/hr@ogg1

    Connected.

    SQL> desc t5

    Name                                      Null?    Type

    ----------------------------------------- -------- ----------------------------

    DUMMY                                              VARCHAR2(1)

    NAME                                               VARCHAR2(255)

     

    DDL测试注意查看ddl日志:

    OGG2上的日志(/u01/app/oracle/diag/rdbms/ogg2/ogg2/trace/ggs_ddl_trace.log):

    SESS 470002-2015-06-10 18:11:50 : DDL : ************************* Start of log for DDL sequence [1508], v[ $Id: ddl_setup.sql /st_oggcore_11.2.1/8 2012/04/02 11:11:33 smijatov Exp $ ] trace level [0], owner schema of DDL package [GGUSR], objtype [TABLE] name [HR.T5]

    SESS 470002-2015-06-10 18:11:50 : DDLTRACE1 : Before Trigger: point in execution = [1.0], objtype [TABLE] name [HR.T5]

    SESS 470002-2015-06-10 18:11:50 : DDL : DDL operation [ create table t5 as select * from dual ], sequence [1508], DDL type [CREATE] TABLE, real object type [TABLE], validity [], object ID [], object [HR.T5], real object [HR.T5], base object schema [], base object name [], logged as [HR]

    SESS 470002-2015-06-10 18:11:50 : DDL : Start SCN found [1112052]

    SESS 470002-2015-06-10 18:11:50 : DDL : ------------------------- End of log for DDL sequence [1508]

    SESS 450003-2015-06-10 18:12:38 : DDL : ************************* Start of log for DDL sequence [1509], v[ $Id: ddl_setup.sql /st_oggcore_11.2.1/8 2012/04/02 11:11:33 smijatov Exp $ ] trace level [0], owner schema of DDL package [GGUSR], objtype [TABLE] name [HR.T5]

    SESS 450003-2015-06-10 18:12:38 : DDLTRACE1 : Before Trigger: point in execution = [1.0], objtype [TABLE] name [HR.T5]

    SESS 450003-2015-06-10 18:12:38 : DDL : DDL operation [alter table hr."T5" add name varchar2(255)  /* GOLDENGATE_DDL_REPLICATION */ ], sequence [1509], DDL type [ALTER] TABLE, real object type [TABLE], validity [VALID], object ID [76900], object [HR.T5], real object [HR.T5], base object schema [], base object name [], logged as [GGUSR]

    SESS 450003-2015-06-10 18:12:38 : DDL : Start SCN found [1112101]

    SESS 450003-2015-06-10 18:12:40 : DDL : ------------------------- End of log for DDL sequence [1509]

     

    OGG1上的日志(/u02/app/oracle/diag/rdbms/ogg1/ogg1/trace/ggs_ddl_trace.log):

    SESS 450045-2015-06-10 04:05:42 : DDL : ************************* Start of log for DDL sequence [43], v[ $Id: ddl_setup.sql /st_oggcore_11.2.1/8 2012/04/02 11:11:33 smijatov Exp $ ] trace level [0], owner schema of DDL package [GGUSR], objtype [TABLE] name [HR.T5]

    SESS 450045-2015-06-10 04:05:42 : DDLTRACE1 : Before Trigger: point in execution = [1.0], objtype [TABLE] name [HR.T5]

    SESS 450045-2015-06-10 04:05:42 : DDL : DDL operation [ create table hr."T5" as select * from dual  /* GOLDENGATE_DDL_REPLICATION */ ], sequence [43], DDL type [CREATE] TABLE, real object type [TABLE], validity [], object ID [], object [HR.T5], real object [HR.T5], base object schema [], base object name [], logged as [GGUSR]

    SESS 450045-2015-06-10 04:05:42 : DDL : Start SCN found [1121651]

    SESS 450045-2015-06-10 04:05:42 : DDL : ------------------------- End of log for DDL sequence [43]

    SESS 470002-2015-06-10 04:06:19 : DDL : ************************* Start of log for DDL sequence [44], v[ $Id: ddl_setup.sql /st_oggcore_11.2.1/8 2012/04/02 11:11:33 smijatov Exp $ ] trace level [0], owner schema of DDL package [GGUSR], objtype [TABLE] name [HR.T5]

    SESS 470002-2015-06-10 04:06:19 : DDLTRACE1 : Before Trigger: point in execution = [1.0], objtype [TABLE] name [HR.T5]

    SESS 470002-2015-06-10 04:06:19 : DDL : DDL operation [alter table t5 add name varchar2(255) ], sequence [44], DDL type [ALTER] TABLE, real object type [TABLE], validity [VALID], object ID [76920], object [HR.T5], real object [HR.T5], base object schema [], base object name [], logged as [HR]

    SESS 470002-2015-06-10 04:06:19 : DDL : Start SCN found [1121693]

    SESS 470002-2015-06-10 04:06:20 : DDL : ------------------------- End of log for DDL sequence [44]

     

     

    一.3.6.2  dml测试

    [oracle@orcltest gg11]$ sqlplus hr/hr@ogg1

     

    SQL*Plus: Release 11.2.0.3.0 Production on Wed Jun 10 18:13:37 2015

     

    Copyright (c) 1982, 2011, Oracle.  All rights reserved.

     

     

    Connected to:

    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    SQL>  create table t6 as select * from dual;

     

    Table created.

     

    SQL> insert into t6 select * from t6;

     

    1 row created.

     

    SQL> commit;

     

    Commit complete.

     

    SQL> select count(1) from t6;

     

      COUNT(1)

    ----------

             2

     

    SQL> conn hr/hr@ogg2

    Connected.

    SQL>  select count(1) from t6;

     

      COUNT(1)

    ----------

             2

     

    SQL> insert into t6 select * from t6;

     

    2 rows created.

     

    SQL> commit;

     

    Commit complete.

     

    SQL>  select count(1) from t6;

     

      COUNT(1)

    ----------

             4

     

    SQL> conn hr/hr@ogg1

    Connected.

    SQL>  select count(1) from t6;

     

      COUNT(1)

    ----------

             4

     

    SQL>

     

     

    一.3.7  实验总结

     

    OGG的双向复制其实就是在每台机器上都进行相关的单向配置。

     

    一.4  About Me

     

    ...........................................................................................................................................................................................

    本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

    ITPUB BLOG:http://blog.itpub.net/26736162

    本文地址:http://blog.itpub.net/26736162/viewspace-1699516/

    本文pdf版:http://yunpan.cn/QCwUAI9bn7g7w  提取码:af2d

    QQ:642808185 若加QQ请注明你所正在读的文章标题

    创作时间地点:2015-06-10 09:00~ 2015-06-10 19:00 于外汇交易中心

    <版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任!>

    ...........................................................................................................................................................................................

     

     

    posted @ 2015-06-15 09:28 ^_^小麦苗^_^ 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • MySQL 数据库双向同步复制

    万次阅读 2015-12-22 20:38:18
    MySQL 复制问题的最后一篇,关于双向同步复制架构设计的一些设计要点与制约。问题和制约数据库的双主双写并双向同步场景,主要考虑数据完整性、一致性和避免冲突。对于同一个库,同一张表,同一个记录中的同一字段的...

    MySQL 复制问题的最后一篇,关于双向同步复制架构设计的一些设计要点与制约。

    问题和制约

    数据库的双主双写并双向同步场景,主要考虑数据完整性、一致性和避免冲突。对于同一个库,同一张表,同一个记录中的同一字段的两地变更,会引发数据一致性判断冲突,尽可能通过业务场景设计规避。双主双写并同步复制可能引发主键冲突,需避免使用数据库自增类主键方案。另外,双向同步潜在可能引发循环同步的问题,需要做回环控制。

    如上图所示,复制程序写入时也会产生 binlog,如何识别由复制程序产生的 binlog 并将其过滤掉是避免循环复制的关键。

    原生 Dual Master 方案

    MySQL 自身支持双主配置,但并没有去解决潜在的主键和双写带来的数据一致性冲突。对于双向同步潜在的循环复制问题,MySQL 在 binlog 中记录了当前 MySQL 的 server-id。一旦有了 server-id 的值之后,MySQL 就很容易判断某个变更是从哪一个 Server 最初产生的,所以就很容易避免出现循环复制的情况。而且,还可以配置不打开记录 slave 的 binlog 选项(–log-slave-update),MySQL 就不会记录复制过程中的变更到 binlog 中,就更不用担心可能会出现循环复制的情形了。

    从 MySQL 自身的方案中可以找到切入点,就是如果能在 binlog 中打上标记,就有办法判断哪些 binlog 是复制产生的,并将其过滤。使用 MySQL 的方案则过于耦合 MySQL 的配置,在大规模部署的线上生产系统中容易因为 MySQL 配置错误导致问题。

    自定义标记 SQL 方案

    为了和 MySQL 配置解耦合,可以考虑一种通用的标记 SQL 方案。简单来说,就是在同步复制入库时插入特殊的标记 SQL 语句来标记这是来自复制程序的变更,这个标记 SQL 会进入 binlog 中。而在复制程序读取时,通过识别这个标记 SQL 来过滤判断。

    binlog 中存储了对数据产生变更影响的的 SQL 语句,这些 SQL 语句组成了一段一段的事务,如下图所示:

    绿色区是业务运行产生的正常事务,红色区是复制程序写入产生的事务,其中蓝色块是标记 SQL。标记 SQL 分别在事务开始后与事务结束前,标记 SQL 更新一张预定义的区别于业务表的标记表。那么每次复制程序去批量读取 binlog 内容时,可能存在下面 5 种情况,如下图所示:

    1. 批量读取范围全落在绿色区内。
    2. 批量读取范围起点落在绿色区,终点落在红色区。
    3. 批量读取范围起点落在红色区,终点落在绿色区。
    4. 批量读取范围起点和终点都在绿色区,但中间涵盖了一段红色区。
    5. 批量读取范围全落在红色区。

    如上只有第 5 种情况,一个事务被拆成 3 段来同步。中间一段因为没有事务头和尾的标记,复制程序读取时将无法判断,导致循环同步,需要避免。通过把复制程序的批量读取范围固定设置为至少大于或等于写入的事务长度范围,避免了第 5 种情况。复制程序批量读取 binlog 日志事件时,通过标记 SQL 来过滤,避免了循环复制,实现了回环控制。

    总结

    本文考虑了在 MySQL 双主写入场景下双向同步复制的一些设计要点和制约。以原生实现为参考,给出了一种自定义实现方式的设计要点分析。而对于同库同表同记录同字段的同时两地变更,则必然引发数据一致性冲突,在复制同步层面无法区分哪边的更新为准。通常会考虑以最后时间戳来恢复到一致状态,但时间戳实际也会产生误差,此类场景不多见最好还是尽可能还是在业务场景设计上来规避。

    参考

    [1] MySQL Internals Manual. Replication.
    [2] MySQL Internals Manual. The Binary Log. [3] in355hz. 数据库 ACID 的实现.
    [4] jb51. MySQL 对 binlog 的处理说明.
    [5] repls. 浅析 innodb_support_xa 与 innodb_flush_log_at_trx_commit.
    [6] 68idc. MySQL 5.6 之 DBA 与开发者指南.
    [7] csdn. 高性能 MySQL 主从架构的复制原理及配置详解.
    [8] agapple. Otter 双向回环控制.


    下面是我的微信公众号 「瞬息之间」,除了写技术的文章、还有产品、行业和人生的思考,希望能和更多走在这条路上同行者交流。

    展开全文
  • 基于VitualBox解决主机与Linux双向复制粘贴设置双向粘贴设置共享文件夹 设置双向粘贴 如下所示,打开VitualBox虚拟机后将“设备—共享粘贴板”设置为双向。 设置共享文件夹 为了方便虚拟机和主机之间的数据传输,...
  • 饿了么的 Data Replicate Center(DRC)项目用于数据双向复制和数据订阅,使用场景如下: 要点说明: 跨机房的 Mysql 数据复制完全通过 DRC 来完成 还有很多业务团队通过 DRC 来实现数据订阅 ...
  • 这块首先需要在virtualbox中选择你要实现双向复制黏贴的虚机,比如我的Ubuntu20.0设置里面进行设置,直接上 我操 图片这么大,那大家就将就着看吧!这部分设置是为了双向复制黏贴功能你看写的很清楚啊...
  • 饿了么的 Data Replicate Center(DRC)项目用于数据双向复制和数据订阅,使用场景如下: 要点说明: 跨机房的 Mysql 数据复制完全通过 DRC 来完成 还有很多业务团队通过 DRC 来实现数据订阅 目前饿了么100%...
  • DRC介绍饿了么的 Data Replicate Center(DRC)项目用于数据双向复制和数据订阅,使用场景如下:要点说明:跨机房的 Mysql 数据复制完全通过 DRC 来完成还有很多业务团队通过 DRC 来实现数据订阅目前饿了么100%的跨...
  • DRC介绍饿了么的 Data Replicate Center(DRC)项目用于数据双向复制和数据订阅,使用场景如下:要点说明:跨机房的 Mysql 数据复制完全通过 DRC 来完成还有很多业务团队通过 DRC 来实现数据订阅目前饿了么100%的跨...
  • 双向复制与由子到父同步很相似,如参与同步的父本、子本数据库也都必须是SDE数据库;所不同的是,双向复制不仅可以由父到子同步,也可以由子到父同步,即参与同步的父本和子本可以相互同步。 为要复制的数据添加...
  • DRC介绍饿了么的 Data Replicate Center(DRC)项目用于数据双向复制和数据订阅,使用场景如下:要点说明:跨机房的 Mysql 数据复制完全通过 DRC 来完成还有很多业务团队通过 DRC 来实现数据订阅目前饿了么100%的跨...
  • 25、复杂链表的复制 输入一个复杂链表(每个节点中有节点值,以及两个指针...1)复制旧链表节点:将旧链表的节点一个个复制后插入到新链表,像下那样,A是旧节点,A’是新节点。 2)置random指向:如上所示,旧...
  • 双向主从复制 级联主从模式 一主多从模式 多主一从模式 2、主从复制的功能 实时灾备:让从库随时接管有故障的主库 分压:让从库分担主库的读压力,做读写分离,提供查询服务 让从库做一些特殊SQL.....
  • [@more@] 排名 名称 厂商 特点 1 DDS DDS 双向复制、SQL转换、图形监控 2 iReflect DataMirror Oracle认证、图形界面 3 goldengate goldengate 双向复制...
  • 示意: python双向链表实现代码: 复制代码 代码如下:#!/usr/bin/python# -*- coding: utf-8 -*- class Node(object): def __init__(self,val,p=0): self.data = val self.next = p self.prev = p class ...
  • 描述 根据a和b的值输出由*组成的双向箭头形状。 其中a是正奇数,代表图案有几行;... 样例输入复制样例 5 3 样例输出 HINT 解: #include<...
  • 双主复制模型架构简介主-主复制(也叫双主复制或双向复制)包含两台服务器,每一个都配配置为对方的主库和备库,换句话说,它们是一对主库。架构如:2.双主模型架构的配置过程:(1).各自使用不同的server-id;...
  • mysql 主从复制架构简述1 简述2 架构模式3 功能优点4 主从复制原理5 重点参数 1 简述     MySql 主从复制,通过将一台主机的数据复制到其他一台或多台主机上,并重新应用日志(relay log) 中的SQL语句来实现...
  • 简介:本程序使用双向循环链表实现了约瑟夫环 ,查的数m 大于 n 也是可以的。 下面的程序可以直接复制使用,也可以下载压缩包。...本程序的基本思想和上所介绍的基本一致,使用的是 双向循环链表 来实现的。 ...
  • Oracle高级复制,也成为对称复制,分为多主体复制、物化试图复制和前两种的混合复制(参考1-1,1-2)。高级复制主要是用在对称的、等同的数据库表之间的(单向或双向)的复制,以满足分布式应用的需求。但高

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 245
精华内容 98
关键字:

双向复制图