精华内容
下载资源
问答
  • mysql多台服务器数据同步

    千次阅读 2010-09-15 09:51:00
    mysql多台服务器数据同步

    mysql多台服务器数据同步

     

    /**
    *@ Date         2010.09.13
    *@ Author       狼

    *@ Email        1317983530@qq.com
    *@ QQ           1317983530

    *@博客           http://hi.baidu.com/1317983530/home
    */

    这两天在搞mysql 数据同步问题,这配置很繁琐。我这里用了两台机子做测试, 都是我本地的机子.分别是
    主服务器 192.168.0.118
    从服务器 192.168.0.187


    1. 首先在 主从服务器分别创建数据库 backup_db和backup_table表作为测试
    CREATE TABLE `backup_table` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(20) character set utf8 NOT NULL,
      `sex` varchar(2) character set utf8 NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    注意主从服务器数据库结构必须一致。否则出错.

    2.在住服务器的mysql按照目录找到my.ini文件,打开这个文件在文件末尾加上如下代码
    #主机器的my.cnf(或my.ini)中应该配置:

    server-id=1 #表示主服务器
    log-bin=e:/mysqlback/ #同步事件的日志记录文件
    log-bin-index =e:/mysqlback/master-log-bin.index
    log-error =e:/mysqlback/master-error.log #错误日志
    binlog-do-db=backup_db #提供数据同步服务的数据库(这里是刚才创建的测试数据库)

    3. 配置完主服务器后 打开从服务器的my.cnf(或my.ini)文件 在文件末尾加入 如下代码

    server-id=2 #表示从服务器
    master-host=192.168.0.118 #主机A的地址
    master-user=testuser #主机A提供给B的用户,该用户中需要包括数据库backup_db的权限
    master-password=testpwd #访问密码
    master-port=3306 #端口,主机的MYSQL端口
    master-connect-retry=60 #重试间隔60秒
    replicate-do-db=backup_db #同步的数据库

    4. 完成后,然后在主从服务器的cmd 里面打开mysql控制台  授权从服务器的testuser用户来主服务器同步资源的权限
    主服务器执行 GRANT FILE ON *.* TO testuser@'192.168.0.187' IDENTIFIED BY 'testpwd'
    从服务器执行 GRANT FILE ON *.* TO testuser@'192.168.0.118' IDENTIFIED BY 'testpwd'

    5. 重启主从服务器的mysql
    从服务器 mysql>slave start ;

    主服务器执行 mysql>show master status;   结果如下
    mysql> show master status;
    +---------+----------+--------------+------------------+
    | File    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +---------+----------+--------------+------------------+
    | .000002 |      613 | backup_db    |                  |
    +---------+----------+--------------+------------------+
    1 row in set (0.00 sec)

    从服务器
    mysql>start slave;
    mysql> show slave status/G;
    执行结果
    *************************** 1. row ***************************
    Slave_IO_State:
    Master_Host: 192.168.0.118
    Master_User: testuser
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_ mysql-bin.000016
    Read_Master_Log_Pos: 173
    Relay_Log_ mysqld-relay-bin.000002
    Relay_Log_Pos: 98
    Relay_Master_Log_ mysql-bin.000016
    Slave_IO_Running: No
    Slave_SQL_Running:Yes
    ...

    执行结果 Slave_IO_Running 和 Slave_SQL_Running 必须为yes 如果你发现Slave_IO_Running: No 那么可能是权限问题
    解决步骤:
    mysql> show master status;
    +------------------+--------------------+----------------+------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+-------------------+-----------------+------------------+
    | mysql-bin.000001 | 98 | | |
    +------------------+--------------------+-----------------+------------------+
    mysql> slave stop;
    mysql> change master to Master_Log_File='mysql-bin.000001',Master_Log_Pos=98;
    mysql> slave start;

    或者打开主从服务器的 phpmyadmin 找到testuser 用户 设置它们的权限 然后再分别重启,再到从服务器中mysql> show slave status/G;
    发现
    Slave_IO_Running: Yes
    Slave_SQL_Running:Yes

    这时你在 主服务器的phpmyadmin 找到 backup_db 的 backup_table表 插入一条记录, 在到从服务器中看看这张表,发现多了一条记录 ,成功了!!!

    展开全文
  • 服务器数据同步

    2017-10-16 16:00:39
    台服务器之间的数据同步台服务器之间的数据同步台服务器之间的数据同步
  • 多台服务器mysql数据库数据同步

    千次阅读 2018-11-28 16:59:31
    3台服务器主架构,3台服务器都可以写入并且做到3台服务器数据一致性(任意一台服务器做写入操作都可以,并且每台服务器数据做到完全一致),并且防止主键冲突.目前只有3台MySQL服务器,不使用生成唯一id的程序。 ...

    3台服务器的多主架构,3台服务器都可以写入并且做到3台服务器的数据一致性(任意一台服务器做写入操作都可以,并且每台服务器的数据做到完全一致),并且防止主键冲突.目前只有3台MySQL服务器,不使用生成唯一id的程序。

    在3台主服务器上创建mysql用户创建用户(使用root也可以,但是不建议) , 该用户必须有 REPLICATION SLAVE 权限
    创建用户:CREATE USER ‘cong’@‘192.168.43.%’ IDENTIFIED WITH mysql_native_password by ‘123456’;
    赋权:GRANT REPLICATION SLAVE ON . TO ‘cong’@‘192.168.43.%’;
    刷新权限:flush privileges;
    在从服务器上测试使用主服务器刚刚创建的账号是否能够正常连接 例如
    /usr/local/mysql/bin/mysql -ucong -p123456 -h192.168.43.210

    停止主、从服务器的mysql服务
    例如 /etc/init.d/mysql stop

    主服务器必须打开开二进制日志 例如 vi /etc/my.cnf (根据实际路径)
    主要是修改配置文件 , 一般在 linux 下安装的 mysql 配置文件是 my.cnf, 在
    windwos 下是 my.ini,
    修改主服务器配置文件vi /etc/my.cnf:
    1.MySQL的生成二进制日志时会记录server-id值,因此在通过二进制日志同步时不会产生无限循环同步的问题。
    2.防止主键冲突可以通过调整MySQL自增主键的步长和初始值来解决.例如配置文件可做如下更改。
    auto_increment_increment= 3或者其他值 如果设置为2自增时每次+3
    auto_increment_offset= 2或者其他值 偏移量 也就是默认从哪个值开始自增
    3.mysql作为从服务器同步数据时如果也需要记录到二进制日志中,可以通过参数log-slave-updates= on来设置。

    每台主机的 server-id与偏移量不同,而且每台的uuid也不同。
    ** uuid在auto.cnf中修改:
    vi /usr/local/mysql/var/auto.cnf
    假设这三台服务器ip分别为: 192.168.43.210 192.168.43.211 192.168.43.212
    则192.168.43.210的my.cnf配置为:

    server-id=1
    auto_increment_increment= 3
    auto_increment_offset= 1
    log-slave-updates= on
    

    211,212修改server-id与auto_increment_offset,使三台服务器不同。

    log-bin= 二进制文件的位置 # 主服务器需打开二进制日志 可以是默认值也 可以创建新目录并且赋予可写权限
    例如log-bin=/usr/local/mysql/binlog/bin-log
    默认日志文件在mysql安装目录下的var目录下
    binlog-do-db=mydata # 需要同步的数据库 默认都同步
    #binlog-ignore-db= # 需要忽略的数据库 默认不忽略任何数据库
    启动mysql服务 /etc/init.d/mysql start
    如果使用了默认的二进制日志配置 需要将原始日志文件删除后再启动mysql服务,(cd /usr/local/mysql/var)启动后可以查看二进制日志目录下是否生成新文件,如果已经生成日志文件说明配置是正确的。

    启动mysql服务 /etc/init.d/mysql start
    进入mysql命令 行执行命令
    1. change master to master_host=’ 主 服务 器 地 址 ‘, master_user=’ 用 户名 ‘,
    master_password=’ 密码 ',
    master_port= 端口号 ,MASTER_CONNECT_RETRY=10;
    例如在192.168.43.210上执行 :

    change master to master_host='192.168.43.211',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;
    

    192.168.43.211上执行 :

    change master to master_host='192.168.43.212',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;
    

    192.168.43.212上执行 :

    change master to master_host='192.168.43.210',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;
    

    2. 再执行

     start slave;
    

    3. 在从服务器输入命令

    show slave status\G;
    

    查看状态 :

    Slave_IO_State: Waiting for master to send event
    Master_Host: 192.168.16.6
    Master_User: slave
    Master_Port: 3306
    Connect_Retry: 10
    Master_Log_File: binlog.000002
    Read_Master_Log_Pos: 903
    Relay_Log_File: relaylog.000004
    .........
    

    显示:Slave_IO_State: Waiting for master to send event 连接成功。
    在主服务器上建立数据库数据表后查看从服务器 , 看是否配置成功。
    撤销配置 :
    进入命令行执行 stop slave; 再执行 reset slave; 即可 .

    展开全文
  • 跪求多台服务器数据同步架构

    千次阅读 2009-05-21 09:03:00
    跪求多台服务器数据同步架构1.现在有a b c d 四台(或者更)服务器,都是sql数据库,其功能相同,数据库结构也相同,若其中各有一表t1,当它其中任意一台数据库的此表发生更新变动的时候,其他的所有服务器中的...
    展开全文
  • 多服务器数据同步问题

    千次阅读 2016-12-31 21:43:31
    多服务器并发的操作同一个数据库的同一张表。 有如下一张表: /* Table: APP_TASK */ TASKNO VARCHAR2(22) not null, TASK_TYPE VARCHAR2(2) not null, EXECUTE_TIME DATE, PARMAS_XML VARCHAR2...

    多服务器并发的操作同一个数据库的同一张表。

    有如下一张表:

    /* Table: APP_TASK */

    TASKNO VARCHAR2(22) not null,

    TASK_TYPE VARCHAR2(2) not null,

    EXECUTE_TIME DATE,

    PARMAS_XML VARCHAR2(2000),

    STATUS VARCHAR2(1) default '0'

    ……

    表中的一条数据我们称之为一个task。我们的程序有个方法每次取出50个task,每5秒钟重复执行一次,然后根据每个task的参数去处理task,

    处理过程中和处理完成后 会更新task的STATUS等参数。

    如果只有一套程序去操作这个表,不会存在问题,但是现在要将这个应用程序部署到多个服务器上,那么每个服务器都操作同一张表,都要取出task,然后再更新

    如果不采取措施,我们无法保证它们取出的task不重复,比如服务器A取出了task1、task2、task3,在同一时间,服务器B也可能取出task2、task3,如此一来,就会乱套。

    之前波哥提了一个方法:

    "select * from task where flag = 0"; // 取任务

    ... // 一系列判断

    int i = "update task set flag = 1 where id='A' and flag = 0"; // 更新任务A,操作任务设置标志位1

    if i = 0 then

    task A is used by another server // 如果修改条数为0,则该任务已经被别人处理了,本进程不用处理。

    return

    也就是说先把task查询出来(只查1条),然后再更新这个task的flag标志,如果更新成功,则表示这条task未被其他server占用,否则,这个task已经被其他server占用了

    以前是一次查询50个task出来,但是如果按上面的方法,就要每个task更新一次。50个task就要更新50次,而5秒钟之后又要重复这个操作……

    而且实际上,不管你更新1个task还是50个task,都会存在问题,update..where...时,会试图将where查询到的数据加锁,如果该数据已经被其他连接加锁了,

    则update会一直等待其他锁释放。

    我有个解决方案,用到 select...for update nowait 语句,

    select 1个task for update nowait,然后立即 update 这个task set flag=1,最后commit

    我也考虑过:

    select 50个task for update nowait,但是这样,另外一个服务器select...for update nowait时就会因为数据被加锁而报错。

    所以一次只能试探性的取一个出来。

    这还是第一个问题。第二个问题:

    如果我们取出来数据,设置flag=1,表示这条数据已经被使用了,如果服务器重启或者出现其他意外,导致取出来的这条数据没有被执行,

    那么这条数据就被埋没了(因为它的flag已经被设置成1了,而程序查询的时候只查flag=0的数据)。

    第三个问题:

    下面要讲的这个问题更严重了。

    比如,我查询出来1条数据(一个task),这个task从查询出来,到执行结束,假设需要30秒钟。

    而如果在这30秒钟之内,有个用户发出指令要修改或者删除这条数据,于是,先前查询出来的task,与数据库中的数据就不同步了。

    所以说,我们需要在"从task被查询出来到task执行结束"这个时间段内,对这条数据保持加锁状态,不允许其他程序再更改这条数据,而且,

    必须要在同一个事务中完成对这个task的全部操作。


    后来,我想到的一个方案:添加一个is_loaded标志和load_time时间。

    初始状态IS_LOADED=0,获取任务后,更改IS_LOADED=1以及LOAD_DATE=systime,任务执行完,从taskSet中移除,更新状态IS_LOADED=0。

    如果服务器挂了(或者其他原因),那么IS_LOADED=1,但是Now-load_time > N(这个N是我们设置的超时阀值),意思就是执行时间太长,过期了,我们可以认为可能是服务器意外关掉了,这种数据可以被我们监控到。至于处理嘛,没有简单的方法,我头都想大了……

    将这种特殊任务交给多服务器去处理,肯定是不行了,交给单一服务器去处理:(我们只在其中一台服务器部署如下的方法)

    这台服务器,除了查询IS_LOADED=0的任务,还负责查询Now-load_time>N的任务(就是SQL语句和其他服务器上的稍有不同而已),如果有过期的任务,则将其状态更改成1,使得它可以被重新加载执行。


    展开全文
  • 导读:最近有个项目要做多服务器数据同步,我设计的方案是使用RDS做主数据库,各服务器上mysql做从数据库,同步RDS上的数据。读写分离,所有数据写全部写到RDS里,数据读取从本地mysql中读,这样通过同步就能保证...
  • Linux两台服务器相互同步数据方法

    千次阅读 2019-04-05 10:12:32
    使用cp命令的-n参数即可跳过相同的文件 ,但scp却没这个参数,如何实现呢? rsync 它比scp更强大,支持“不覆盖”原目录 例子:rsync -avz --progress /root/client/ root@202.112.23.12:/home/work/ ...
  • rsync+sersync实现多台服务器实时同步

    千次阅读 2019-02-20 08:55:56
    rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。 它的特性如下: 可以镜像保存整个目录树和文件系统。 可以很容易做到保持...
  • 现在有2台服务器需要每天晚上更新8万条左右数据,需要通过什么方式同步。需要把数据弄成什么格式了传给接收方,效率怎么样。以前小批量数据用的json格式通过win服务来同步,现在数据量大怕影响性能。
  • 多台服务器同步文件
  • 利用数据库复制技术 实现数据同步更新复制的概念复制是将一组数据从一个数据源拷贝到个数据源的技术,是将一份数据发布到个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使...
  • Oracle10G多台服务器同步高级复制

    千次阅读 2012-08-09 13:44:27
    需求:公司网站需要在北京网通和上海电信建两Oracle10G服务器数据必须实时同步,本来准备用物理镜向的RAC,但它对于数据通信占用流太大,而它的主要功能是做为分步式数据备份使用,而现在公司需求是两台数据时实...
  • 数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不同的是,scp会要求你输入密码如果需要的话.  最简单的应用如下:  scp 本地用户名@IP地址:文件名1 远程用户名@IP地址:文件名2  ...
  • Linux下rsync实现多服务器数据双向实时同步 话不说,直接上方式 下载rsync yum -y install rsync rsync.conf rpm包安装的配置文件一般都在 /etc/rsync.conf 根目录下的etc rsync.conf 配置详细(每...
  • 请问一下如何在台tomcat服务器之间实现代码同步,就是说一台服务器上的Javaweb项目, 和另一台服务器上的Javaweb项目进行实时同步,一旦一台更新,另一台也自动更新; 需要详细点的步骤,最好有个例子;小弟C币...
  • 现今,公司里的服务器都需要进行数据同步,而rsync则是一款数据同步很好用的软件。rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软...
  • 这在一台服务器运行的时候似乎是没有问题的,但是如果台web服务器的话,就出现问题了。 一个不错的办法就是,可以将读写分离,所有的读操作都可以直接从数据库服务器当中读出。但写操作,一般web服务器没有这个...
  • 本地数据与后台网络数据同步问题

    千次阅读 2016-07-11 18:19:50
    今天总结一下这两天的工作内容吧,项目有一个记录模块原来只做了网络存储...我需要做的:本地要建立数据库,然后H5要在我这拿数据(这个后续会说到),要抓取服务器的历史数据,还要考虑到用户两个手机切换使用时的同步

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 331,833
精华内容 132,733
关键字:

多台服务器数据同步