MySQL主从复制虽好,能完美解决数据库单点问题吗?

MySQL主从复制虽好,能完美解决数据库单点问题吗?一、单个数据库服务器的缺点 数据库服务器存在单点问题; 数据库服务器资源无法满足增长的读写请求; 高峰时数据库连接数经常超过上限。 二、如何解决单点问题 增加额外的数据库服务器,组建数据库集群; 同…

MySQL主从复制虽好,能完美解决数据库单点问题吗?

MySQL主从复制虽好,能完美解决数据库单点问题吗?

 

一、单个数据库服务器的缺点

  • 数据库服务器存在单点问题;
  • 数据库服务器资源无法满足增长的读写请求;
  • 高峰时数据库连接数经常超过上限。

 

二、如何解决单点问题

  • 增加额外的数据库服务器,组建数据库集群;
  • 同一集群中的数据库服务器需要具有相同的数据;
  • 集群中的任一服务器宕机后,其它服务器可以取代宕机服务器。

 

三、MySQL主从复制架构

1、主库将变更写入到主库的binlog中

  • 一些MySQL版本并不会开启二进制日志,所以一定要检查是否开启;
  • 如果刚开始没有开启,后面再进行开启的话,需要重启数据库才能生效,而且数据库的重启往往会对业务造成很大的影响;
  • 尽管二进制日志对性能有稍许的影响,所以还是建议大家无论是否使用复制功能,都要开启MySQL二进制日志,因为增量备份也需要二进制日志。

2、从库的IO线程在指定位置读取主库binlog内容存储到本地的中继日志(Relay Log)中

要完成二进制日志的传输过程,MySQL会在从服务器上启动一个工作线程,称为IO线程,这个IO线程会跟主数据库建立一个普通的客户端连接,然后在主服务器上启动一个特殊的二进制转储线程称为binlogdown线程。

从库上的IO线程通过这个二进制转储线程来读取主库上的二进制事件,如果该事件追赶上主库,则会进入sleep状态,直到主库发起信号通知有新事件产生时,才会被唤醒,relay log的格式和binlog格式是完全相同的,

可以使用mysqlbinlog来读取relay log中的内容。

3、从库的SQL线程读取Relay Log日志中的内容,并在从库中重放

SQL线程所执行的事件,我们可以通过配置选项来决定是否要写入到从服务器的二进制日志中。

目前MySQL支持两种复制类型:

  • 基于二进制日志点的复制
  • 基于GTID的复制(MySQL>=5.7推荐使用)

 

四、MySQL主从配置步骤

1、配置主从数据库服务器参数

有些参数配置后需要数据库重启才能生效,为了不影响数据库的正常使用,我们最好在服务器上线的同时就把参数都配置好。特别是master服务器的参数,更应该作为服务器初始参数来进行配置。

master服务器:

v2-d636421890b4b6a6fccf1a70f7987582_720w.jpg

slave 服务器:

v2-ad7789d40f820fb7c737ccd405cc28dd_720w.jpg

2、在master服务器上创建用于复制的数据库账号

用于IO线程连接master服务器获取binlog日志,需要* REPLICATION SLAVE** 权限:

create user "repl"@"ip段" identified by "password";
grant replication slave on *.* to "repl"@"ip段";

代码100分

3、备份master服务器上的数据并初始化slave服务器数据

  • 建议主从数据库服务器采用相同的MySQL版本;
  • 建议使用全库备份的方式初始化slave数据。

采用相同版本的好处:

  • 我们可以使用全备的方式来初始化slave数据,还可以避免不同版本之间的差异造成数据库同步失败的问题。
  • 如果我们使用的主从复制的服务器MySQL版本不同,则一定要注意master上的版本一定要低于slave服务器,不然同步的时候就可能出现错误。

由于我们演示过程中的MySQL服务器都是使用的MySQL5.7,所以我们可以使用全备的方式进行:

代码100分mysqldump --master-data=2 -uroot -p -A --single-transaction -R --triggers

4、启动基于日志点的复制链路

在slave服务器上运行,MySQL命令:

CHANGE MASTER TO

MASTER_HOST= "master_host_ip",

MASTER_USER= "repl",

MASTER_PASSWORD = "password",

MASTER_LOG_FILE="mysql_log_file_name",

MASTER_LOG_POS=xxxxxx;

5、启动基于GTID的复制链路

GTID:全局事务ID,GTID可以保证每一个在主上提交的事务,在复制集群中可以生成一个唯一的ID值,要使用基于GTID的复制,我们要在主从复制的配置文件中同时加入以下配置项。

MySQL配置:

代码100分gtid_mode=on 
# 是否启动gtid模式,启动了此模式会在二进制日志中会额外记录每个事务的GTID标识符

enforce-gtid-consistency 
# 强制gtid一致性,用于保证启动gtid后事务的安全

log-slave-updates = on 
# mysql5.6一定要启用参数,5.7可以不启用

MySQL命令:

CHANGE MASTER TO

MASTER_HOST= "master_host_ip",

MASTER_USER= "repl",

MASTER_PASSWORD = "password",

MASTER_AUTO_POSITION=1;

GTID复制的限制:

  • 无法再使用create table … select语句建立表,只能先create表,再insert数据;
  • 无法在事务中使用create temporary table建立临时表;
  • 无法使用关联更新同时更新事务表和非事务表。

4和5中选一个执行即可。

 

五. MySQL主从复制演示

1. 先对主服务器进行配置

v2-a3e43c3ba3ca0b23876b767376c0caf1_720w.jpg

由于主服务器一直在运行着,在生产环境中主服务器是很少会重启的,如果主服务器重启,会造成正常的业务访问的中断,所以在服务器启动之前就启动了二进制日志。

这里不需要重启主服务器了,由于主服务器的默认server_id=1,我们虽然在配置文件中更改了它的值 ,但实际运行环境中并没有改变。

我们可以查看一下当前server_id:

mysql> show variables like "%server_id%";

可以通过以下命令动态的进行修改:

mysql> set global server_id = 100;

2. 再对从服务器进行配置

 

v2-a049511d0191c4f0a59e895a1d4bfe5d_720w.jpg

修改完从服务器配置后,重启MySQL服务器。如果使用的是MySQL5.7版本的需要注意:

  • MySQL5.7增加了server-uuid值,默认情况下载auto.cnf文件中,如果是使用的镜像的方式安装,可能大家的uuid一样 ,所以需要把auto.cnf文件删除掉。MySQL重启后会自动重新生成uuid的值,这样就可以保证不同服务器上的MySQL实例的uuid的值是不一样的;
  • 如果server-uuid的值相同,主从复制会出现问题。

以上我们就完成了主从复制的配置,接下来我们要在主服务器上建立复制账号。

3. 在MySQL主服务器上建立MySQL复制账号

mysql> create user "dba_repl"@"192.168.3.%" identified by "123456";

mysql> grant replication slave on *.* to "dba_repl"@"192.168.3.%";

4. 建立好复制账号以后,通过mysql主服务器上的全备初始化从服务器上数据

进行全备:

[root@localhost data]# cd /data/db_backup/

[root@localhost db_backup]# mysqldump -uroot -p --master-data=1 --single-transaction --routines --triggers --events --all-databases > all.sql

Enter password:

将其拷贝到从服务器上:

[root@localhost db_backup]# scp all.sql root@192.168.3.101:/root

在从服务器上恢复备份进行初始化:

[root@Node2 ~]# mysql -uroot -p < all.sql

初始化完成后,准备。

5. 从服务器进行基于日志点的复制链路的配置

mysql> change master to 
master_host="192.168.3.100",
master_user="dba_repl",
master_password="123456",
MASTER_LOG_FILE="mysql-bin.000017",
MASTER_LOG_POS=663;

MASTER_LOG_FILE和MASTER_LOG_POS的值从全备文件中的CHANGE MASTER中获取

以上复制链路的配置完成。

启动slave:

mysql> start slave;

检查是否启动成功状态:

mysql> show slave status G

显示:

Relay_Master_Log_File: mysql-bin.000017

Slave_IO_Running:Yes

Slave_SQL_Running: Yes

说明启动成功了,可以在主服务器上插入数据,在从服务上查看数据是否同步过来了。

 

六. 主从复制的一些缺点

虽然主从复制增加了一个数据库副本,但从数据库和主数据库的数据最终会是一致的。之所以说是最终一致,因为MySQL复制是异步的,正常情况下主从复制数据之间会有一个微小的延迟。

通过这个数据库副本看似解决了数据库单点问题,但并不完美:因为这种架构下,如果主服务器宕机,需要手动切换从服务器,业务中断不能忍受,不能满足应用高可用的要求。

 

MySQL主从复制虽好,能完美解决数据库单点问题吗?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7153.html

(0)
上一篇 2023-03-26
下一篇 2023-03-26

相关推荐

  • 使用JavaScript移除字符串末尾字符的简单方法

    使用JavaScript移除字符串末尾字符的简单方法JavaScript中的字符串有一个名为 codeslice()/code 的方法,该方法可以从字符串中提取指定的部分,并将其作为新的字符串返回。当 codeslice()/code 方法只有一个参数时,它将返回从该参数开始到字符串末尾的所有字符。

    2024-05-29
    60
  • 翻译|是否应该在 Kubernetes 上运行数据库?

    翻译|是否应该在 Kubernetes 上运行数据库?数据库如何在 Kubernetes 上运行?如果可以,哪些类型的数据库和数据最适合使用 K8s?让我们一起来看看。 Kubernetes 是用于自动部署、扩展和管理容器化应用程序的一个开源的容器编排解

    2023-06-01
    149
  • redis妙用_生活小诀窍

    redis妙用_生活小诀窍Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路。 随之而来的一系列最佳实践,使得大多数人可以正确地

    2023-02-15
    154
  • MySQL慢日志查询分析方法与工具

    MySQL慢日志查询分析方法与工具MySQL中的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志。 1)通用查询日志:记录建立的客户端连接和执行的语句。 2)慢…

    2023-02-06
    145
  • mysql聚合函数有哪些_聚合函数不能和什么一起用

    mysql聚合函数有哪些_聚合函数不能和什么一起用聚合函数 max() 最大值 min() 最小值 avg() 平均值 sum() 求和 count() 符合条件数据的数目 聚合函数不能嵌套使用 显示表中符合条件的信息数目,不考虑某字段出现null值

    2022-12-21
    147
  • 用Python开发网站后端和数据科学

    用Python开发网站后端和数据科学a href=”https://www.python100.com/a/sm.html”font color=”red”免责声明/font/a a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2023-12-21
    115
  • MySQL学习笔记(27):备份与恢复

    MySQL学习笔记(27):备份与恢复本文更新于2020-05-03,使用MySQL 5.7,操作系统为Deepin 15.4。 MySQL的备份分为逻辑备份和物理备份,物理备份分为冷备份和热备份。恢复分为完全恢复和不完全恢复,不完全恢复

    2023-03-29
    160
  • DDM实践系列丨分布式数据库中间件使用经验分享

    DDM实践系列丨分布式数据库中间件使用经验分享最近公司新项目使用了华为云的DDM分布式数据库中间件服务,通过一段的时间的使用感觉还不错。近段时间发现有许多小伙伴也准备去使用这个服务,所以为大家分享一下使用创建DDM服务的经验,帮助小伙伴们少走弯…

    2023-04-06
    149

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注