一.什么是Mysql主从分离

将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈;主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发; 数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性;

二.为什么要实现Mysql主从分离

大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。

三.主从分离原理

1.第一步:Master(主服务器)将操作记录到binary log(二进制日志文件当中)【即每个事务更新数据完成之前先把操作记录在日志文件中,Mysql将事务串行的写入二进制日志文件中】,写入日志文件完成之后,Master通知存储引擎提交事务(注:对数据的操作成为一次二进制的日志事件【binary log event】);

2.第二步:slave(从服务器)把binary log拷贝到relay log(中介日志)【相当于缓存作用,存储在从服务器的缓存中】,首先slave会开始一个工作线程(I/O线程),I/O线程会在Master上打开一个普通的连接,然后读取binary log事件,如果已经跟上master,就会睡眠,并等待Master产生新的事件,I/O线程将读取的这些事件写入到relay log;

3.第三步:slave从做中介日志事件(relay log),sql线程读取relay log事件并执行更新从服务器上的数据,使其与Master上的数据一致。

总结:主服务器把操作记录到binary log——>从服务器将binary log中的数据同步到relay log(中介日志中)——>从服务器读取中介日志执行同步数据

四.数据库主从配置

注:可以是一主一从,一主多从,主从从等。

我这里配置一主一从,自己有一台服务器,又借了室友一台服务器准备试试。

1.两个服务器:

1.1配置主服务器(Master):

打开binary log,配置mysql配置文件:

(1)vim /etc/my.cnf(编辑服务器上的mysql配置文件,一般都存储在这儿,如果没有可以根据自己的配置文件)

(2)配置打开binary log:

[mysqld]

#红色的为新配置的打开binary log的配置

#配置binary log

#配置server-id

server-id=1

#打开二进制日志文件

log-bin=master-bin

#打开二进制日志文件索引

log-bin-index=master-bin.index

character_set_server=utf8

init_connect='SET NAMES utf8'

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid

(3)重启mysql加载配置文件:service mysqld restart或者(etc/init.d/mysql stop 然后etc/init.d/mysql start)

(4)SHOW MASTERT STATUS;

会查看到第一个二进制日志文件:

1.2从服务器配置:

(1)同理进入mysql配置文件:vim /etc/my.cnf:

(2)配置relay log:

[mysqld]

#配置relay log

#配置server id

server-id=2

#打开从服务器中介日志文件

relay-log=slave-relay-bin

#打开从服务器中介日志文件索引

relay-log-index=slave-relay-bin.index

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Recommended in standard MySQL setup

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

(3)同理,保存配置重启mysql加载配置文件生效

1.3相关连接配置:

(1)在主服务器上(Master)创建一个用于用于从服务器连接并赋予其所有数据库所有表的权限:

创建用户:create user 用户名;

赋予连接权限:GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从服务器IP' IDENTIFIED BY '密码'

刷新:flush privileges;

(2)从服务器建立连接(使用主服务器创建的repl用户及密码):

建立连接:change master to master_host='主服务器IP',master_port=主服务器MYSQL端口,master_user='用户名',master_password='密码',master_log_file='master-bin.000001',master_log_pos=0;

读取master-bin.000001文件,即主服务器的第一个日志文件,master_log_pos的作用是如果从服务器挂掉后,只要记得这个master_log_pos的大小,然后赋值就能恢复同步在某个时刻。

开启主从跟踪:start slave;

相应的关闭主从跟踪:stop slave;

查看从服务器show slave status \G:

这里注意状态是否正确,有可能连接不正确(如主服务器配置文件种有blind-address只能指定ip访问数据库,权限未赋予正确,防火墙等等)。

2.测试:

主服务器创建一个数据库:

从服务器也创建成功:

mysql中从分离_Mysql主从分离相关推荐

  1. linux mysql 主从分离_MySQL主从分离基本配置

    1.介绍 MySQL数据库设置读写分离,可以使对数据库的写操作和读操作在不同服务器上执行,提高并发量和响应速度.现在的网站一般大点的,都采用有数据库主从分离.读写分离,既起到备份作用也可以减轻数据库的 ...

  2. mysql主主备份_MySQL主从备份和主主备份配置+Keepalived+MySQL读写分离

    一.MySQL主从备份 为保证数据库的安全和效率,可以使用主从备份,当有写的操作可以在主服务器上操作,操作完之后备份到从服务器上,当有读操作时可以访问从服务器,这样在一定程度上保证了数据库的安全,当主 ...

  3. Java中mysql的读写分离_mysql读写分离

    MySQL读写分离原理 MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先部署主从复制,只有复制完了,才能在此基础上进行数据的读写分离. 读写分离就是只在主服务器上写,只在从服务器上读, ...

  4. linux中mysql主主搭建_mysql 主从配置 主主配置

    MySQL 主从( MySQL Replication) ,主要用于 MySQL 的时时备份或者读写分离.在配置之前先做一下准备工作,配置两台 mysql 服务器,如果你的机器不能同时跑两台 Linu ...

  5. mysql中数字格式化_mysql中格式化数字详解

    最近因为工作的需求,需要对mysql中数字进行格式化,但发现网上的资料较少,索性自己总结一下,方便自己也帮助有需要的朋友们,下面话不多说,来一起看看详细的介绍: 一.format函数: 格式化浮点数 ...

  6. mysql中int(m)_mysql中int(M) tinyint(M)中M的作用

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  7. mysql中计算问题_MYSQL 数学运算符问题

    背景: 在mysql中   'stringA' + 'stringB' 这种类型的操作,在mysql内部会自动转化为两个double 数进行运算. -------------------------- ...

  8. mysql中合并函数_MYSQL分组合并函数

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  9. mysql中show属于_mysql show的常见用法

    a. show tables或show tables from database_name; // 显示当前数据库中所有表的名称 b. show databases; // 显示mysql中所有数据库 ...

最新文章

  1. 根据ip获取用户地址-百度
  2. 微软Azure已开始支持hadoop--大数据云计算
  3. 使用阿里云ACM简化你的Spring Cloud微服务环境配置管理 1
  4. SVN switch 用法详解
  5. Dom4j操作XML
  6. MySQL:进阶应用
  7. iptables filter表案例/iptables nat表应用
  8. mysql锁表语句,Java核心知识点
  9. 技术人 | 浅谈如何成为技术一号位?
  10. 达摩达兰论估价pdf_应用公司理财PDF下载_(美)阿斯瓦斯・达摩达兰_机械工业出版社_会计_管理_零度图书网...
  11. 文本框仅允许输入大于0的正整数
  12. 基于Kubernetes构建企业容器云
  13. Visual Studio 2013新功能介绍
  14. monit 内存 监控_mac系统监控软件Monity for Mac
  15. 导入Excel如何判是否有重复的行
  16. 【视频演示】B站视频演示
  17. dao层通用封装_层超类型模式:封装多层系统中的通用实现
  18. 请问如何修复损坏的jpg文件
  19. PHP获取每个周五或周一的日期
  20. Matlab exercise05

热门文章

  1. 再推荐Geogebra 5.0.xx一下
  2. go语言调用python_golang和python互相调用
  3. java web 项目 常用 小工具类 ~~~~
  4. Android Api接口的简单实现----身份证信息查询
  5. 第四章 集成运算放大电路
  6. php手机访问地址吗,如何用php判断电脑访问还是手机访问
  7. Java实现验证码识别
  8. vue实现文字滚动效果
  9. inter无线网卡服务器版驱动,Intel英特尔
  10. qq手机助手连接服务器失败是什么原因,用91助手给手机安装微信和QQ提示失败