MYSQL数据库间同步数据

http://blog.csdn.net/swandy45/article/details/6982421

环境要求:

Windows 操作系统

需要Mysql 3.23.15以后的版本。

假设数据库A为主机,数据库B为从机(A向B提供同步服务,即B中的数据来自A)

A机器:IP=10.10.151.166

B机器:IP=10.10.151.156

下面看单向同步的配置步骤:

1         在机器A中建立一个新的数据库,sql语句:

[sql] view plain copy

  1. CREATE DATABASE backup_db;
  2. USE test;
  3. CREATE TABLE `backup_table` (
  4. `id` int(11) NOT NULL auto_increment,
  5. `name` varchar(20) character set utf8 NOT NULL,
  6. `sex` varchar(2) character set utf8 NOT NULL,
  7. PRIMARY KEY  (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2     打开A机器的mysql安装目录下的my.ini文件,在文件最后添加:

[plain] view plain copy

  1. server-id=1
  2. log-bin=c:\mysqlback #启动同步事件的日志记录文件
  3. binlog-do-db=test #提供数据同步服务的数据库

3      在机器B中建立一个和机器A结构相同的数据库,sql语句:

[plain] view plain copy

  1. CREATE DATABASE backup_db;
  2. USE test;
  3. CREATE TABLE `backup_table` (
  4. `id` int(11) NOT NULL auto_increment,
  5. `name` varchar(20) character set utf8 NOT NULL,
  6. `sex` varchar(2) character set utf8 NOT NULL,
  7. PRIMARY KEY  (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

注:机器A和B的数据库结构必须一致,否则无法构成同步

4       打开B机器的mysql安装目录下的my.ini文件,在文件最后添加:

[plain] view plain copy

  1. server-id=2
  2. master-host=10.10.151.166 #主机A的地址
  3. master-user=ym #主机A提供给B的用户,该用户中需要包括数据库test的权限
  4. master-password=ym #访问密码
  5. master-port=3306 #端口,主机的MYSQL端口
  6. master-connect-retry=60 #重试间隔60秒,当主从服务器连接意外断开时数据库每隔60秒进行一个重新连接
  7. replicate-do-db=test #同步的数据库
  8. p>5   完成以上配置之后,在机器A的mysql控制台中输入:</p>

[plain] view plain copy

  1. GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO [email protected] IDENTIFIED BY  ‘ym‘ ;

#这句是为让从服务器有足够的权限从主服务器是哪个接收二进制日志文件

6    重启机器A和B的mysql数据库,

[plain] view plain copy

  1. 在机器B的mysql控制台:
  2. Mysql>slave start;
  3. 如果想查看同步配置的情况,可以按如下输入:
  4. 机器A的mysql控制台:
  5. Mysql>show master status;
  6. 机器B的mysql控制台:
  7. Mysql>show slave status;

7         在机器A中test数据库中的backup_table表中插入一些数据,查看机器B中test数据库中的backup_table表应该同步实现了数据的改动。

下面是双向的数据同步配置步骤:

1还是上面使用的机器A和机器B,这是B是主机,A是从机,保持上面的配置不要改在机器A 的mysql安装目录下的my.ini文件最后添加:
       master-host=10.10.151.156 #主机B的地址
       master-user=ym #主机B提供给A的用户,该用户中需要包括数据库test的权限
        master-password=ym #访问密码
        master-port=3306 #端口,主机的MYSQL端口
        master-connect-retry=60 #重试间隔60秒当主从服务器连接意外断开时数据库每隔60秒进行一个重新连接
        replicate-do-db=test #同步的数据库
        在机器B的mysql安装目录下的my.ini文件最后添加       
        log-bin=c:\mysqlback #启动同步事件的日志记录文件
        binlog-do-db=test #提供数据同步服务的数据库
       
      2 机器B的mysql控制台输入:
         GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO [email protected] IDENTIFIED BY  ‘ym‘ ;    
      3 重启机器A和机器B的mysql数据库
        在机器B中test数据库中的backup_table表中插入一些数据,查看机器A中test数据库中的backup_table表应该同步实现了数据的改动。但不会导致循环
       注:实现mysql数据库的数据同步,须将俩台windows操作系统的windows防火墙关闭
       Mysql 数据同步的原理:
       Mysql的数据同步,在Mysql官方网站文档上,叫replication字面意思是重作,这个很准确的表明了Mysql数据库操作的实质,是重作同样的操作,以保持主数 据库服务器没事master与从属数据库服务器slave之间的数据保持一致。
       从MySQL3.23.15以后,Mysql支持单向的异步复制。也就是说,1台Mysql服务器充当Master(主库),1台或多台Mysql服务器充当Slaves(从库),数据从 Master向Slaves进行异步复制。注意,这种复制是异步的,有别于Mysql的同步复制实现(这种实现称做Mysql集群,Mysql Cluster)。
       当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log它记录了所有更新了数据或者已经潜在更新了数据的所有语句),并维护一个二进制日志 文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部 分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化保证主从数据库之间的数据同步。 较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。这种方法是利用了Mysql数据库主(master)和从(slave)异步复制功能,来实现数据库 之间的同步。
       Windows系统中,Mysql安装目录下my.ini文件中:
       log-bin=c:\mysqlback;
       这一句表示数据库的二进制日志文件都存放在C盘根目录下,并且以mysqlback为文件名,以.000001这样的序号为为文件的扩展名,每一个binlog文件默认是 1GB,超过了会自动换到以.000002为文件扩展名的的文件,索引文件mysqlback.index文件记录了所有mysqlback的文件名。当然也可以删除这些二进制日志 文件:
       使用下面的两个命令   
       PURGE {MASTER | BINARY} LOGS TO ‘log_name‘ //log_name不会被清除,删除这个序号以//前的
       PURGE {MASTER | BINARY} LOGS BEFORE ‘date‘ //date不会被清除,删除这个日期以前的
       删除之前所有的二进制日志文件,并重新生成新的二进制日志文件后缀从.000001开始。
       但是,当如果有一个正在运行的从属服务器,该服务器当前正在读取正在试图删除的日志文件时则该删除语句不会起作用,而是会失败,并伴随一个错误。不过, 如果从属服务器是停止的,并且碰巧清理了其想要读取的日志文件,则从属服务器启动后便不能复制。当从属服务器正在复制时,删除语句可以安全运行,不需要 停止它们。
       在完成了主服务器A的my.ini文件的配置之后,重启主服务器A,从现在起对主服务器A数据库的增加、删除和修改操作都会记录在二进制日志文件中(查询操作不 做记录)。但也可以指定从服务器从哪里开始和主服务器进行同步,在从服务器上执行下面sql操作:
       首先输入命令:slave stop;
       然后输入:Mysql > change master to 
       —>master_host=’master_host_name’,#主机IP地址
       —>master_user=’replication_user_name’,
       —>master_password=’replication_password’,
       —>master_log_file=’recorded_log_file_name’,
       —>master_log_pos=’recorded_log_position’;
       最后输入命令:slave start;
       这里,把上面的recorded_log_file_name改为想从哪个二进制日志文件开始同步的文件名,而recorded_log_position改为从该文件的第几条记录开始同 步。
       先输入slave stop;指令,再输入上述指令,最后输入slave start;指令
       当数据同步产生错误时,会在mysql安装目录下生成*.err日志文件,同时同步线程会退出。
       purge binary logs to ‘mysql-bin.000003′;
       PURGE {MASTER | BINARY} LOGS TO ‘log_name‘
       PURGE {MASTER | BINARY} LOGS BEFORE ‘date‘
       用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
       例如:
       PURGE MASTER LOGS TO ‘mysql-bin.010‘;
       PURGE MASTER LOGS BEFORE ‘2008-06-22 13:00:00‘;
        清除3天前的 binlog
        PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
       BEFORE变量的date自变量可以为‘YYYY-MM-DD hh:mm:ss‘格式。MASTER和BINARY是同义词。

时间: 2024-10-31 00:32:08

MYSQL数据库间同步数据的相关文章

【转】mysql数据库读写分离数据同步

转载请注明来源:mysql数据库读写分离数据同步 mysql数据库读写分离数据同步 我是用了两个xp(一个主的,一个从的)的系统测试成功的,linux系统我也做测试了,没有成功,不过我想我所遇到的问题是同一个问题,xp下的可以成功,linux下的应该也可以成功,稍候会测试,然后更新结果! PS:刚测试了下linux 可以同步成功,主服务器是xp,从服务器是centos,可以成功. 例: A机器 192.168.0.2 B机器 192.168.0.3 两个机器可以ping通,互相访问 先配置主服务

利用Navicat工具实现MySQL数据库结构同步

Navicat 是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设.Navicat提供多达 7 种语言供客户选择,被公认为全球最受欢迎的数据库前端用户界面工具. Navicat旗下有多个产品成员 ,可以用来对本机或远程的 MySQL.SQL Server.SQLite.Oracle 及 PostgreSQL 数据库进行管理及开发.因为文中介绍的是MySQL数据库,因此我们要用到的是Navicat旗下的Navicat For MySQL工具.Navicat Fo

mysql数据库主从同步

环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168.108.140 1.导出主服务数据,将主备初始数据同步 master: //从master上导出需要同步的数据库信息 mysqldump -u*** -p*** --database test > test.sql //将master上的备份信息传输到slave上 scp /root/test.sq

linux下mysql数据库主从同步配置

说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说明:在两台MySQL服务器192.168.21.128和192.168.21.129上分别进行如下操作 备注: 作为主从服务器的MySQL版本建议使用同一版本! 或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本! 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接

mysql数据库主从同步配置教程--数据库同步

背景: 最近有一个mysql数据库同步的需求,我用了mysql主从同步的方法来实现.下面把步骤记录一下. 环境和拓扑 操作系统:Centos6.6 X64 mysql版本:5.1.73 Master: 10.6.1.210 Slave:  10.6.1.211 需求: 实现Master上test库同步到Slave上,但是禁止同步该库下的AA表 1.配置Master上的my.cnf #vim  /etc/my.cnf 添加内容到[mysqld]下,设定只同步test 数据库: [mysqld] l

使用sqoop将MySQL数据库中的数据导入Hbase

使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-connector-java-5.1.10.jar 拷贝到 /usr/lib/sqoop/lib/ 下 MySQL导入HBase命令: sqoop import --connect jdbc:mysql://10.10.97.116:3306/rsearch --table researchers --h

谈谈Mysql数据库主从同步延迟分析及解决方案

一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 log dump 线程,用来给从库I/O线程读取binlog: 3. 从库的I/O Thread去请求主库的binlog,并将得到的binlog日志写到relay log文件中: 4. 从库的SQL Thread会读取relay log文件中的日志解析成具体操作,将主库的DDL和DML操作事件重放. 关

mysql数据库远程同步及备份

复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器.特定的数据库,甚至特定的表进行复制.Mysql复制大部分都是向后兼容的.这意味着版本较新的服务器可以是版本较老的服务器的从服务器.但老版本的服务器通常不能是新版本号的服务器的从服务器.复制通常不会大幅增加主服务器的开销.它需要主服务器启用二进制日志,这或许会有较大的开销,但是出于备份的目的,无论如何这种

mysql数据库主从同步(交互式)

mysql数据库主从同步交互式配置步骤,本文以一台mysql数据库多实例3306和3307为例进行配置,3306为主库,3307为从库(多台单实例与一台多实例配置是一样的) 一.my.cnf文件配置 1.修改my.cnf配置文件,主数据库3306要打开log-bin,server-id不能一样 [[email protected] ~]# egrep"log-bin|server-id" /data/{3306,3307}/my.cnf /data/3306/my.cnf:log-bi