2017 11-12 MySQL应用3

一.半同步复制

(1)半同步复制作用

相比较于同步复制和异步复制来说,半同步复制的工作原理是当主库执行完客户端的提交的事务后并不是马上返还给客户端,而是要至少等待一个从库将事务接收到并将内容写入relay_log中。这样做的好处是提高了数据的安全性,但是也会造成一些延迟,所以半同步复制也主要应用在延迟较小的网络环境中

(2)简单配置实现半同步复制

首先准备两个虚拟机,一个作为主库,一个作为从库
开启mysql数据库
配置两台虚拟机为主从复制的关系
主库上

搜狗截图20171113211010.png

从库上
搜狗截图20171113211034.png

在主库中设置 grant replication client ,replication slave on . to 'repluser'@'172.18.%.%' identified by 'replpass';
flush privileges;
搜狗截图20171113211708.png

在主库上安装插件
install plugin rpl_semi_sync_master SONAME 'semisync_master';
搜狗截图20171113212102.png

搜狗截图20171113212218.png

在从节点上
开启数据库
执行 change master to master_host='172.18.254.242',master_user='repluser',master_password='replpass',master_log_file='master-log.000003' master_log_pos=245;
start slave;
show slave status\G
搜狗截图20171113212641.png

在从节点上安装插件
install plugin rpl_semi_sync_slave SONAME 'semisync_slave';
搜狗截图20171113212802.png

分别在主从节点上开启半同步复制的功能
set @@global.rpl_semi_sync_master_enabled=ON;
搜狗截图20171113213042.png

搜狗截图20171113213059.png

set @@global.rpl_semi_sync_slave_enabled=ON;
搜狗截图20171113213339.png

stop slave;
start slave;
show global status like '%rpl%';
搜狗截图20171113213438.png

此时在主服务器上
搜狗截图20171113213850.png

create database youdb;
use youdb;
create table hi values(id int,name char(30));
查看后表创建成功
搜狗截图20171113214132.png

(2)使用复制过滤器

1.概念:仅复制有限一个或几个数据库相关的数据,而非所有;由复制过滤器进行;
2.两种实现思路
(1) 主服务器
主服务器仅向二进制日志中记录有关特定数据库相关的写操作;
问题:其它库的time-point recovery将无从实现;
binlog_do_db=
binlog_ignore_db=
(2) 从服务器
从服务器的SQL THREAD仅重放关注的数据库或表相关的事件,并将其应用于本地;
问题:网络IO和磁盘IO;
Replicate_Do_DB=
Replicate_Ignore_DB=
Replicate_Do_Table=
Replicate_Ignore_Table=
Replicate_Wild_Do_Table=
Replicate_Wild_Ignore_Table=
权衡利弊与实际需要做好采用从服务器实现

(3)实现过程

在从服务器上
stop slave;
set @@global.replicate_ignore_db=youdb;——将youdb数据库过滤不会对其内容进行复制
start slave;
查看slave状态


搜狗截图20171113214847.png

此时在主服务上对youdb数据库做一些修改
use database youdb;

insert into hi values(2,'wanghai');
搜狗截图20171113215119.png

在从服务器上去查看
搜狗截图20171113215211.png

注意小细节:在主服务器上
搜狗截图20171113215313.png

在从服务上
搜狗截图20171113215326.png

这说明虽然从服务器也是从相同位置读取数据,但是并没有对数据进行复制

(4)复制的监控和维护

1.理日志:PURGE
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr };


搜狗截图20171113215730.png

一般情况下最好不要删除二进制文件,如果非要删除,也应该先将二进制文件复制到别的地方,再进行删除
例:如图如果想删除000003以前的日志但不包括000003日志就可以执行 purge binary logs to 'master-log.000003';
2.复制监控
MASTER:
SHOW MASTER STATUS;
SHOW BINLOG EVENTS;
SHOW BINARY LOGS;
SLAVE:
SHOW SLAVE STATUS;
判断从服务器是否落后于主服务器:
Seconds_Behind_Master: 0
3.如何确定主从节点数据是否一致?
通过表的CHECKSUM检查;
使用percona-tools中pt-table-checksum;
4.主从数据不一致时的修复方法?
重新复制;

二.主从复制的读写分离

(1)常用的软件是proxysql——下载地址www.proxysql.com,下载对应版本。该软件特点是高性能,高可用
其他软件:mysql-proxy ,oneproxy,maxscale
(2)接下来使用proxysql来实现读写分离的目的
步骤:在官网上下载好对应版本后,通过yum install proxysql-1.4.2-1-centos67.x86_64.rpm
下载好之后可以先查看一下该软件的相关信息

搜狗截图20171114095759.png

进入配置文件进行配置
搜狗截图20171114100230.png

搜狗截图20171114101134.png

hostgroup=0代表主数据库,hostgroup=1代表从数据库
创建用户配置段设置
搜狗截图20171114101646.png

设置查询规则
搜狗截图20171114102048.png

调度读写分离
搜狗截图20171114102328.png

实验进行验证读写分离是否生效
在proxysql服务器上以dbadmin身份登录数据库
搜狗截图20171114102806.png

通过proxysql代理将数据库代理到主数据库上,此时写操作都调度主数据库上,而读的内容到调度到从数据库上
注意细节:不要忘了在从服务器上设置复制过滤器,否则读写分离的效果无法生效

三.MHA的应用实现

(1)关于MHA的介绍
MHA(Master HA)是一款开源的Mysql的高可用程序,它为Mysql的主从复制架构提供了自动监测机制,当MHA监测到master主节点出现故障后,它会提升和主节点复制信息内容最接近的slave节点作为新的主节点,并且MHA还会通过获取其他从节点的信息来避免一些一致性方面的问题。MHA还能提供master在线切换主从节点的功能。
MHA有两种角色
1.MHA Manager(管理节点):通常单独的存在于一台服务器上管理多个master/slave集群,每个集群称为一个application
2.MHA node(数据节点):该数据节点主要工作在每一个MYSQL服务器上,它通过监控具有解析和清理logs日志功能的脚本来加快故障转移
(2)准备MHA环境
1.本次实验要有四个节点
一个节点作为master节点
两个节点作为slave节点
一个节点作为MHA节点
2.各节点之间要做解析

搜狗截图20171114150920.png

3.主节点的配置文件进行设置
搜狗截图20171114151119.png

4.从节点配置文件进行设置
搜狗截图20171114151241.png

注意server_id不要相同
5.设置完成后主从节点开启Mysql
在主节点上进行授权
show master status\G;
grant all on . to 'mhaadmin'@'172.18.%.%' identified by
'mhapass';
flush privileges;
在从节点上执行
change master to master_host='172.18.254.242',master_user='repluser',master_password='replpass',master_log_file='master-log.000004',master_log_pos=245;
start slave;
show slave status\G
在另一个从节点上做相同操作
复制集群配置完成
6.准备基于SSH互相通信的环境
在其中一个节点上
执行ssh-keygen-id -t rsa -P ''
搜狗截图20171114154816.png

cd.ssh
ssh-copy-id -i ./id_rsa.pub root@node3
分别将id_rsa 和id_rsa.pub复制到各个节点上
搜狗截图20171114155135.png

ssh 验证
搜狗截图20171114155359.png

各个节点都交叉进行验证
(7)安装MHA
在node4上进行安装
lftp 172.18.0.1/pub
cd Source
cd 6.x86_64
mget mhamysql-manager-0.56-0.e16.noarch.rpm
mhamysql-node-0.56-0.e16.noarch.rpm
在主从点上安装mhamysql-node-0.56-0.e16.noarch.rpm即可
(8)对MHA进行的配置文件进行配置
mkdir /etc/masterha
vim /etc/masterha/app1.cnf
搜狗截图20171114161350.png

配置完成后进行检查检验ssh通信是否成功
master_check_ssh --conf=/etc/masterha/app1.cnf
主从复制集群是否成功
mhamysql-node-0.56-0.e16.noarch.rpm
注意:要在从节点上手动执行flush privileges;
否则监测结果为Health is not ok
检查成功后启动MHA
masterha_manger --conf=/etc/masterha/app1.cnf
(9)模拟主节点故障
关闭主节点数据库,然后在MHA服务器上重新执行
mhamysql-node-0.56-0.e16.noarch.rpm
监测结果为Health is not ok
此时在从节点上(172.18.25.62)变为主节点
show slave status\G;
内容为空,证明此时该节点为主节点
show master status\G;
变为新的主节点
如果想要原来的主节点上线,就要在原来的主节点的配置文件文件中加入relay_log_purge=OFF relay_only=ON
重新启动该数据库,并导入
change master to master_host='172.18.25.62',master_user='repluser',master_password='replpass',master_log_file='master-log.000003',master_log_pos=395;
start slave;
show slave status\G;
上线成功
注意:启动MHA也可以执行后台运行机制
nohup masterha_manager --conf=/etc/masterha/app1.cnf &>/data/master/app1/manager.log &

四.表分区的建立

(1)根据范围进行划分
打开数据库
选择hellodb数据库
创建一个表
CREATE TABLE students (id INT, name VARCHAR(100), age TINYINT UNSIGNED NOT NULL, gender ENUM('F','M')) PARTITION BY range(age)(partition youngman values less than (40), partition middleman values less than (70), partition oldman values less than maxvalue);


搜狗截图20171114201947.png

for语句生成表内容
gender=('F' 'M')
echo ${gender[0]}
echo ${gender[1]}
for i in {1..1000};do mysql -e "insert into hellodb.students2 values ($i,'stu$i',$[RANDOM%100+18],'${gender[$RANDOM%2]}');" -uroot -pmagedu;done


搜狗截图20171114202754.png

(2)按hash划分表
创建一个新的表
CREATE TABLE students (id INT, name CHAR(100) NOT NULL, age TINYINT UNSIGNED, gender ENUM('F','M')) PARTITION BY hash(id) PARTITIONS 6;
搜狗截图20171114203016.png

同样用for语句创建表的内容
for i in {1..1000};do mysql -e "insert into hellodb.students values ($i,'stu$i',$[RANDOM%100+18],'${gender[$RANDOM%2]}');" -uroot -pmagedu;done

(3)按照List来划分表
CREATE TABLE students (id INT, name CHAR(100) NOT NULL, age TINYINT UNSIGNED, gender ENUM('F','M'),majorid tinyint unsigned not null) partition by list(majorid) (partition apr0 values in (1,4,7),partition par1 values in (2,5,8),partition par2 values in (3,6,9));


搜狗截图20171114203658.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容