一、简述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         = 2
relay_log         = mysql-relay-bin
log_slave_updates = 1
read_only         = 1
(server-id必须唯一,relay_log中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处))
3、把从主服务器拷贝过来的备份数据,还原数据库
4、开启start slave

MariaDB [(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主从架构的复制原理及配置详解的更多相关文章

  1. 高性能Mysql主从架构的复制原理及配置详解

    温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...

  2. 转:高性能Mysql主从架构的复制原理及配置详解

    温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...

  3. 高性能Mysql主从架构的复制原理及配置详解(转)

    温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...

  4. Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解

    一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  5. Mysql主从数据库架构的复制原理及配置详解

    1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  6. 高性能Mysql主从架构的复制原理及配置

    1. 复制概述 1.1 mysql支持的复制类型 1.2 复制解决的问题 1.3 复制如何工作 2. 2 复制配置 2.1创建复制帐号 2.2拷贝数据 2.3配置master 2.4配置slave 2 ...

  7. Spring学习 6- Spring MVC (Spring MVC原理及配置详解)

    百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...

  8. Mysql主从同步的实现原理与配置实战

    1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...

  9. MySQL 5.5.35 单机多实例配置详解

    一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...

随机推荐

  1. 今天使用bootstrap中的tagsinput控件,碰到个小问题

    我直接使用时,后台一直报Uncaught Can't add objects when itemValue option is not set错误, 代码如下: <div> <inp ...

  2. 【Java布局】FlowLayout布局时设定组件大小

    默认的JPanel中,采用的是FlowLayout布局 下面是api中的定义: JPanel(boolean isDoubleBuffered)           创建具有 FlowLayout 和 ...

  3. cef3 获得js 返回值, 以及js 指挥delphi 函数的 总结参考

     cef3  如何加载 本地html 文件.   请教老师[吐槽]常忘<run_fan@qq.com>  22:21:45@lazarus 下载cef3中的范例中就有  [吐槽]常忘< ...

  4. Math Start!

    (1)Add Digits 解题思路: 基于同余的数学属性. 数字的根(即题目所要求返回的最终结果)与该数字除以9时的余数相同(并且该余数将始终为单个数字). take 438 as an examp ...

  5. ES 集群

    http://www.cnblogs.com/o-andy-o/p/5067184.html

  6. Linux(Centos) 安装windows字体

    有时候在Linux中需要用到windows字体,比如微软雅黑字体,这个时候,可能就需要我们手动去安装字体了(当然,如果服务器上没装过),简单几步如下: 1.在$WINDOWS/Fonts目录中找到对应 ...

  7. 关于js闭包的误区

    一直以为js的闭包只是内部函数保存了一份外部函数的变量值副本,但是以下代码打破了我的认识: function createFunctions() { var result = new Array(); ...

  8. 使用Carthage管理iOS依赖库

    Carthage安装和使用和CocoaPods类似: 1.安装: 终端执行以下命令: $ brew update $ brew install carthage 查看Carthage的版本号: $ c ...

  9. [题解]UVa 10891 Game of Sum

    在游戏的任何时刻剩余的都是1 - n中的一个连续子序列.所以可以用dp[i][j]表示在第i个数到第j个数中取数,先手的玩家得到的最大的分值.因为两个人都很聪明,所以等于自己和自己下.基本上每次就都是 ...

  10. JS产生随机数

    <script>   function GetRandomNum(Min,Max){   var Range = Max - Min;   var Rand = Math.random() ...