热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysql数据库同步详解_MySQL

mysql数据库同步详解
bitsCN.com

同步介绍:

MySQL 的数据同步,在MySQL 官方网站文档上,叫Replication 字面是重作的意思,意译就是同步了。其实,MySQL 的同步,并不是使用同步sync 这个单词而是用重作replication,很准确表明了MySQL 数据库操作的实质,是作同样的操作,或叫重作同样的操作,以保持主数据库服务器master 与 从属服务器slave 之样的数据保持一致。replication 就是有重复,重作的意思。

同步原理:

MySQL 为了实现replication 必须打开bin-log 项,也是打开二进制的MySQL 日志记录选项。MySQL 的bin log 二进制日志,可以记录所有影响到数据库表中存储记录内容的sql 操作,如insert / update / delete 操作,而不记录select 这样的操作。因此,我们可以通过二进制日志把某一时间段内丢失的数据可以恢复到数据库中(如果二进制日志中记录的日志项,包涵数据库表中所有数据,那么, 就可以恢复本地数据库的全部数据了)。 而这个二进制日志,如果用作远程数据库恢复,那就是replication 了。这就是使用replication 而不用sync 的原因。这也是为什么要设置bin-log = 这个选项的原因。

在同步过程中,最重要的同步参照物,就是同步使用那一个二进制日志文件,从那一条记录开始同步。

同步过程:

首先,你应该有两个或两个以上的MySQL 数据库服务器,版本最好是在3.3 以上 (当然,两个服务器不一定是两台机器,一台机器上安装两个MySQL 服务是可以的,同时,如果你对MySQL replication 原理十分精通的话,你甚至可以在一个MySQL 服务的两个不同数据库database 之间作同步,看有没有需要了)说明: 这两个服务器一般设置一个为主服务器,或叫源服务器,master mysql server, 另一台或其他多台就是replication slave 同步从服务器了。一台slave 与多台slave 设置方法是一样的,这样你就可以作类似数据库集群了。

设置可访问MySQL 帐号,操作以英文为准。

MySQL 帐号一般设置为限定IP 访问,以保障安全性

MySQL 帐号一般在master 与slave 设置为相同帐号,同时是远程可访问

特别注意,如果你用Linux / Unix 操作系统,那一定要注意一下防火墙firewall 有没有限制MySQL 远程访问,如果是,最好是打开远程访问端口,并作好访问IP 限制

由于my.cnf 中要明文存储MySQL 帐号密码,请注意保护my.cnf 不让其他用户访问到(看来要向MySQL 说明下以后用密码存passwd)。

第三步,当然是设置两个服务器要同步的数据库为同样的数据库了。

这里有一些技巧,包括mysql 的sql 指令说明下。

方法之一,就是英文说明中说的,先锁定数据库读写功能( 其实最好是停止mysqld 服务,再作备份) 然后用tar 备份数据库目录,转到slave 服务器相同数据目录中。

方法之二,使用mysql studio 这样的实用工具,直接使用mysql studio 的backup database 工具把数据库同步

以上两种方法都是master 数据库中有不少数据记录,按上两 种方法得到master 与slave 有相同数据库与数据记录。 而第三种方法,则是适合于新建数据库的情况,特别适合于 master 与slave 在my.cnf 已经设置好replication 关系 (但 未指定database 同步数据库) 的情况: 这就是使用 mysql 的sql 语句load table from master 与load data from master;

load table from master 可以从master 数据库把表结构复制到slave 数据库中,这样可以建立同步的表。load data from master 是从master 数据库把数据导入到slave 数据表中,条件是master 从一开始安装运行就使用了bin-log 参数而保存有二进制日志

接下来就是配置master 与slave 的my.cnf 文件,使得replcation 能有合适的启动参数以支持数据同步

技巧: 如果你使用win2k 的mysql 那么,你可以下载mysql.com 出的官方mysql administrator 实用程序,直接在mysql administrator 中即可配置master 与slave ,同时也可以配置query-cache 。

在master 的my.cnf(如果是win32 那就是my.ini)增加

[mysqld]

log-bin =

server-id=1

注意,上面的log-bin = 中的 等号= 是不可少的。

在slave 的my.cnf 修改

[mysqld]

server-id=2 # 如果有多个slave 就改为不重复的id 就好,在mysql 4.1 中,这个已经取消了

master-host=10.10.10.22

master-user=backup #同步用户帐号

master-password=1234

master-port=3306

master-connect-retry=60 #预设重试间隔60秒

replicate-do-db=test # 告诉slave只做test 数据库的更新

bin-log =

检查master 与slave 配置状态,使用show master status; 与show slave status; 这两个SQL 指令即可在master 与slave 查看配置状态。这里有两个状态变量十分重要

mysql > SHOW MASTER STATUS;

+---------------+----------+--------------+------------------+

| File  | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| mysql-bin.003 | 73  | test  | manual,mysql |

+---------------+----------+--------------+------------------+

注意File 是mysql-bin.003 而position 是73

这个文件是对test 这个 数据库的二进制日志记录,记录数据变化的当前记录条数是73

前面我们说过,二进制日志记录着某个数据库所有数据记录变化的sql 操作语句,如insert / update / delete 等,正是因为如此,在slave 同步mysql 数据库操作时,其实是读取master 中这个mysql-bin.003 二进制日志中的sql 操作,同在slave 中执行这些sql 操作,所以,同步成功有以下几个条件:

master 与slave 有相同的数据库表结构,最好database name 也一样(可以设置为不一样的database name)

master 与slave 有相同的初始数据记录,保证同步操作开始后两者数据一致

master 必须使用bin-log 二进制日志记录(推荐slave 也使用bin-log)

slave 是从master 的bin-log 是读取sql 记录来同步,所以,从哪一条log 开始读取很重要(下面的第7 条操作,就是保证slave 能与master 保持相同的记录读取,并读取正确的bin-log 日志文件)

在slave 执行下面sql 操作

mysql> CHANGE MASTER TO

-> MASTER_HOST='master_host_name',

-> MASTER_USER='replication_user_name',

-> MASTER_PASSWORD='replication_password',

-> MASTER_LOG_FILE='recorded_log_file_name',

-> MASTER_LOG_POS=recorded_log_position;

这里,把 上面的redcorded_log_file_name 改为 mysql-bin.003 而recorded_log_position 改为73 (特别注意,这是关系关键)。

linux 下的mysql 与win2k 下的MySQL 作replication 会有什么技巧:

注意Linux 下有大小写区分,而win2k 下没有。所以最好使用mysqldump 方法来让两个数据库初始化同步,而不能使用tar 方式直接copy 数据库表文件。使用mysql studio 来作database backup 也不错

注意win2k 下的mysql 配置文件是c:/my.ini。你可以使用mysql administrator 0.9 这个图型界面的实用工具来设置。

如果win2k 下的mysql 为master , 一定要注意show master status 中显示出来的结果。

win2k 下的mysql 为slave 时,注意不要把同步时间周期设置太长。

同步实战:

环境:

环境配置

操作系统:CentOS release 5.3 (Final) 64bit

MySQL:5.14

主服务器A IP:10.224.194.239

从服务器B IP:10.224.194.237

同步数据库: test(用于测试,两台服务器初始数据一致)

主服务器(master)设置

新建一个用于备份的用户(直接用root用户也可以):

GRANT FILE ON *.* TO backup@10.224.194.237 IDENTIFIED BY ‘pass’;

GRANT REPLICATION SLAVE ON *.* TO backup@10.224.194.237 IDENTIFIED BY 'pass';

编辑“/etc/my.cnf”(不同服务器可能路径不同)文件,在该文件添加以下内容:server-id=1 #设置服务器id,主从服务器要不同log-bin=mysqllog #启用二进制变更日志(即把所有对数据进行操作的SQL命令以二进制格式记入日志)#其中mysqllog是日志文件的名称,日志的文件名是mysqllog.n,其中n是一个6位数字的整数。binlog-do-db=test #指定需要启用二进制变更日志的数据库"test" binlog-ignore-db = mysql #指定不需要启用二进制变更日志的数据库"mysql"

重启mysqld服务,可以用mysql命令:SHOW MASTER STATUS;查看“启用二进制变更日志”情况

从服务器(slave)设置

编辑“/etc/my.cnf”(不同服务器可能路径不同)文件,在该文件添加以下内容:

server-id=2 #设置服务器id,主从服务器要不同replicate-do-db=test #指定需要从master同步过来的数据库"test" replicate-ignore-db = mysql #指定不需要从master同步过来的数据库"mysql" #设置master服务器的IP地址、登陆用户、密码、端口master-host=10.224.194.239 master-user=backup master-password=pass master-port=3306 master-connect-retry=60 #连接master服务器失败后重试的延迟时间slave-skip-errors=all #跳过所有错误继续执行同步工作log-slave-updates #启用从属服务器上的日志同步功能

注意:如果从服务器上存在master.info文件(如:/var/lib/mysql/master.info),要使以上配置选项生效,在重启mysqld服务前必须删除该文件。

重启mysqld服务,可以用mysql命令:SHOW SLAVE STATUS;查看同步情况

从数据库的相关命令:

slave st; slave start ; 开始停止从数据库。

show slave statusG; 显示从库正读取哪一个主数据库二进制日志

验证:

在主/次 服务器上创建一张表名为test01,最好设置主键:让后在主服务器上插入一条数据,此时会同步到次服务器上,如果没有成功,查看log,号配置项是否正确

create table test01

( name_id varchar(10) not null,

primary key(name_id)

)

insert into test01(name_id) value(1);

成功完成以上配置后,在主服务器A的test库里添加数据或删除数据,在从服务器B的test库里马上也能看到相应的变更。两台服务器的同步操作可以说是瞬间完成的。

本文出自 “迈小步、不停步!” 博客

bitsCN.com
推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了在CentOS 7.x上进行端口映射配置的方法,通过修改内核和配置防火墙实现端口映射。作者分享了自己使用华为服务器进行端口映射的经验,发现网速比直连还快且稳定。详细的配置过程包括开启系统路由模式功能、设置IP地址伪装、设置端口映射等。同时,还介绍了如何监听本地端口的tcp请求,以及删除规则和开放的端口的方法。 ... [详细]
author-avatar
浅唱_夏染_744
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有