Mysql中复制详细解析
作者:潇潇、寒 发布时间:2024-01-13 20:46:25
1.mysql复制概念
指将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在复制服务器上将这些日志文件重新执行,从而使复制服务器和主服务器的数据保持同步。复制过程中一个服务器充当主服务器(master),而一个或多个其它服务器充当从服务器(slaves)。主服务器将更新重新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器、从服务器在日志中读取的最后一次成功更新的位置。从服务器接受从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
2.复制的用途
通过主从复制(master-slave)的方式来同步数据,再通过读写分离(mysql-proxy)来提升数据库的并发负载能力,或者用来作为主备机的设计,保证在主机停止响应之后在很短的时间内就可以将应用切换到备机上继续运行。
优势:
(1)数据库集群系统具有多个数据库节点,在单个节点出现故障的情况下,其他正常节点可以继续提供服务。
(2)如果主服务器上出现了问题可以切换到从服务器上
(3)通过复制可以在从服务器上执行查询操作,降低了主服务器的访问压力,实现数据分布和负载均衡
(4)可以在从服务器上进行备份,以避免备份期间影响主服务器的服务。
3.复制的实现(3种方法)
(1)DRBD是一种用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
(2)Mysql cluster(又称mysql簇)。Mysql replicaion(复制)本身是一个比较简单的结构,即一台从服务器(slave)从一台主服务器(master)读取二进制日志然后再解析并应用到自身。
(3)一个简单复制环境只需要两台运行mysql的主机即可,甚至可以在一台物理服务器主机上启动两个mysqld实例。一个作为master而另一个作为slave来完成复制环境的搭配。但是在实际应用环境中,可以根据实际的业务需求利用mysql复制的功能自己搭建出其他多种更利于扩展的复制架构,如最常用的主从架构。
主从架构指的是使用一台mysql服务器作为master,一台或多台mysql服务器作为slave,将master的数据复制到slave上。在实际应用场合,主从架构模式是mysql复制最常用的。一般在这种架构下,系统的写操作都是在master中进行,而读操作则分散到各个slave中进行,因此这种架构特别适合现在互联网高读写的问题。
Mysql数据库复制操作大概分为以下几个步骤:
(1)master启用二进制日志。启用二进制日志的操作在日志管理中有详细的介绍。
(2)slave上面的I/O进程连接上master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。
(3)master接受到来自slave的I/O进程请求后,通过负责复制的I/O进程根据请求信息读取指定日志指定位置之后的日志信息,返回给slave的I/O。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到master端的bin-log文件的名称以及bin-log的位置。
(4)Slave的I/O进程接收到信息后,将接收到的日志内容依次添加到slave端的relay-log文件的最末端,并将读取到的master端的bin-log的文件名和位置记录到master-info文件中。
(5)Slave的sql进程检测到relay-log中新增的内容后,会马上解析relay-log的内容,并在自身执行。
4.mysql复制的集中模式
mysql5.1之后的版本中,在复制方面的改进就是引进了新的复制技术——基于行的复制。这种技术就是关注表中发生变化的记录,而非以前的照抄binlog模式。从mysql5.1.12开始,可以用以下3种模式来实现。
(1)基于sql语句的复制(statement-base replication,sbr)
(2)基于行的复制(rbr)
(3)混合模式复制(mbr)
相应的,binlog的格式也有3种:statement、row、mixed。Mbr模式中,sbr模式是默认的。在运行时可以动态地改变binlog的格式。设定主从复制模式的方法非常简单,只要在以前设定复制配置的基础上,再添加一个参数,如下:
binlog_format=”statement”
#binlog_format=”row”
#binlog_format=”mixed”
当然了,也可以在运行时动态修改binlog的格式
Mysql> set session binlog_format=”statement”
5.控制主服务器操作
Master:192.168.11.139
Slave:192.168.11.130
(1)主服务器:
mysql> show variables like '%datadir%';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| datadir | /application/mysql/data/ |
+---------------+--------------------------+
在主服务器上开启二进制日志:
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
row in set (0.00 sec)
OFF表示二进制日志是关闭的
开启日志3步骤:
①开启mysql安装目录/my.cnf
②找到[mysqld]这个标签,在此标签下面一行,添加语句如下:
log_bin[filename]
在该语句中,log-bin说明要开启二进制文件;filename是二进制日志的名字。如果没有指定,默认为主机名后面跟-bin作为文件名,默认存放在datadir目录中。在这里指定binary_log如果只对指定数据库生成二进制文件,则需要添加如下语句
Binlog-do-db=db_name(数据库名称)
如果不对指定数据库生成二进制文件日志,则需要添加如下语句
Binlog-ignore-db-db_name(数据库名称)
③重启mysql服务。可以在mysql安装目录/data文件夹下看到“binary_log.数字编号”文件,如binary_log.00001.以后每重启一次mysql服务,都会重新生成二进制文件,文件名中的数字编号一次增加。
开机成功后,修改mysql的配置文件my.cnf,设置server-id,代码如下
Server-id=1
Binlog-do-db=xscj
Binlog-ignore-db=mysql
Server-id=1:每一个数据库服务器都要指定一个唯一的server-id,通常主服务器为1,master和slave的server-id不能相同。
Binlog-do-db:表示需要复制的数据库,这里以xscj为例
Binlog-ignore-db:表示不需要复制的数据库
在master上创建复制所需要的用户
mysql> grant replication slave on *.* to rep_user@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec
mysql> show master status\G
*************************** 1. row ***************************
File: binary_log.000001
Position: 303
Binlog_Do_DB:
Binlog_Ignore_DB:
row in set (0.00 sec)
将master主机的数据备份出来,保存在/data/binary_dump.txt文件中,然后导入到slave从机中去,具体执行语句如下
[root@localhost bin]# mysqldump -h localhost>/data/binary_dump.txt
(2)控制从服务器操作
修改从服务器的数据库配置文件,配置如下:
Server-id=2 ##设置从服务器id
Master-host=192.168.11.129
Master-user=rep_user
Master-password= ##设置连接主服务器的密码
Replicate-do-db ##设置你要同步的数据库,可以设置多个
Master-port=<port> ##配置端口号
重启slave,在slave主机的mysql重新执行如下命令,关闭slave服务
Mysql>stop slave;
设置slave实现复制相关的信息,执行如下命令
Mysql>change master to
>master_host='',
>master_user='',
>master_password='',
>master_log_file='binary_log.000007',
>master_log_pos=120;
输入:show slave status\G用于提供有关从服务器线程的关键参数信息。
常用命令如下
选项 | 功能 |
Slave start | 启动复制线程 |
Slave stop | 停止复制线程 |
Reset slave | 重置复制线程 |
Show slave status | 显示复制线程状态 |
Show slave status\g | 显示复制线程状态(分行显示) |
Show master status\G | 显示主数据库的状态(分行显示) |
Show master logs | 显示主数据库日志 |
Change master to | 动态改变到主数据库的配置 |
Show processlistv | 显示有哪些线程正在运行 |
来源:http://www.cnblogs.com/caicairui/p/7346165.html


猜你喜欢
- 本文详细罗列归纳了Python常见数据结构,并附以实例加以说明,相信对读者有一定的参考借鉴价值。总体而言Python中常见的数据结构可以统称
- 数据库中数据展示:使用python代码实现:# Requires pymongo 3.6.0+from pymongo import Mon
- 多线程到底什么是多线程?说起多线程我们首先从单线程来说。例如,我在这里看书,等这件事情干完,我就再去听音乐。对于这两件事情来说都是属于单线程
- 自从腾讯微博上线以来,基本上就开始用了,一直到现在,作为一个开发人员,也看到了腾讯微博一直在不停的改变,也不知道大家有没有发现,腾讯微博提供
- 简介程序中的数在计算机内存中都是以二进制的形式存在的,位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作
- 1. 安装 seaborn安装:pip install seaborn导入:import seaborn as sns2.准备数据正式开始之
- 创建Deque序列:from collections import dequed = deque()Deque提供了类似list的操作方法:
- 本文实例讲述了Python函数装饰器实现方法。分享给大家供大家参考,具体如下:编写函数装饰器这里主要介绍编写函数装饰器的相关内容。跟踪调用如
- 一、身份验证配置在sqlserver服务端电脑打开SqlServer Managerment Studio管理工具,首先通过Windows身
- “正则表达式”对象,我们就可以非常方便的对各种数据进行合法性的校验了。首先,让我们来了解一下究竟什么
- 本文实例讲述了Python使用Pandas库常见操作。分享给大家供大家参考,具体如下:1、概述Pandas 是Python的核心数据分析支持
- 本章节将一些Python3基础语法整理成手册,方便各位在日常使用和学习是查阅,包含了编码、标识符、保留字、注释、缩进、字符串等常用内容。编码
- mysql 8.0.11 winx64安装教程记录如下,分享给大家1.进入地址: 下载mysql-8.0.11-winx642.解
- 使用wordcloud模块,生成云图,测试文本为:Betty Botter bought some butter but she said
- 以下的文章主要是介绍MySQL5创建存储过程的实例演示,MySQL5创建存储在实际操作中应用的频率还是很高的,以下就是MySQL5创建存储过
- 分析摩斯密码是一种将文本信息作为一系列通断的音调、灯光或咔嗒声传输的方法,无需特殊设备,熟记的小伙伴即可直接翻译。它以电报发明者Samuel
- Pycharm使用cv2无法安装很多学python的朋友们都会使用一个编译器,叫做Pycharm,这个编译器我也在用,那么同时在使用时也会出
- ./当前目录 /网站主目录 ../上层目录 ~/网站虚拟目录 如果当前的网站目录为E:\wwwroot 应用程序虚拟目录为E:\wwwroo
- Python对象动态的增加属性和方法前面我们了解到数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有
- PDO::execPDO::exec — 执行一条 SQL 语句,并返回受影响的行数(PHP 5 >= 5.1.0, PECL pdo