首页 > 数据库 >搭建Mysql主从复制

搭建Mysql主从复制

时间:2023-08-03 19:36:05浏览次数:32  
标签:主库 主从复制 步骤 Mysql 复制 MySQL 服务器 从库 搭建



文章目录

  • 1、MySQL 支持的复制类型
  • 2、MySQL主从复制的工作过程
  • 3、搭建步骤
  • 步骤1:环境准备
  • 步骤2:主从服务器时间同步
  • 步骤3:配置主服务器
  • 步骤4:创建从服务器账户
  • 步骤5:配置从服务器
  • 步骤4:启动从服务器复制
  • 4、主从延迟问题
  • 5、结论



MySQL主从复制是一种常用的数据库高可用性解决方案,可以提高数据库的可用性和性能。本教程将介绍如何搭建MySQL主从复制。

1、MySQL 支持的复制类型


基于语句的复制(STATEMENT):在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。

  • 传输效率高,减少延迟。
  • 在从库更新不存在的记录时,语句赋值不会失败。而行复制会导致失败,从而更早发现主从之间的不一致。
  • 可能出现数据一致性问题

基于行的复制(ROW):不记录 SQL 语句上下文信息,仅保存哪条记录被修改。

  • 大量的binlog日志占用的空间大,传输带宽占用大。但是这种方式比基于语句的复制要更加精确。

混合类型的复制(MIXED):默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

2、MySQL主从复制的工作过程


搭建Mysql主从复制_mysql

主从复制原理:

1、change master to 时,ip pot user password binlog position写入到master.info进行记录

2、start slave 时,从库会启动IO线程和SQL线程

3、IO_T,读取master.info信息,获取主库信息连接主库

4、主库会生成一个准备binlog DUMP线程,来响应从库

5、IO_T根据master.info记录的binlog文件名和position号,请求主库DUMP最新日志

6、DUMP线程检查主库的binlog日志,如果有新的,TP(传送)给从从库的IO_T

7、IO_T将收到的日志存储到了TCP/IP 缓存,立即返回ACK给主库 ,主库工作完成

8、IO_T将缓存中的数据,存储到relay-log日志文件,更新master.info文件binlog 文件名和postion,IO_T工作完成

9、SQL_T读取relay-log.info文件,获取到上次执行到的relay-log的位置,作为起点,回放relay-log

10、SQL_T回放完成之后,会更新relay-log.info文件

11、relay-log会有自动清理的功能

12、主库一旦有新的日志生成,会发送“信号”给binlog dump,通知IO线程再请求

3、搭建步骤


步骤1:环境准备

在开始搭建之前,您需要准备以下环境:

  • 两台服务器(一台作为主服务器,一台作为从服务器)
  • 安装了MySQL的服务器
  • 确保主服务器可以通过网络访问从服务器

步骤2:主从服务器时间同步

yum -y install ntp

vim /etc/ntp.conf

25行左右添加
server 127.127.172.0							#设置本地是时钟源,注意修改网段
fudge 127.127.172.0 stratum 8					#设置时间层级为8(限制在15内)

service ntpd start
yum -y install ntp ntpdate

service ntpd start
/usr/sbin/ntpdate masterIP			#进行时间同步,指向Master服务器IP

crontab -e
*/30 * * * * /usr/sbin/ntpdate masterIP

步骤3:配置主服务器

1、在主服务器上打开MySQL配置文件my.cnf,并添加以下配置:

[mysqld]
log-bin=mysql-bin
server-id=1
  • log-bin:启用二进制日志记录,用于记录主服务器上的所有更改。
  • server-id:为主服务器设置唯一标识符,用于标识主服务器和从服务器。

2、systemctl restart mysqld 重启MySQL服务以使更改生效。

步骤4:创建从服务器账户

1、在主服务器上创建一个用于从服务器的账户,并授予复制权限:

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  • repl:从服务器账户的用户名。
  • password:从服务器账户的密码。

2、使用以下命令查看主服务器的二进制日志文件名和位置:

SHOW MASTER STATUS;
  • 记下File和Position的值,稍后将在从服务器上使用。

步骤5:配置从服务器

  1. 在从服务器上打开MySQL配置文件my.cnf,并添加以下配置:
    [mysqld] server-id=2
  • server-id:为从服务器设置唯一标识符,用于标识主服务器和从服务器。
  1. 重启MySQL服务以使更改生效。

步骤4:启动从服务器复制

1、在从服务器上执行以下命令,连接到主服务器:

CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS=recorded_log_position;
  • master_host_name:主服务器的IP地址或主机名。
  • password:从服务器账户的密码。
  • recorded_log_file_name:在步骤2中记录的主服务器的二进制日志文件名。
  • recorded_log_position:在步骤2中记录的主服务器的二进制日志位置。

2、启动从服务器复制:

START SLAVE;

3、使用以下命令检查从服务器复制进程是否已启动:

SHOW SLAVE STATUS\G

如果Slave_IO_Running和Slave_SQL_Running的值都为“YES”,则表示从服务器已经成功连接到主服务器并开始复制。

//如果需要停止主从服务复制的功能,使用以下命令:
stop slave;
//若搭建主从复制的过程出错,则需要清理掉之前的配置,还需要执行以下命令:
reset slave all;

4、主从延迟问题


当主库的 TPS 并发较高的时候,由于主库上面是多线程写入的,而从库的SQL线程是单线程的,导致从库SQL可能会跟不上主库的处理速度。

解决方法:

  • 网络方面:尽量保证主库和从库之间的网络稳定,延迟较小;
  • 硬件方面:从库配置更好的硬件,提升随机写的性能;
  • 配置方面:尽量使 MySQL 的操作在内存中完成,减少磁盘操作。或升级 MySQL5.7 版本使用并行复制;
  • 建构方面:在事务中尽量对主库读写,其它非事务的读在从库。消除一部分延迟带来的数据库不一致。还可以增加缓存降低一些从库的负载。

5、结论


MySQL主从复制是一种提高数据库可用性和性能的常用解决方案。本教程介绍了如何搭建MySQL主从复制,您可以根据实际情况进行调整和优化。


标签:主库,主从复制,步骤,Mysql,复制,MySQL,服务器,从库,搭建
From: https://blog.51cto.com/u_13693015/6952286

相关文章

  • 基于GPT搭建私有知识库聊天机器人(二)环境安装
    文章链接:基于GPT搭建私有知识库聊天机器人(一)实现原理基于GPT搭建私有知识库聊天机器人(三)向量数据训练基于GPT搭建私有知识库聊天机器人(四)问答实现1、需要安装的包pip3installflask//python开发web框架pip3installlangchain//LLM开发框架pip3installopenai......
  • 基于GPT搭建私有知识库聊天机器人(一)实现原理
    文章链接:基于GPT搭建私有知识库聊天机器人(二)环境安装基于GPT搭建私有知识库聊天机器人(三)向量数据训练基于GPT搭建私有知识库聊天机器人(四)问答实现1、成品演示支持微信聊天支持网页聊天支持微信语音对话支持私有知识文件训练,并针对文件提问步骤1:准备本地文件a.txt,支持pdf、txt、mark......
  • Windows搭建ELK教程
    ELK由ElasticSearch(ES)、Logstash和Kiabana三个开源工具组成 1首先下载如下:分别去https://www.elastic.co/downloads/下载上面三个windows的安装包,以为Logstash依赖ES服务,Kibana依赖Logstash和ES,所以安装和启动顺序分别为:ES->Logstash->Kibana  2安装配......
  • OceanBase数据字典视图学习与总结(MySQL模式)
    OceanBase数据库的系统视图分为字典视图和性能视图。其中字典视图就是描述数据字典的视图,OceanBase数据库的字典视图包含information_schema.*视图、oceanbase.CDB_*视图、oceanbase.DBA_*视图以及mysql.*视图。本文所涉及的版本主要为OceanBase4.1.0。information_schema......
  • 记录一下Linux下远程访问Mysql连接不上,报错The driver has not received any packets
    问题所在远程服务器已经提前安装好了MySQL,版本也是对应的。在ssh上可以正常进入MySQL数据库。但是其他地方无法连接上,例如navicat和IDE内部都发生报错。排查1.首先排查了一下远程服务器上mysql服务状态是否处于正常运行状态sudoservicemysqldstatus没有发生问题。2.检......
  • Typecho建站:腾讯云轻量应用服务器搭建博客网站教程
    腾讯云轻量应用服务器自带Typecho应用模板镜像,腾讯云提供的Typecho模板镜像是基于CentOS7.664位操作系统,并已预置Nginx、PHP、MariaDB软件程序,使用Typecho应用模板可以快速搭建博客、企业官网、电商及论坛等各类网站。腾讯云服务器网分享使用腾讯云轻量应用服务器Typecho应用模板......
  • 搭建zk,kafka环境所遇到的问题
    env:jdk1.8centos7.1zookeeper3.4.6选这版体是因为对kafka做了很多优化,修改 Q1:zk启动不了A1: ./zkServer.sh start-foreground   发现少了myid 解决 :在zk数据文件存放目录下(见$ZK/conf/zoo.cfg,dataDir属性),创建myid文件并写入一个数字用来标识本节点(类似这个节点的......
  • mysql事务和索引详解
    mysql事务和索引详解1.事务注:事务就是一组操作的集合,成功一起成功,失败一起失败事务控制:开启事务:starttransaction;/begin;提交事务:commit;回滚事务:rollback;使用方法:首先graphTBid1[开启事务]-->id2{执行mysql}id2-->|语句全部执行成功|id3>提交事务]id2-->|语......
  • 使用ELK搭建社工库
    ELK是什么东西?ELK是ElasticSearch、Logstash、Kibana三个应用的缩写。ElasticSearch简称ES,主要用来存储和检索数据。Logstash主要用来往ES中写入数据。Kibana主要用来展示数据。为什么用ELK?传统的社工库通常用MySQL数据库来进行搭建,在相当大的数据下检索效率非常低下。在这种关......
  • 如何把.net应用程序防止他人反编译,dll打包并搭建成一个合格的安装包
    背景知识:在理论上,任何.NET程序集(.dll文件或.exe文件)都可以被反编译。C#是一种托管语言,其代码编译成中间语言(IL)或称为CIL(CommonIntermediateLanguage),然后在.NET运行时中执行。反编译工具可以将IL代码还原回C#源代码,使得原本的C#代码可以被查看和修改。 最......