MySQL同步概念及配置

同步功能在MySQL 3.23.15就开始引进了,它可以把一个MySQL服务器上的数据复制到另一个服务器上去。单向同步的好处是稳健,高速,系统易管理:

有了master/slave机制后,就更稳健了。当master上发生问题时,可以把slave作为备用切换过去。

可以在slave和master之间分担一些查询,这就能加速响应时间。SELECT 查询就可以在slave上执行以减少master的负载。更新数据的语句则要放在mater上执行以保持master和slave的同步。当非更新操作占多数时,负载均衡就很有效了,不过这只是普通情况而言。

另一个好处是可以在slave上备份数据,无需干扰master。备份数据时master照样继续运作。

一、同步机制与群集的区别

mysql集群和mysql主从复制有什么区别

复制的只有主节点能接受 insert,update,drop,delete 等操作,集群不存在此类限制。
不过,说实话,集群和复制不是一个级别的概念,在某些情况中,复制是集群的组成部分。

mysql 集群 减少数据中心结点压力和大数据量处理,采用把 mysql 分布,一个或多个 application 对应一个 mysql 数据库。把几个 mysql 数据库公用的数据做出共享数据,例如购物车,用户对象等等,存在数据结点里面。其他不共享的数据还维持在各自分布的 mysql 数据库本身中

具体根据架构环境来选择,总体性能的提高的是效率的增加。我公司用的是读写分离,5台从的负载读,主的负载写。

二、同步机制实现概念

MySQL同步机制基于master把所有对数据库的更新、删除等)都记录在二进制日志里。因此,想要启用同步机制,在master就必须启用二进制日志。每个slave接受来自master上在二进制日志中记录的更新操作,因此在slave上执行了这个操作的一个拷贝。

所有的slave必须在启用二进制日志时把master上已经存在的数据拷贝过来。如果运行同步时slave上的数据和master上启用二进制日志时的数据不一致的话,那么slave同步就会失败。(拷贝方法见后面)

slave上已经完整拷贝master数据后,就可以连接到master上然后等待处理更新了。如果master当机或者slave连接断开,slave会定期尝试连接到master上直到能重连并且等待更新。重试的时间间隔由--master-connect-retry选项来控制,它的默认值是60秒。

每个slave都记录了它关闭时的日志位置。msater是不知道有多少个slave连接上来或者哪个slave从什么时候开始更新。

注:启用同步后,所有要同步的更新操作都必须在master上执行。否则,必须注意不要造成用户在master上的更新和在slave上的更新引起冲突。

1、同步实现步骤

步骤一:MySQL同步功能由3个线程(master上1个,slave上2个)来实现。执行START SLAVE语句后,SLAVE就创建一个I/O线程。

步骤二:I/O线程连接到master上,并请求master发送二进制日志中的语句。

步骤三:master创建一个线程来把日志的内容发送到slave上。这个线程在master上执行SHOW PROCESSLIST 语句后的结果中的 Binlog Dump 线程便是。

步骤四:slave上的I/O线程读取master的 Binlog Dump 线程发送的语句,并且把它们拷贝到其数据目录下的中继日志(relay logs)中。

步骤五:第三个是SQL线程,salve用它来读取中继日志,然后执行它们来更新数据。

可参见下图图示:

每个master/slave上都有三个进程,master有多个线程,他为每个slave连接都创建一个线程,而每个slave只有I/O和SQL线程。

slave有2个线程的好处:把读日志和执行分开成2个独立的任务。执行任务如果慢的话,读日志任务不会跟着慢下来。

如:slave停止了一段时间,那么I/O线程可以在slave启动后很快地从master上读取全部日志,尽管SQL线程可能落后I/O线程好几的小时。如果slave在SQL线程没全部执行完就停止了,但I/O线程却已经把所有的更新日志都读取并且保存在本地的中继日志中了,因此在slave再次启动后就会继续执行它们了。这就允许在master上清除二进制日志,因为slave已经无需去master读取更新日志了。

2、在master/slave查看状态

在master上,执行下面的命令,可以看到运行状态

Mysq > SHOW PROCESSLIST\G;

Mysql > show master status\G;

在slave上,可以执行以下命令

Mysql > show slave status\G;

3、中继日志及状态文件

中继日志

默认地,中继日志的名字格式为 `host_name-relay-bin.nnn`,host_name 是服务器的主机名,nnn 是序号,如:sumi2-relay-bin.000008。

索引中继日志

slave上用一个索引文件来跟踪当前正在使用的中继日志,这个文件的文件名是 `host_name-relay-bin.index`,如:sumi2-relay-bin.index。

在下列条件中会创建一个新的中继日志:

(1)slave启动后,I/O线程第一次启动(在MySQL 5.0中,每次I/O线程启动后都会新建一个中继日志,而不只是第一次启动时)。

(2)刷新日志时;例如,执行flush logs语句或运行mysqladmin flush-logs命令(从 MySQL 4.0.14开始才会创建新中继日志)。

(3)当前的中继日志大小太大了,“太大了”是这么判断的:

max_relay_log_size, 如果 max_relay_log_size > 0 的话

max_binlog_size, 如果 max_relay_log_size = 0 或 MySQL 低于 4.0.14

状态文件

状态文件,名字默认为 `master.info` and `relay-log.info`。slave关闭后,会保留他们。当下一次slave启动时,就会读取这两个文件来判断从master读取到二进制日志的什么位置了,处理中继日志到什么位置了。

4、查看同步状态

Master服务器

Mysql> show master status\G;

*************************** 1. row ***************************

File: mysql-bin.000003

Position: 111052

Binlog_Do_DB: sumi_test1

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

ERROR:

No query specified

Slave服务器

Mysql > show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.32

Master_User: sum

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 111052

Relay_Log_File: sumi2-relay-bin.000014

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000003

Slave_IO_Running: Yes                      //如果都是yes,那代表已经在同步

Slave_SQL_Running: Yes

Replicate_Do_DB: sumi_test1

Replicate_Ignore_DB: mysql

三、MySQL同步的设置

1、准备服务器

准备两台服务器192.168.0.32(master)和192.168.0.25(slave)。两个MySQL的basedir目录都是/usr/local/mysql,数据存放路径/usr/local/mysq/data/。

创建数据库sumi_test1为同步数据库,添加用户sum为专用同步的用户。

注:Master的MySQL版本和Slave的版本相同或者更低,Master的版本一定不能高于Slave版本。

2、设置MASTER服务器

创建一个MySQL帐号为同步专用:

Mysql > grant  replication slave,reload,super, on *.* to sum@192.168.0.25 identified by 'sum123' ;

Mysql > FLUSH PRIVILEGES ;

修改my.cnf文件

# cat /etc/my.cnf

[mysqld]                          //在mysqd中添加以下配置

log-bin = mysql-bin

server-id = 1

binlog-do-db = hou                     //需要同步的数据库

binlog-ignore-db = mysql              //忽略此数据库同步,若还有其他数据库不需要同步,在下

binlog-ignore-db = otherdb           面一一列出;

然后,将hou数据库导出,并导入slave数据库中,在启动同步之前,两边的数据要一致。

3、设置Slave服务器

修改my.cnf文件

# vi /etc/my.cnf

[mysqld]                   //在mysqd中添加以下配置

log-bin = mysql-bin

server-id = 2

master-host = 192.168.0.32

master-user = user

master-password =  passwd

master-port = 3306

replicate-ignore-db = mysql            //需要同步的数据库

replicate-do-db = hou     //忽略此数据库同步,若还有其他数据库不需要同步,在下

replicate-do-db = otherdb        面一一列出

如上图所示:

四、同步数据方法

进行数据同步,网上的方法是将master数据库文件拿过来,势必要终止往主数据库写入,可以参考:

http://vps.15099.net/2009/01/mysql-replication-in-two-vps-hosting-546.html

但是这样从数据库们也不能使用了,王总的方法,可以不影响主数据库写入,从一个从数据库中将数据表拷贝到新slave服务器或问题服务器上来。

环境

Slave1数据库IP:211.103.156.201  hostname:C2.xywy.com

Slave2数据库IP:211.103.156.203  hostname:C6.xywy.com

步骤

1、先在新的slave上配置好mysql

配置方法见上面章节

2、停止slave 数据库 slave IP:211.103.156.201

# /usr/local/mysq/bin/mysqladmin -uroot -p shutdown

# cd /usr/local/mysql/var/

3、只拷贝需要同步的数据库(club)及需要的日志文件

# tar -zcvf club.tar.gz club

需要备份的日志文件

relay-log.info

c2-relay-bin.index

c2-relay-bin.000122  //当前执行到的日志

master.info

# tar -zcvf daillog.tar.gz relay-log.info c2-relay-bin.index c2-relay-bin.000122 master.info

4、在slave2上解压数据库club及修改日志名

# tar -zxvf club.tar.gz -C /usr/local/mysql/data/

# tar -zcvf daillog.tar.gz -C /usr/local/mysql/data/

# vi /etc/my.cnf

relay-log= /usr/local/mysql/data/c6-relay-bin

注:这里要查看一下本机的mysql配置中,relay-log的名字

# cd /usr/local/mysql/data/

# vi relay-log.info

data/mysqldata/c6-relay-bin.000139 //修改日志的名字为配置中设置的

10836749

mysql-bin.000017

366167395

# mv c2-relay-bin.index c6-relay-bin.index

# vi vi c6-relay-bin.index

/data/mysqldata/c6-relay-bin.000138

/data/mysqldata/c6-relay-bin.000139

# mv c2-relay-bin.000122 c6-relay-bin.000122

5、启动新的slave服务器即可。

本文转自 houzaicunsky 51CTO博客,原文链接:http://blog.51cto.com/hzcsky/481396

mysql主从在线的搭建相关推荐

  1. mysql线上教程_线上环境mysql主从同步的搭建过程

    之前搭建过一套主从同步的mysql集群,但是是基于新数据库,而这次线上环境要升级成主从同步的集群,记录一下升级过程和中间遇到的各种问题. 由于是直接对线上数据库进行修改,因此要保证对线上环境造成尽量小 ...

  2. liunx下搭建mysql主从_linux下搭建mysql主从

    在master上创建repl账户,用于复制. grant replication slave on *.* to [email protected]%' identified by 'P@$$W0rd ...

  3. ubuntu mysql主从库的搭建

    1,首先我们要确定一个从库一个主库,紧记从库只能读取不能有其他的操作,如果操作写那主从就失效了,那就看看我们这么搭建主从吧! 2. 环境:Ubuntu,Mysql (主从的数据库版本必须保持一致) 主 ...

  4. doctor mysql数据导入_线上环境mysql主从同步的搭建过程

    之前搭建过一套主从同步的mysql集群,但是是基于新数据库,而这次线上环境要升级成主从同步的集群,记录一下升级过程和中间遇到的各种问题. 由于是直接对线上数据库进行修改,因此要保证对线上环境造成尽量小 ...

  5. mysql 主从 now_MySql主从复制搭建方法

    安装完成之后需要进行初始化,我这里直接写了一个shell的函数进行初始化,可以复制后直接调用.也可以手动初始化 Initialization_Mysql() { if [ ! -f /usr/bin/ ...

  6. mysql主从同步搭建和故障排除

    主从同步的定义:  是存储数据的一种结构模式. 主:被客户端访问的数据库服务器就是主库服务器master 从:连接主库服务器,自动同步主库的所有数据到本机slave 1.什么是mysql主从同步? 当 ...

  7. 在线重做MySQL主从

    MySQL主从在线重做从库 现有主从架构,从库损坏或者需要更换从库,不管什么原因现在就是要重做从库了,现在推荐使用一个第三方工具-xtrabackup (以下过程是经历生产环境实施的,放心使用) 主库 ...

  8. docker安装mysql主从视频教程_docker安装mysql主从

    docker安装mysql主从 启动主库: 1.docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5 ...

  9. 什么是mysql主从同步

    什么是MySQL主从同步 数据是一个应用至关重要的一部分.从目的出发,主从同步有那么点备份的意思,主库(Master)将自己库中的写入同时同步给自己的从库(Slave),当主库发生某些不可预知的状况, ...

最新文章

  1. SpringBoot第二十四篇: springboot整合docker
  2. 一天搞定CSS:定位position--17
  3. VSCode 更新后打不开之解决办法
  4. step4 . day7 进程间的通信方式
  5. javascript 常用类
  6. python网络模块_Python的pyroute2网络模块-阿里云开发者社区
  7. MyEclipse配置Tomcat 6
  8. Audio-based snore detection using deep neural networks解读
  9. 减少系统进程【ZT】
  10. Redis5.0重量级特性Stream尝鲜
  11. 富士康iPhone生产线自动化进展太缓,所以无法遵守中国的加班条例?
  12. Unity项目的框架设计
  13. 巧妙突破大容量邮箱附件大小限制(zz)
  14. 同步机构应遵循哪些基本准则
  15. 2020年PMP笔记归纳第三章项目经理的角色
  16. Fortran之format输出
  17. python自动群发_python---自动群发邮件
  18. Spring和resteasy集成三种方式
  19. ccmall商城区块链,互联网的新商机,快速崛起
  20. 留良乡稳健投资理财的四大原则

热门文章

  1. Webpack实战(四):教教你如何轻松搞定-预处理器(loader)
  2. Tips--解决安装Multisim时出现No software will be installed or removed无法安装的问题
  3. 摄像头拍摄后对图片进行图像处理-python(空域增强)
  4. mysql jooyoo net_.net连接MySQL的方法
  5. Tour West Australia by Motorcycle
  6. 二叉树数据结构和算法
  7. 《Java并发编程实战》第十章 避免活跃性危急 读书笔记
  8. Delphi控件开发浅入深出(三)
  9. 大型网站的架构设计问题—-大型高并发高负载网站的系
  10. Keith Hill的Effective Windows PowerShell.pdf下载