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 ...
随机推荐
- 今天使用bootstrap中的tagsinput控件,碰到个小问题
我直接使用时,后台一直报Uncaught Can't add objects when itemValue option is not set错误, 代码如下: <div> <inp ...
- 【Java布局】FlowLayout布局时设定组件大小
默认的JPanel中,采用的是FlowLayout布局 下面是api中的定义: JPanel(boolean isDoubleBuffered) 创建具有 FlowLayout 和 ...
- cef3 获得js 返回值, 以及js 指挥delphi 函数的 总结参考
cef3 如何加载 本地html 文件. 请教老师[吐槽]常忘<run_fan@qq.com> 22:21:45@lazarus 下载cef3中的范例中就有 [吐槽]常忘< ...
- Math Start!
(1)Add Digits 解题思路: 基于同余的数学属性. 数字的根(即题目所要求返回的最终结果)与该数字除以9时的余数相同(并且该余数将始终为单个数字). take 438 as an examp ...
- ES 集群
http://www.cnblogs.com/o-andy-o/p/5067184.html
- Linux(Centos) 安装windows字体
有时候在Linux中需要用到windows字体,比如微软雅黑字体,这个时候,可能就需要我们手动去安装字体了(当然,如果服务器上没装过),简单几步如下: 1.在$WINDOWS/Fonts目录中找到对应 ...
- 关于js闭包的误区
一直以为js的闭包只是内部函数保存了一份外部函数的变量值副本,但是以下代码打破了我的认识: function createFunctions() { var result = new Array(); ...
- 使用Carthage管理iOS依赖库
Carthage安装和使用和CocoaPods类似: 1.安装: 终端执行以下命令: $ brew update $ brew install carthage 查看Carthage的版本号: $ c ...
- [题解]UVa 10891 Game of Sum
在游戏的任何时刻剩余的都是1 - n中的一个连续子序列.所以可以用dp[i][j]表示在第i个数到第j个数中取数,先手的玩家得到的最大的分值.因为两个人都很聪明,所以等于自己和自己下.基本上每次就都是 ...
- JS产生随机数
<script> function GetRandomNum(Min,Max){ var Range = Max - Min; var Rand = Math.random() ...