Mysql主从架构的复制原理及配置详解
一、简述Mysql复制
Mysql复制是通过将mysql的某一台主机的数据复制到其他主机(slaves)上,并且在slaves上重新执行一遍来实现。主服务器每次数据操作都会将更新记录到二进制日志文件,并维护文件的一个索引跟踪日志循环,slaves服务器通过获取主服务器的二进制日志来更新同步数据。当一个从服务器连接主服务器时,它通知主服务器从服务器的日志中读取的最后一次成功更新的为止。
注意:当进行主从复制时,所有对表的更新必须在主服务器上进行,否则会造成冲突
1.1 mysql支持的复制类型
1)基于语句的复制:在主服务器上执行SQL语句,在从服务器上执行同样的SQL语句(默认采用的),如果没法精确复制,就会自动选择基于行的复制
2)基于行的复制:把改变的内容复制过去,而不是把命令在从服务器执行一遍,从mysql5.0开始支持
3)混合类型,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,采用基于行的复制
1.2 复制如何工作
1)master服务器将数据更新记录到二进制日志文件中(主服务器上必须开启log-bin)
2)slave将master的二进制日志拷贝到它的中继日志(relay log)
3)slave通过SQL线程从relay log中读取二进制日志,重新执行一遍,以改变自己的数据
下图描述复制的过程:

1)master服务器上开启二进制日志,每个事务更新数据完成之前,master都会把数据变化记录到二进制日志文件中(串行写入)
2)slave上配置change master to,将master的binary日志拷贝到它自己的中继日志(I/O线程)
3)SQL线程从中继日志中读取事件,并重放其中的事件更新slave的数据,使得和master的数据一样
二、mysql主从复制的配置
操作系统:Linux 2.6.32-573.el6.x86_64
数据库版本:10.1.18-MariaDB
数据目录:/mydata/data
备份目录:/server/backup
主服务器(master): 192.168.119.128
从服务器(slave): 192.168.119.129
(在主从服务器上安装mariadb省略)
A:在主服务器上配置如下
1、在master上创建一个备份账户,每个slave使用标准的mysql用户名和密码连接master,进行复制操作的用户会授予replication slave权限。
命令:
mariaDB [jiaoyu]> grant replication slave,reload on *.* to 'backup'@'192.168.119.%' identified by '1234'
2、master上开启log-bin
配置my.cnf(启用log-bin,配置server-id)
3、备份master服务器上的数据(/server/backup)
[root@db backup]# mysqldump -uroot -pLsf@8816 -A -x > /server/backup/mysql_`date +%F`.sql
[root@db backup]# cd /server/backup/
[root@db backup]# ll
total 948
drwxr-x---. 4 root root 4096 Oct 13 11:03 2016-10-13_10-47-03
-rw-r--r--. 1 root root 0 Oct 13 11:16 aa.sql
-rw-r--r--. 1 root root 481986 Oct 13 13:54 mysql_2016-10-13.sql
4、通过SCP把主服务器上的数据拷贝到从服务器上,在从服务器上执行一遍,以便在主从同步之前,数据是一致的
5、记录master服务器上master_log_file和master_log_pos
MariaDB [jiaoyu]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 643 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
B、在从服务器上配置如下(slave)
1、配置change master(master.info)
mariaDB [jiaoyu]>change master to master_host='192.168.119.128',master_port=3306,master_user='backup',master_password='1234',master_file_log='mysql-bin.000009',master_file_pos=643;
2、配置my.cnf开启
log_bin = mysql-bin
server_id = 2relay_log = mysql-relay-binlog_slave_updates = 1read_only = 1MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.119.129
Master_User: req
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 643
Relay_Log_File: test-relay-bin.000012
Relay_Log_Pos: 537
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
....
Seconds_Behind_Master: 0
你可查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接
*************************** 2. row ***************************
Id: 11
User: req
Host: 192.168.119.128:44967
db: NULL
Command: Binlog Dump
Time: 240
State: Master has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
Progress: 0.000
2 rows in set (0.00 sec)
C 演示数据同步
在master上操作:
MariaDB [jiaoyu]> insert into student(Sname,Sage,gender,CID)values('hai',34,'m',5);
Query OK, 1 row affected (0.02 sec)
MariaDB [jiaoyu]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 865 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在slave上查看
MariaDB [jiaoyu]> select * from student;
+-----+-------------+------+--------+-----+
| SID | Sname | Sage | gender | CID |
+-----+-------------+------+--------+-----+
| 1 | xionghaihua | 22 | m | 1 |
| 2 | zhaomei | 22 | f | 2 |
| 3 | liming | 30 | m | 3 |
| 4 | wenli | 32 | NULL | 2 |
| 5 | hai | 34 | m | 5 |
+-----+-------------+------+--------+-----+
5 rows in set (0.00 sec)
[root@test data]# vim master.info
33
Mysql主从架构的复制原理及配置详解的更多相关文章
- 高性能Mysql主从架构的复制原理及配置详解
温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...
- 转:高性能Mysql主从架构的复制原理及配置详解
温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...
- 高性能Mysql主从架构的复制原理及配置详解(转)
温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...
- Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解
一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...
- Mysql主从数据库架构的复制原理及配置详解
1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...
- 高性能Mysql主从架构的复制原理及配置
1. 复制概述 1.1 mysql支持的复制类型 1.2 复制解决的问题 1.3 复制如何工作 2. 2 复制配置 2.1创建复制帐号 2.2拷贝数据 2.3配置master 2.4配置slave 2 ...
- Spring学习 6- Spring MVC (Spring MVC原理及配置详解)
百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...
- Mysql主从同步的实现原理与配置实战
1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...
- MySQL 5.5.35 单机多实例配置详解
一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...
随机推荐
- Cocos学习-----Cocos2Dx安装
昨天晚上从官网下载了cocos2dx,打开发现win下工程已经是2010了最少,很是郁闷.尝试着在08下新建工程然后添加文件,发现还是很麻烦,于是下载了vs2010,打开编译报错:error C206 ...
- C6713的Boot mode
2014年7月23日,终于把困扰我两个月的问题解决了,甚是嗨皮,所以做下记录,以供后人参考之用. 问题描述:我用的片子是TMS320C6713,通过EMIF总线连接的FLASH,此FLASH分为两部分 ...
- gdnz
更新yum库:yum updat yum install epel-release 查看是否安装mysql:rpm -qa|grep -i mysql 移除列表mysql :yum remo ...
- 根目录97 <input file>标签,把图片上传到服务器(跟增删改查一起实现)
首先来个简单的html页面: enctype="multipart/form-data" encoding="multipart/form-data" acti ...
- jQuery easyui combobox获取值|easyui-combobox获取多个值
Query easyui combobox事例: name="language" data-options=" ...
- C#线程同步控制
ManualResetEvent类,用于通知一个或多个正在等待的线程已发生事件,它有2种状态:有信号(true)的无信号(false). 有2种方法可以设置它的信号状态:构造函数构造的时候设置或者通过 ...
- 第七章 consul docker集群
--net=host:运行consul的docker镜像必须带有的参数,因为consul的consensus和gossip协议对于网络的延迟和丢包很敏感,所以引入额外的其他网络类型的层是不可取并且不必 ...
- Checkpoints codeforces 709B
http://codeforces.com/problemset/problem/709/B 题意:给出一条横向坐标轴,给出Vasya所在的坐标位置及其另外n个坐标.Vasya想要至少访问n-1个位置 ...
- Windows XP SP3下编译安装check-0.10.0
软件环境:visual studio 2010 cmake-3.6.3-win32-x86 从github.com下载check-0.10.0到本地,解压出目录check-0.10.0 下载cmake ...
- 。net用lamda实现属性的优雅操作
internal class ExtensionObjectURL { internal string name { get; set; } } internal static class Exten ...