原文:高性能mysql主存架构

MySQL Replication(Master与Slave基本原理及配置)

主从mysql工作原理:
1:过程:
(1)Mysql的复制(replication)是一个异步的复制,从一个Mysql节点复制到另一个Mysql节点。实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程)另外一个进程在 Master(IO进程)上。
(2)要实施复制,首先必须打开Master端的binary log功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。
2:复制的基本过程如下:
(1)Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
(2)Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
(3)Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
(4)Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
3:主从结论
(1)主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。 
(2)如果主从的网络断开,从会在网络正常后,批量同步。 
(3)如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。 
(4)还有一个mysql配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。 
(5)如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。
4:搭建mysql主从服务器
(1)实验环境
操作系统:Red Hat Enterprise Linux Server release 6.4
数据库版本: 5.6.21
(2)主机地址:
master:192.168.10.130
slave:192.168.10.120
(3)安装数据mysql数据库

(4)配置master的my.cnf文件
[mysqld]
log_bin = mysql-bin #开启binlog日志
basedir = /usr/local/mysql #指定mysql的安装目录
datadir = /data/mysql #指定mysql数据库的数据存放位置
port = 3306 #指定端口,默认是3306,如果一个主机有两个数据库需指定不同端口
server_id = 1 #指定server-id,必须与slave端的server-id不同
bind-address = 0.0.0.0 #默认是127.0.0.1,更改为0.0.0.0,否则Slave将无法链接到 Master
expire_logs_days = 10 #终止日志的时间,以天为单位,默认是30天
max_binlog_size = 100M #存放日志最大容量
sync-binlog=1 #允许日志同步
(5)重启mysql服务
[root@localhost ~]# service mysqld restart
(6)本地登录mysql数据库,向slave授权并查看当前使用的binlog日志与偏移量
mysql> grant replication client,replication slave on *.* to 'repluser'@'192.168.10.120' identified by '123456';
语意:允许用户repluser以密码123456在192.168.10.120主机,登陆本机数据库同步数据;
(7)查看master状态
mysql> show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000015 #binlog日志
Position: 211 #偏移量
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified
错误显示:
mysql>show master status;
Empty set (0.02 sec)
查询如果出现以上提示表示配置有问题;
(8)配置slave服务器my.cnf文件
[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
server_id = 2 #指定server-id,必须与master端的server-id不同
sync-binlog=1 #允许日志同步
read-only=1 #设置只读
(9)重启mysql服务
[root@localhost ~]# service mysqld restart
(10)本地登录mysql数据库,指定从服务器的主服务器并开启slave功能
执行以下操作必须关闭slave功能
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to
-> master_host='192.168.10.130', #指定主服务器地址
-> master_port=3306, #指定端口,默认是3306,不需要指定
-> master_user='repluser', #指定同步时使用的用户名
-> master_password='123456', #指定同步用户的密码
-> master_log_file='mysql-bin.000015', #指定当前的主服务器使用的binlog日志
-> master_log_pos=120; #指定当前主服务器上的位偏移量
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
(11)查看slave是否正常工作
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.10.130
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000015
Read_Master_Log_Pos: 120
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000015
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(12)测试
在master创建wql数据
mysql> create database wql;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress |
| wql |
+--------------------+
6 rows in set (0.00 sec)
在slave数据查看是否有该数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wql |
+--------------------+
5 rows in set (0.00 sec)

Mysql主从同步搭建完成且可以正常工作,但其中有几点需要注意:

(1)设置slave服务器时在指定其主服务器时要在每个项目后面加逗号分隔
(2)如需更改slave服务器的主服务器的设置需要先停止slave服务,然后再更改,使用命令stop slave可以停止slave服务
(3)只有Slave_IO_Running与Slave_SQL_Running两个进程的状态全为Yse时才表明slave服务正常工作,否则都表示其工作异常。
Slave_IO_Running进程状态为NO的原因:
(1)连接不上主数据库服务器(物理线路,安全设置问题,授权问题)
(2)当前binlog日志名和pos点和主服务器的不一致
Slave_SQL_Running进程状态为NO的原因:从服务器本机没有主数据库上的库和表或者表结构不一致。
13:主从复制如何提高可靠性

(1)主从单向复制,从服务器只是实时的保存了主服务器的一个副本。当主服务器发生故障时,可以切换到从服务器继续做查询,但不能更新。

(2)如果采用双向复制,即两台mysql服务器即作为主服务器,又作为从服务器。那么两者都可以执行更新操作并能实现负载均衡,当一方出现故障时,另一方不受影响。但是,除非能保证任何更新操作顺序都是安全的,否则双向复制会导致失败。

注:如有操作及编写问题及时联系;QQ:1078956079 /1648111701

高性能mysql主存架构的更多相关文章

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

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

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

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

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

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

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

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

  5. 高性能MySQL笔记:第1章 MySQL架构

    MySQL 最重要.最与众不同的特性是他的存储引擎架构,这种架构的设计将查询处理(Query Precessing)及其系统任务(Server Task)和数据的存储/提取相分离.   1.1 MyS ...

  6. 1121高性能MySQL之运行机制

    本文来自于拜读<高性能MySQL(第三版)>时的读书笔记作者:安明哲转载时请注明部分内容来自<高性能MySQL(第三版)> MySQL的逻辑构架 MySQL服务器逻辑架构 最上 ...

  7. 《高性能MySQL》读书笔记--锁、事务、隔离级别 转

    1.锁 为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进 ...

  8. 高性能MySQL --- 读书笔记(1) - 2016/8/2

    此书不但帮助MySQL初学者提高使用技巧,更为有经验的MySQL DBA指出了开发高性能MySQL应用的途径.全书包括14章,内容覆盖MySQL系统架构.设计应用技巧.SQL语句优化.服务器性能调优. ...

  9. 《高性能MySQL》

    <高性能MySQL>(第3版)讲解MySQL如何工作,为什么如此工作? MySQL系统架构.设计应用技巧.SQL语句优化.服务器性能调优.系统配置管理和安全设置.监控分析,以及复制.扩展和 ...

随机推荐

  1. OCA读书笔记(18) - 使用Support工具

    调查和解决问题 问题:数据库中的任一严重的错误定义为一个问题,一般来说,这些错误包括大家熟悉的ORA-600错误和ORA-04031(共享池超出)错误,涉及数据库问题的所有元数据都存储在ADR中,每个 ...

  2. J2EE的13个规范之JDBC

    假设让你接触一样新的东西.你可能感觉无所适从,可是假设本来就是旧事物的话,你学习起来还难吗? 一.ODBC,我们的老朋友 ODBC(Open Database Connectivity)是微软公司与数 ...

  3. Android 屏幕实现水龙头事件

    在android下,事件的发生是在监听器下进行,android系统能够响应按键事件和触摸屏事件.事件说明例如以下: onClick(View v)一个普通的点击button事件 boolean onK ...

  4. Case learning

    bad case: <?php foreach($user_detail AS $val) { if(!empty($val->portrait)) { //假设这个循环从来没有到达过 $ ...

  5. 程序员联盟有自己的论坛啦!基于Discuz构建,还不来注册~

    我把程序员联盟网站的论坛建好了,哈哈哈.用的是Discuz这个腾讯旗下的中文bbs建设软件.正在完善论坛,添加各种模块和应用.大家可以先去注册一下:coderunity.com/bbs/forum.p ...

  6. 如何使用Eclipse API 提供 org.eclipse.wst.wsdl 要解决阅读WSDL档?

    相对而言.Eclipse API中国的数据是比较小的.但Eclipse的API提供了许多的.非常强大. 实例,eclipse的Eclipse API 提供 org.eclipse.wst.wsdl包裹 ...

  7. 【Android进阶】Android调用WebService的实现

    最近想自己搞搞服务器,就从最简单的webservice开始吧 先上效果图 项目结构 开始贴代码,注释都有,有问题的请留言 MainActivity.java package com.example.w ...

  8. 【C语言探索之旅】 第二部分第三课:数组

    内容简介 1.课程大纲 2.第二部分第三课: 数组 3.第二部分第四课预告:字符串 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语 ...

  9. 4.锁定--Java的LockSupport.park()实现分析

    LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了主要的线程同步原语. LockSupport实际上是调用了Unsafe类里的函数.归结到Unsafe里,仅仅有两个函数: ...

  10. MapReduce源代码分析MapTask分析

    前言 MapReduce该分析是基于源代码Hadoop1.2.1代码分析进行的基础上. 该章节会分析在MapTask端的详细处理流程以及MapOutputCollector是怎样处理map之后的col ...