17.1 MySQL主从介绍
17.2 准备工作
17.3 配置主
17.4 配置从
17.5 测试主从同步
有的同学,遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致
扩展部分
不停库不锁表在线主从配置
主从不同步
主主
关于 auto_increment
mysql-proxy 实现读写分离
mysql-proxy类似的产品有:
mycat 基于阿里的开源软件cobar,官网 www.mycat.io
mycat实现分库分表
atlas 出自于360,不维护不更新了
mysql环形主从
mysql架构演变
MHA架构
比较复杂的mysql集群架构
一、 MySQL主从介绍
MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的,MySQL主从基于binlog,主上须开启binlog才能进行主从。
MySQL主从过程大致有3个步骤
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
3)从根据relaylog里面的sql语句按顺序执行
MySQL主从有3个线程:
主上有一个log dump线程,用来和从的I/O线程传递binlog
从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
主从复制原理图:
mysql主从使用场景:
1)数据备份,主机器宕机,从机器还能随时对web提供服务
2)作为一个从库,读的库,减轻主库的压力,数据备份且可以分担主机器被调用数据时的压力,mysql主从,是有方向性的,写数据,必须从主机器开始;如果不依照原理会导致数据紊乱
二、准备工作
做实验需要两台机器,且都需要mysql
主机1 ying01 192.168.112.136
主机2 ying02 192.168.112.138
第一步:先查看ying02是否安装mysql
第二步;把ying01上的mysql 5.6的安装包,复制到ying02机器上
第三步:此时,解压,创建用户,初始化等(见LNMP 笔记)
初始化的时候出现错误,需要安装 perl perl-devel库
继续安装 perl-Data-Dumper
继续按提示安装:libaio
此时,初始化成功,用echo $? 检测,为0正确
第四步:按下面,配置my.cnf文件
第五步:把mysql脚本,复制到/etc/init.d下,并改名为mysqld;并配置脚本文件
第六步:启动mysql脚本服务
三、配置主
现在把ying01作为主(master),把ying02作为从(slave)
按下面提示,编辑主配置文件
重启mysql服务;查看数据目录有 ying01.000001和ying.index两个文件
先把zrlog数据库做备份,并改名为 yingying数据库
进入mysql
授予repl用户(所属IP)从复制权限,针对所有的数据库及表,以及密码
grant 权限 on 数据库对象 to 用户
先锁定数据库以防止写入数据
查看master状态
把需要主从复制的数据库都备份
四、配置从
现在在从端配置: ying02 192.168.112.138
编辑mysql配置文件
重启mysql服务;并利用scp命令,复制ying01上备份文件到ying02上/tmp下
由于ying02没有给mysql命令指定环境变量;因此此时需要设置别名,方便使用
创建与ying01上相同的数据库,并把/tmp下相应的备份数据库,拷贝到刚创建的数据库,需要一一对应
若slave io及sql线程已经启动,需要先 stop slave
change master命令设置slave从机与master主机进行通信
语句释义:
master_host 与 master_port:分别代表master主机名(或IP地址)及mysql实例端口号。端口默认为3306,则可以省略
master_user 与 master_password:连接到master主机复制账户所对应的用户名及密码。
master_log_file 与 master_log_pos:确定slave的io线程下次开始执行时从master开始读取的位置坐标,如果二者都没有指定,slave使用上次slave sql线程保存的位置。
注意:change master to可以不带参数,如:只改变了用于复制的用户密码,那么change master to只需针对master_password选项作出修改即可。
开启从机上slave io及sql线程
出现 Slave_IO_Running: Connecting 问题
有问题 ,先停止slave
在排查用户名,密码等配置信息后,发现ying01端的防火墙没有关闭
回到从端(ying02),重新开启start slave
配置成功后,然后到ying01上,解锁数据表
五、测试主从同步
数据库及表同步也可以指定,主从上命令不同:
主服务器:
binglog-do-db=1,2 //仅同步指定的库1和2
bing-ignore-db=3 //忽略指定的库3
从服务器:
replicate-do-db=
replicate-ignore-db=
replicate-do-table
replicate-ignore-table=
replicate-wild-do-table= // 常用
replicate-wild-ignore-table= // 常用
现在分别在ying01和ying02机器上进行主从测试:
在主(ying01)上,进入yingying数据库,查看其数据表情况
从端(ying02)测试