简明现代魔法 -> 数据库技术 -> MySQL 数据库同步

MySQL 数据库同步

2010-01-15

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 时,注意不要把同步时间周期设置太长。

实战

环境配置

操作系统:linux

MySQL:5.14

主服务器A IP:192.168.1.2(假设)

从服务器B IP:192.168.1.3(假设)

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

主服务器(master)设置

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

GRANT FILE ON *.* TO backup@192.168.1.3 IDENTIFIED BY ‘123456’;

编辑“/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=192.168.1.2

master-user=backup

master-password=123456

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; 显示从库正读取哪一个主数据库二进制日志

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

mysql数据库同步时间_MySQL 数据库同步相关推荐

  1. mysql自动同步数据_MySQL数据库实现双向自动同步

    [IT168 技术]本文将探讨如何通过MySQL数据库的高级特性,实现数据库的双向自动同步,确保数据的冗余与完整性.通过以往真实的项目实战与经验,把操作实施过程全部记录下来,主要有以下几个主要内容. ...

  2. mysql数据库同步工具_mysql同步工具_mysql数据库同步

    下载网站:www.SyncNavigator.CN  客服QQ1793040 ---------------------------------------------------------- 关于 ...

  3. mysql数据库物理备份_MySQL数据库之xtrabackup物理备份(一)

    (1)备份开始时会开启一个后台检测进程,实时检测mysql redo(已提交的事务)的变化,一旦发现redo中有新日志写入,立刻将日志记入后台日志文件xtrabackup_log中, (2)复制Inn ...

  4. mysql数据库前端缓存_MySQL数据库性能优化--缓存参数优化

    在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣 ...

  5. jdbc和mysql做游戏排行榜_MySQL数据库与JDBC编程

    欢迎关注公众号:xfxuezhang MySQL数据库与JDBC编程 JDBC (Java Database Connectivity) DDL(Data Definition Language,数据 ...

  6. mysql试题百度云_MySQL数据库无完整备份删库,除了跑路还能怎么办?

    1.背景 前段时间,由于运维同事的一次误操作,清空了内网核心数据库,导致了公司内部管理系统长时间不可用,大量知识库内容由于没有备份险些丢失. 结合这两天微盟的删库跑路事件,我们可以看到,数据库的备份与 ...

  7. mysql半同步模式_MySQL 半同步复制模式的实现

    半同步复制原理图 #半同步启动需要主从两端都需要加载安装各自对应的semi模块,从库端支持半同步功能的数量至少一台:主库端当一个事务成功提交后,并不及时反馈给前端用户,该线程会被临时block,等待由 ...

  8. mysql数据库 博客_mysql数据库教程--第 页-杨雨个人博客-关注互联网和搜索引擎的技术博客...

    发布时间:19-07-02 作者:杨雨 分类:mysql教程 Mysql主从基本原理,主要形式以及主从同步延迟原理 (读写分离)导致主库从库数据不一致问题的及解决方案.从数据库(Slave)是主数据库 ...

  9. mysql 同步方式_MYSQL 主从同步详解

    关于MYSQL主从同步 什么是MYSQL的主从复制 主从复制是指将一个服务器作为主服务器,所有的数据更新操作都在主服务器进行,并且将主服务器的数据同步到一个或多个从服务器,保证从服务器和主服务器的数据 ...

最新文章

  1. 数据结构c语言函数大全,数据结构习题库(c语言版).doc
  2. 架构设计本质:系统与子系统、模块与组件、框架与架构
  3. css3学习 之 css选择器(css3 属性选择器)
  4. Fabricjs在Canvas上使用路径Path绘制不规则图形
  5. java取消按钮事件_java按钮事件处理程序
  6. 从“等等”到“秒开”再到“直开”,是什么让闲鱼社区相见恨晚?
  7. spring学习(8):log4j.properties 详解与配置步骤
  8. 1bit和1byte_1byte等于( )bit_学小易找答案
  9. 神奇的四次方数(洛谷P1679题题解,Java语言描述)
  10. BZOJ 3529 数表(莫比乌斯+树状数组)
  11. 给她帮忙她也没有说给我多少钱
  12. Hexo多客户端同步问题
  13. python 颜色大全 颜色对应 matplotlab plot 颜色对应
  14. Vibe算法简介、优缺点、代码
  15. 腾讯会议共享屏幕时,设置演讲者模式仅自己可见
  16. pix4d操作流程_Pix4d_mapper中文版操作手册.pdf
  17. 记录根据runoob(菜鸟教程)学习Django遇到的坑
  18. Spring Security Oauth2 JWT、第三方登录、单点登录讲解,并使用Oauth2.0结合微服务进行单点登录
  19. 如何使用 群晖Docker 安装教程,运行智汀家庭云?
  20. java 学习之路建议

热门文章

  1. 2021年中国期货公司经营现状及交易规模分析[图]
  2. css背景颜色透明,字体不透明
  3. 五一不想被堵建议你去渭南周边清净人少的地方去游玩
  4. VMware虚拟机迁移到PVE
  5. MyBatis查询数据返回null
  6. ipad分屏功能怎么开启_苹果手机便签怎么设置开启分类密码功能? - 学显
  7. 程序员秒懂的6个梗,其实做程序员和买橘子是一样的
  8. 子页面调用父页面的js方法或参数(iframe.contentWindow)
  9. Ubuntu的常用快捷键总结,桌面图标的添加,常用命令,读音
  10. PHP入门指南:简单易学的语法和丰富的调试工具与安全性最佳实践