前言

前篇说了作为运维在数据库块最起码要会两大技能,今天来说说第二技能--主从复制

随着业务的增长,一台数据库服务器以满足不了需求了,负载过重,这时候就需要减压,实现负载均衡读写分离,一主一从或一主多从

主服务器只管写,从服务器管读,从而提高效率减轻压力。

主从复制分类:

主从同步:当用户写数据主服务器必须和从服务器同步一致了才告诉用户写入成功,等待时间太长

主从异步:只要用户访问写数据主服务器写入立马返回给用户成功

主从半步同步:当用户访问写数据主服务器写入并同步其中一个从服务器就返回给用户成功

备注:通常都是使用的主从异步,根据环境需求来选择,想要数据更安全选择半步同步

主从复制注意事项

注意:selinux策略、防火墙

1、开启二进制日志

2、设置二进制记录格式为ROW(推荐)

3、设置唯一server-id

4、设置datadir中日志名称(可选)

5、创建有复制权限的用户账号

6、如果要启用级联复制,需要在从服务器启用

7、限制从服务器为只读

8、禁止主机名解析

9、高可用从服务器要加上

10、如何保证主从复制的事务安全(根据需求添加)

1)在master节点启用参数:

2)如果用到的为InnoDB存储引擎:

3)在slave节点启用参数:

主从复制原理

如图

备注:

主从同步有延迟,为什么?因为它时是单线程传送日志

实战-实现主从复制+高可用

准备工作

准备4台主机67、17、37、57,分别充当角色为管理主机、主服务器、2个从服务器

安装包:和主服务器同版本的mysql数据库包、和高可用安装包

mha4mysql-manager

mha4mysql-node

比如主服务器已经运行了1年了,发现满足不了需求了,需要搭建从服务器,我们先从搭建从服务器开始

备注:首先确保主服务器开启了二进制日志

确认二进制文件已启动

MariaDB [(none)]> show variables like '%log_bin%'

确认server-id

MariaDB [(none)]> show variables like 'server%';

主服务器设置

1、创建可用于复制的账号

2、完全备份数据(用于在从服务器上来还原)

备注:备份时的某表的状态

为了下面的实验测试在这里我们备份玩再增加一条记录

insert hellodb.students (name,age)values('gaoda001',20);

3、传送到从服务器37、57上

scp…

37、57(从)服务器设置

1、配置文件

1)开启二进制日志

2)设置server-id(要和主服务id区分开)

备注:57设置为3 只要他们不相同就可

3)从服务器设置为只读

4)禁止主机名解析

5)数据和索引分开存放

6)重启或启动服务

备注:以防万一可以查看下最重要的两项开启了没有

2、实现复制

1)进入数据库查找同步代码

2)根据情况编辑上图上的信息

注:起始位置可以在完全备份文件里查看

两种方式:

① 先还有完全备份数据再拿以上信息编辑下,在数据库中执行

② 直接把上面的信息添加到完全备份文件里

下面用第二种方式来操作如图

3)37主机还原并查看

mysql < all-2018-08-08.sql

备注:以还原到备份时的状态

主服务器备份完有用户新加数据对吧,下面开启主从复制看看能不能复制过来最新的数据

4)查看复制状态

MariaDB [(none)]> show slave status\G

*************************** 1. row ***************************

Slave_IO_State:

Master_Host: 192.168.43.17

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000005

Read_Master_Log_Pos: 385 #从主服务器读取到的位置

Relay_Log_File: centos7_05-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000005

Slave_IO_Running: No #表示还没开启

Slave_SQL_Running: No #表示还没开启

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 385

Relay_Log_Space: 256

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: NULL ##注意这个 表示同步时间差

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 0

Master_SSL_Crl:

Master_SSL_Crlpath:

Using_Gtid: No

Gtid_IO_Pos:

Replicate_Do_Domain_Ids:

Replicate_Ignore_Domain_Ids:

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State:

1 row in set (0.03 sec)

5)开启主从复制并查看状态

start slave;

MariaDB [(none)]> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.43.17

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000005

Read_Master_Log_Pos: 608

Relay_Log_File: centos7_05-relay-bin.000003

Relay_Log_Pos: 778

Relay_Master_Log_File: mysql-bin.000005

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 608

Relay_Log_Space: 1092

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_SSL_Crl:

Master_SSL_Crlpath:

Using_Gtid: No

Gtid_IO_Pos:

Replicate_Do_Domain_Ids:

Replicate_Ignore_Domain_Ids:

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

1 row in set (0.00 sec)

6)查看表确认有没有从主服务器同步最新的数据

7)57(从服务器同样的设置)

备注:目前现实了异步同步复制,下面来看半同步设置

半同步设置

主服务器设置

1、首先在主服务器上安装插件

备注:

show plugins; ##查看当前系统中的插件列表

UNINSTALL PLUGIN rpl_semi_sync_master;##卸载插件

2、查看插件状态

3、开启

备注:最好写在配置文件中

4、查看插件变量状态

SHOW GLOBAL STATUS LIKE '%semi%';

备注:这里记录有几个半同步主机

从服务器设置

1、安装插件

2、启动插件

备注:同样建议写在配置文件中

3、从服务器查看改插件是否开始工作

SHOW GLOBAL STATUS LIKE '%semi%';

为什么没有开始工作?

因为是先开启的主从复制再安装的次插件

所以这种情况下,先停止从服务器的主从复制功能

1)停止:

2)再次开启主从复制

3)再去查看

备注:现在就启用了半同步功能,下面开始搭建高可用,实现主服务器宕机自动提升从服务器当主

MHA高性能

备注:四台主机之间必须是ssh基于key验证登陆,所以要先实现ssh互相链接

步骤:

ssh-keygen

cd .ssh

ssh-copy-id 192.168.43.67

把.ssh目录考到其他主机

1、在主服务器上创建管理者账号

2、在67管理主机上安装以下包

3、在17、37、57安装如下包

mha4mysql-node

4、在管理主机创建管理节点

根据上面创建的信息填写

[

备注:

candidate_master=1:是说主服务器宕机了带有这项的主机有机会当主

5、测试

1)ssh协议

2、检查复制

3、启动(默认前台执行)

备注:如果你是编译安装在/etc/mastermha/app1.cnf配置文件中指定日志路径,最好主从服务器数据库设置的位置都是一致的。

MySQL的主从复制云栖社区_MySQL-主从复制相关推荐

  1. 2018年云栖社区值得订阅的11个精选技术期刊!

    导语:近日,云栖社区全新推出垂直技术内容订阅平台,平台将以电子版周刊.月刊.每日导读等形式,为您呈现各垂直技术领域优质内容集锦.您只需通过一次简单订阅操作,即可定期接收到感兴趣的技术内容集锦.以下为你 ...

  2. 年终盘点丨细数2017云栖社区20大热点话题(附100+话题清单)

    2017,你在聚能聊里分享了多少内容?贡献了多少话题?又收获了多少呢?社区聚能聊不仅可以请教技术难题,探讨热点话题,也可以八卦日常生活,分享码农们的点点滴滴. 程序员的世界不止是眼前的代码,一样有诗和 ...

  3. 云栖社区特邀专家徐雷——Java Spring Boot开发实战系列课程【往期直播回顾】...

    徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Java Spring Boot.Spring ...

  4. 写给云栖社区在做网站的朋友一点干货

    我本人也是从事网站建设及APP开发业务的,工作多年下来,从以前的几百元企业网站,到商城网站,以及一些应用类型的APP开发,亲眼目睹了很多企业,以及很多项目,在应用的过程中,过了1-2年,很多网站及开发 ...

  5. 【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战...

    主讲人:徐雷(云栖社区特邀Java专家) 徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Ja ...

  6. 阿里古谦:阿里互联网架构的6大最佳实践-博客-云栖社区-阿里云

    阿里古谦:阿里互联网架构的6大最佳实践-博客-云栖社区-阿里云

  7. 2018年云栖社区展望(建设性意见非BUG)

    我的了解 我算是社区的老司机了,以我的了解云栖社区运营方式应该是先引流建立用户画像,确定社区规章制度,等级,填充内容,不断挖掘符合社区有价值的内容(云头条 推荐),之后就是留住用户,培养有价值的人员, ...

  8. 云栖社区云栖号(团队博客)攻略【2018版】

    云栖社区云栖号是什么? 这是一个为技术团队打造的专区(小站),团队成员的技术文章将在这里汇总,可以帮助团队沉淀优质技术内容.打造技术品牌和影响力等. 云栖号申请条件 点击https://yq.aliy ...

  9. 云栖社区,诚邀技术同仁一同入驻

    2019独角兽企业重金招聘Python工程师标准>>> 我的博客即将入驻"云栖社区",诚邀技术同仁一同入驻 转载于:https://my.oschina.net/ ...

最新文章

  1. python下载大文件-python requests 下载大文件不完整
  2. flex socket java,Flex的socket与java使用amf3进行通信
  3. Git和Github介绍,294页『Git与Github学习使用指南』分享
  4. 基础总结篇之三:Activity的task相关
  5. 移动前端的一些坑和解决方法(外观表现)
  6. jvm 参数_JVM快速调优手册之六:JVM参数设置及分析
  7. cocostudio学习
  8. 06 - 雷达发射机 概述
  9. 编译工具链和交叉编译工具链简易说明
  10. get方法和post方法的区别和联系
  11. 怎么看计算机配件型号,操作方法:如何查看CPU型号,教您如何通过CPU型号[图形]识别计算机的性能...
  12. 关于java读取文本文件乱码的问题
  13. 对标阿里P6-P7高级Java程序员的进阶技术路线
  14. Win10 DISM 清理 C盘的 WinSXS 文件夹
  15. Matlab之绘制三维曲面图
  16. gitlab迁移坑深路远
  17. python实践答辩ppt_如何制作优秀的毕业论文答辩 PPT?
  18. 生活明朗,万物可爱,人间值得,未来可期
  19. 欧瑞变频器800参数设置_ABB变频器ACS800调试参数设置
  20. 黏包现象和解决黏包的方法

热门文章

  1. SQL Server 2008 - Cannot set a credential for principal 'sa'.
  2. 批处理命令Start
  3. 企业员工工资管理系统
  4. matlab GUI之自定义菜单小结
  5. windows清理剪切板
  6. sql语句中的时间查询
  7. PHPMailer - PHP email transport class
  8. linux的搜索和时间
  9. 刚认识女孩说不要浪费时间_不要浪费时间寻找学习数据科学的最佳方法
  10. 怎么样用System.out.println在控制台打印出颜色