一、mysql主从同步原理

1.为什么做主从同步:

a.实时灾备,用于故障切换

b.读写负载均衡

c.单独应用使用(定时任务,报表系统等,不与业务系统进行交互)

d.开发人员专用

2.主从同步原理

binlog:一些SQL语句,但是不包含查询语句,可以恢复数据;

IOthread:专门从master同步biglog,放置在relay binlog中;

SQLThread:从relay binglog中读取sql语句,同步数据,也可以写binlog日志,为级联的slave同步数据;

主从同步问题:链路中断,数据的不一致性

mysql5.5之后采用半同步的机制,性能会受到slave节点的影响,可以设置超时时间,流程一直到relaylog才返回;

什么时候采用半同步:数据一致性及性能之间进行权衡;

所有的问题解决方案都有双刃性,在性能和数据一致性两方面进行权衡

二、常用主从同步方案

1.一主一从

master做读写,slave主要做灾备

2.一主多从

写操作大的时,master压力非常大,双主实现,实现比较复杂,

3.级联同步

三、一主多从方案实践

mysql linux 免安装配置

安装前必须删除原来的安装

需要检查 以下文件是否存在 ,如果存储则要删除之

/etc/my.cnf

/etc/init.d/mysqld

mysql 依赖的库

shell> yum search libaio # search for info
shell> yum install libaio # install library

创建mysql  与用户组,-s /bin/false 表示该用户不能登录

shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql

解压安装包至指定目录

shell> tar -zxvf mysql-5.6.10-linux-glibc2.5-x86_64.tar.gz —C /home/mysql
shell> cd
shell> cd mysql

为 mysql 用户添加权限

shell> chown -R mysql ./
shell> chgrp -R mysql ./
#创建data目录并添加权限
shell> chown -R mysql:mysql /mysql/*

拷贝配置文件

shell> cp ${basedir}/support-files/my-medium.cnf /etc/my.cnf
#修改配置
[mysqld]
basedir=/home/mysql
datadir=/home/mysql/data/mysql
tmpdir = /tmp
character-set-server=utf8
shell> cp support-files/mysql.server /etc/init.d/mysql

初始化 mysql 库

shell> ./scripts/mysql_install_db --user=mysql --basedir=/home/mysql  --datadir=/home/mysql/data/mysql --tmpdir=/tmp

#添加环境变量

shell> vi /etc/profile
PATH=/home/mysql/bin:$PATH
export PATH
#让刚才的修改生效
shell> source /etc/profile

启动及其它配置 #启动数据库

service mysql start
#开机启动
chkconfig mysqld on
#初始化mysql的一些设置
mysql_secure_installation
#回车
Enter current password for root (enter for none):
#y,设置mysql的root密码
Set root password?[Y/n] y
#以下都yes
Remove anonymous users?[Y/n] y
Disallow root login remotely?[Y/n] y
Remove test database and access to it?[Y/n] y
Reload privilege tables now?[Y/n] y
ThanksforusingMySQL!

允许远程登陆

  1. mysql> use mysql;
  1. mysql> select host,user,password from user;
  1. mysql> update user set password=password('hadoop') where user='root';
  1. mysql> update user set host='%' where user='root' and host='localhost';
  1. mysql> flush privileges;

安装时的一些错误

-bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: 没有那个文件或目录

解决: yum -y install perl perl-devel

Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决:yum -y install libaio-devel

一主多从配置

master my.cnf 配置

#需要同步的二进制数据库名;
binlog-do-db=demo
#不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test#以下参数可选----------
#binlog 格式
binlog-format=ROW
log-bin=mysql-master-bin
#slave更新时是否记录到日志中;
log-slave-updates=true
#开启半同步,需要另外安装插来支持
rpl_semi_sync_master_enabled=ON
binglog格式配置:http://www.cnblogs.com/jackluo/p/3336585.html
mysql> show master status
#在主库上查看已连接的slave主机
mysql> show slave hosts;
#查看所有binlog日志
mysql> show binary logs;
#查看所有binlog 事件
mysql> show binlog events in 'mysql-bin.000003' from 145 \G;

slave my.cnf 配置-----

server-id = 2
log-bin=mysql-slave-bin
replicate-do-db=demo
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=personalsite
replicate-ignore-db=test

slave 节点修改master 配置

mysql>change master to master_host='192.168.0.101', master_user='root', master_password='hadoop',MASTER_AUTO_POSITION = 2887;

Slave 相关操作

#启动slave
mysql>start slave;
mysql>stop slave;
#查看 slave 状态
show slave status\G;
#跳过指定数量错误
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
#查看 relaylog 事件
show relaylog events in 'localhost-relay-bin.000019'

注意:1.uuID相同,I/O线程没法同步,需要修改/root/mysql/data/mysql/auto.cnf文件的值,主从不一致;

2.若由于手工操作导致主从不同步的情况,解决办法参考http://www.phpfensi.com/mysql/20140924/6167.html

读写分离实现   360 Atlas(只适用于64位操作系统)

安装与卸载Atlas

#安装
shell> rpm -i  Atlas-2.2.1.el6.x86_64.rpm
#卸载
shell> rpm -e  Atlas-2.2.1.el6.x86_64.rpm

安装目录在 /usr/local/mysql-proxy/ 当中

Atlass配置

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 127.0.0.1:3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
#proxy-read-only-backend-addresses = 127.0.0.1:3305@1
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密。用户密码所有主库和从库都必须一至
pwds = root:/iZxz+0GRoA=
#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:1234

启动与关闭Atlas

./mysql-proxyd test start
./mysql-proxyd test stop

以代理方式进行管理员登录

mysql -h127.0.0.1 -P2345 -uroot -proot

查询直接走master节点:/*MASTER*/SELECT * FROM `user_info`;

mysql主从复制及读写分离相关推荐

  1. mysql主从复制、读写分离到数据库水平拆分及库表散列

    文章转载自http://blog.csdn.net/sd4422739/article/details/49514981 web项目最原始的情况是一台服务器只能连接一个mysql服务器(c3p0只能配 ...

  2. MySQL主从复制与读写分离配置及实操

    MySQL主从复制与读写分离 一.MySQL主从复制 1.复制类型 2.工作过程 二.MySQL读写分离 1.定义 2.存在意义 3.作用时间 4.原理 5.类型 基于程序代码内部实现 基于中间代理层 ...

  3. 【MySQL】Spring Boot项目基于Sharding-JDBC和MySQL主从复制实现读写分离(8千字详细教程)

    目录 前言 一. 介绍 二. 主从复制 1. 原理 2. 克隆从机 3. 克隆从机大坑 4. 远程登陆 5. 主机配置 6. 从机配置 7. 主机:建立账户并授权 8. 从机:配置需要复制的主机 9. ...

  4. 如何进行MySQL主从复制与读写分离的配置

    MySQL主从复制与读写分离 什么是读写分离? 为什么要读写分离呢? 什么时候要读写分离? 主从复制与读写分离 mysq支持的复制类型 主从复制的工作过程 MySQL主从复制延迟 MySQL主从复制实 ...

  5. 运维之道 | Mysql主从复制+mycat读写分离

    运维之道 | Mysql主从复制 + Mycat读写分离 1.什么是读写分离 读写分离,基本的原理是让主数据库处理事务性增.删.改操作(INSERT.UPDATE.DROP),而从数据库处理SELEC ...

  6. 【数据库七】搭建MySQL主从复制和读写分离详解

    详解搭建搭建MySQL主从复制和读写分离 1.案例实施:搭建MySQL主从复制 1.1 主节点数据库(CentOS 7-5) 1.2 从节点数据库(CentOS 7-6) 1.3 从节点数据库(Cen ...

  7. mysql主从读写Windows_Windows操作系统下的MySQL主从复制及读写分离

    一.主服务器(master)配置 1.修改MySQL配置文件my.ini [mysqld] log-bin=mysql-bin log-bin-index=mysql-bin.index server ...

  8. e盘是否具有读写权限_轻松搭建MySQL主从复制、读写分离(双机热备)

    主从复制: 当mysql数据库的数据量太大的时候,查询数据就很吃力了,无论怎么优化都会产生瓶颈,这时我们需要增加服务器设备来实现分布式数据库,实现多机热备份,要想实现多机的热备,首先要了解主从数据库服 ...

  9. mysql双机热备 读写分离_轻松搭建MySQL主从复制、读写分离(双机热备)

    主从复制: 当mysql数据库的数据量太大的时候,查询数据就很吃力了,无论怎么优化都会产生瓶颈,这时我们需要增加服务器设备来实现分布式数据库,实现多机热备份,要想实现多机的热备,首先要了解主从数据库服 ...

  10. amoeba实现mysql主从读写分离_利用Amoeba实现MySQL主从复制和读写分离

    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave) ...

最新文章

  1. pandas 删除数据
  2. 消费端代码获取队列名称_B端产品要懂的技术
  3. 并发编程(CountDownLatch使用)
  4. 启用nginx status状态详解
  5. EL之Bagging(DTR):利用Bagging对回归问题(实数值评分预测)建模(调2参)
  6. [Silverlight]常见问题
  7. mysql safe无法启动_解决mysqld_safe无法启动问题的方法
  8. PHP 5.3以上版本新增的一些方法
  9. python调用shell用什么类_python脚本中调用shell命令
  10. byte 类型_java知识总结(九):基本类型转换
  11. 【OpenCV学习】对于仕琪所写《OpenCV教程基础篇》的一些想法
  12. Micropython——L298N电机驱动模块
  13. 降压恒流 LED 驱动器
  14. 弯头lisp_(最全的)管道材料代号说明
  15. indesign在python中是什么意思_用Python做深度学习一:数学基础帖子详情 - 网易云课堂...
  16. Solr评分整理汇总:深入理解Lucene默认打分算法以及常用的三种评分方法
  17. 奥运会数据可视化展示
  18. C++ getchar()函数
  19. win7计算机怎样共享的打印机,两台win7电脑如何共享打印机
  20. Revit API:View 视图概述

热门文章

  1. python flag格式_Python 字符串格式化之 printf-style
  2. windows 查看_解决 Windows 照片查看器无法显示图片问题
  3. SQL:postgresql可以使用127.0.0.1连接不能使用ip连接解决方法
  4. CSS:transform
  5. Git:git pull 的使用
  6. jsp mysql连接池 回收_mysql连接池连接JSP
  7. 《高效能程序员的修炼》——程序员的八种境界
  8. Java应用服务器对比:TomcatJettyGlassFishWildFly
  9. 三维重建_基于RGB-D相机的三维重建总览(静态动态)
  10. python_numpy_矩阵乘法multiply()、dot()、 matmul()、 * 、 @ 辨析