mysql的master slave_Mysql 数据库的同步(master slave) 详解
####原理########
mysql 的数据同步,在 mysql 官方网站文档上,叫 replication 字面是重作的意思,意译就是同步了。
mysql 为了实现 replication 必须打开 bin-log 项,也是打开二进制的 mysql 日志记录选项。
mysql 的 bin log 二进制日志,可以记录所有影响到数据库表中存储记录内容的 sql 操作,如 insert / update / delete 操作,而不记录 select 这样的操作。因此,我们可以通过二进制日志把某一时间段内丢失的数据可以恢复到数据库中,( 如果二进制日志中记录的日志项,包涵数据库表中所有数据,那么,就可以恢复本地数据库的全部数据了 )
而这个二进制日志,如果用作远程数据库恢复,那就是 replication 了。
这就是使用 replication 而不用 sync 的原因。
这也是为什么要设置 bin-log = 这个选项的原因。
在同步过程中,最重要的同步参照物,就是同步使用那一个二进制日志文件,从那一条记录开始同步。
下面的官方文档,说明如何安装与设置 mysql 同步操作,当然,英文版
http://dev.mysql.com/doc/mysql/en/Replication_HOWTO.html
以下是中文翻译:
1. 首先,你应该有两个或两个以上的 mysql 数据库服务器,版本最好是在 3.3 以上 ( 当然啦,两个服务器不一定是两台机器,一台机器上安装两个 mysql 服务是可以的,同时,如果你对 mysql replication 原理十分精通的话,你甚至可以在一个 mysql 服务的两个不同数据库 database 之间作同步,看有没有需要了)
说明: 这两个服务器一般设置一个为 主服务器,或叫源服务器, master mysql server, 另一台或其他多台就是 replication slave 同步从服务器了。一台 slave 与多台 slave 设置方法是一样的,这样你就可以作类似数据库集群了
2. 设置可访问 mysql 帐号,操作以英文为准
说明:
2.1 mysql 帐号一般设置为限定 ip 访问,以保障安全性
2.2 mysql 帐号一般在 master 与 slave 设置为相同帐号,同时是远程可访问
2.3 特别注意,如果你用 linux / unix 操作系统,那一定要注意一下防火墙 firewall 有没有限制 mysql 远程访问,如果是,最好是打开远程访问端口,并作好访问 ip 限制
2.4 由于 my.cnf 中要明文存储 mysql 帐号密码,请注意保护 my.cnf 不让其他用户访问到( 看来要向 mysql 说明下以后用密码存 passwd )
3. 第三步,当然是设置两个服务器要同步的数据库为同样的数据库了
这里有一些技巧,包括 mysql 的 sql 指令说明下
3.1 方法之一,就是英文说明中说的,先锁定数据库读写功能 ( 其实最好是停止 mysqld 服务,再作备份) 然后用 tar 备份数据库目录,转到 slave 服务器相同数据目录中
3.2 方法之二,使用 mysql studio 这样的实用工具,直接使用 mysql studio 的 backup database 工具把数据库同步
3.3 以上两种方法都是 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参数而保存有二进制日志
技巧: 如果你使用 win2k 的 mysql 那么,你可以下载 mysql.com 出的官方 mysql administrator 实用程序,直接在 mysql administrator 中即可配置 master 与 slave ,同时也可以配置 query-cache 哟
在 master 的 my.cnf ( 如果是 win32 那就是 my.ini ) 增加
[mysqld]
log-bin=database_bin_log
#记录日志的数据库
binlog-do-db=database
#binlog-ignore-db=db_name //不记录日志的数据库
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 = database_bin_log
5. 检查 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 操作,所以,同步成功有以下几个条件
1. master 与 slave 有相同的数据库表结构,最好 database name 也一样 ( 可以设置为不一样的 database name)
2. master 与 slave 有相同的初始数据记录,保证同步操作开始后两者数据一致
3. master 必须使用 bin-log 二进制日志记录 ( 推荐 slave 也使用 bin-log )
4. slave 是从 master 的 bin-log 是读取 sql 记录来同步,所以,从哪一条 log 开始读取很重要 ( 下面的第 7 条操作,就是保证 slave 能与 master 保持相同的记录读取,并读取正确的 bin-log 日志文件 )
7:在 slave 执行下面 sql 操作 (使主从数据同步,slave从master的点开始同步)
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 (特别注意哟,这是关系关键)
##################################
配置文件:
master:
#日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称
log-bin=myfk_bin_log
#记录日志的数据库
binlog-do-db=myfookoo
#binlog-ignore-db=db_name //不记录日志的数据库
max_binlog_size = 104857600 #日志的大小,超出会自动生成一个新的
slave:
log-bin=mysql-bin
server-id=2
master-host=172.17.10.19
master-user=slave
master-password=fookoo_MS
master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差
replicate-do-db=myfookoo #备份的数据库
mysql的master slave_Mysql 数据库的同步(master slave) 详解相关推荐
- mysql密码高级_MySQL数据库高级操作(图文详解)
数据表高级操作 准备工作:安装MySQL数据库 create database CLASS; use CLASS; create table TEST (id int not null,name ch ...
- mysql inserted表_数据库触发器inserted和deleted详解
create trigger updateDeleteTime on user for update as begin update user set UpdateTime=(getdate()) f ...
- mysql数据库定点任务_MySQL数据库Event定时执行任务详解
一.背景 由于项目的业务是不断往前跑的,所以难免数据库的表的量会越来越庞大,不断的挤占硬盘空间.即使再大的空间也支撑不起业务的增长,所以定期删除不必要的数据是很有必要的.在我们项目中由于不清理数据,一 ...
- mysql in从数据库取数_MySQL数据库中 where in 用法详解
本文主要向大家介绍了MySQL数据库中 where in 用法详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这里分两种情况来介绍 WHERE column IN (valu ...
- linux下mysql数据库基础及客户端命令详解
linux下mysql数据库基础及客户端命令详解 1.mysql数据库存储引擎: SHOW ENGINES; #查看mysql支持的存储引擎 常见有如下两个存储引擎: MyISAM:每表三个文件: ...
- java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解
摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...
- hbase 二进制数据写入_分布式数据库HBase的架构设计详解(有彩蛋)
原标题:分布式数据库HBase的架构设计详解(有彩蛋) 本文根据DBAplus社群第99期线上分享整理而成,文末还有好书送哦~ 讲师介绍 陈鸿威 云财经大数据CTO 曾任百度高级工程师,现主持设计开发 ...
- SQL Server中通用数据库角色权限的处理详解
SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...
- MySQL建表(那些字段必须)命令详解
MySQL建表(那些字段必须)命令详解1. create table命令 强调:使用建表命令之前必须使用use命令选择表所在的数据库.create table命令的格式如下: create table ...
最新文章
- 小波的秘密6_小波包的理解
- nfs数据同步备份:多节点nfs共享(mount)server节点数据
- 随机迷宫 c语言思路,[原创]递归随机迷宫生成算法详解
- php超星查课接口,这是一个可以查询超星课程的接口,请教一下该怎么用啊
- 未来是属于 ARM 为代表的精简指令集还是 x86 为代表的复杂指令集?
- LeetCode 991. 坏了的计算器(逆向思考)
- I_LIKE_CPP 多特游戏下载
- java fuoco 价格_JAVA Fuoco铝合金公路车
- python软件名字_python怎么获得文件夹名字
- 配置tfs2017的agent
- JAVA基础学习day25--Socket基础二-多线程
- 微型计算机原理及应用 阶段作业,19春北交《微机原理及应用》在线作业1【参考答案】...
- EPLAN 2.7 WIN 10 X64安装说明
- 推荐几款php探针,PHP探针推荐:检测服务器环境好帮手
- mini聊天室(Linux下基于UDP实现的群聊系统)
- 【IT职场】任正非十大特质
- 阿里钉钉、蚂蚁、饿了么,淘宝真实面试分享
- 微信公众号抓取研究----使用xposed程序hook
- 苹果为小学生推出编程指南
- 数组的参数必须是 ByRef