mysql主从架构和读写分离、以及高可用架构

本文介绍了MySQL主从架构的搭建步骤,包括配置主节点和从节点,确保主从同步成功。同时,讨论了主从架构在数据安全、读写分离和高可用性方面的应用,强调了半同步复制的重要性以防止数据丢失。此外,文章提到了常见的MySQL高可用方案,如MMM、MHA和MGR,以及分库分表在解决大数据量时的策略和面临的挑战。
摘要由CSDN通过智能技术生成

前言:
MySQL是现在互联网最常用的开源数据库产品。但是我们平常开发使用,大都是用的单机服务。而在实际生产中,往往数据量会极为庞大,并且数据的安全性要求也更高,这样单机的MySQL,不管是性能还是安全都是达不到要求的。所以在生产环境中,MySQL必须是要搭建一套主从复制的架构,同时可以基于一些工具实现高可用架构。然后,在此基础上,就可以基于一些中间件实现读写分离架构。最后如果数据量非常大,还必须可以实现分库分表的架构。

Centos7单机mysql的搭建:参考https://www.cnblogs.com/yang6/p/14021902.html

搭建mysql主从架构:
两台服务器,均安装CentOS7。
​ 1、192.168.244.137 作为mysql主节点部署
​ 2、192.168.244.138 作为mysql从节点部署
mysql版本:mysql-8.0.20

配置master主服务器
首先,配置主节点的mysql配置文件: /etc/my.cnf 这一步需要对master进行配置,主要是需要打开binlog日志,以及指定severId。我们打开MySQL主服务的my.cnf文件,在文件中一行server-id以及一个关闭域名解析的配置。然后重启服务。

[mysqld]
server-id=1
#开启binlog,设置文件名称
log_bin=master-bin
log_bin-index=master-bin.index
#只保留7天的二进制日志,以防磁盘被日志占满
expire_logs_days=7
#需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
#binlog-do-db=mytestdb
#不备份的数据库(有多个的话,配置多个binlog-ignore-db)
#binlog-ignore-db=information_schema
#binlog-ignore-db=performation_schema
#设置3306端口
port=3306
#设置mysql的安装目录
basedir=/usr/local/mysql
#设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
#允许最大连接数
max_connections=10000
#允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
#服务端使用的字符集默认为UTF8
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#sql_model 去掉ONLY_FULL_GROUP_BY
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8

配置说明:主要需要修改的是以下几个属性:
server-id:服务节点的唯一标识。需要给集群中的每个服务分配一个单独的ID。
log_bin:打开Binlog日志记录,并指定文件名。
log_bin-index:Binlog日志文件
重启MySQL服务, service mysqld restart

然后,我们需要给root用户分配一个replication slave的权限。
#登录主数据库
mysql -u root -p
GRANT REPLICATION SLAVE ON . TO ‘root’@‘%’;
flush privileges;
#查看主节点同步状态:
show master status;

在实际生产环境中,通常不会直接使用root用户,而会创建一个拥有全部权限的用户来负责主从同步

在这里插入图片描述
这个指令结果中的File和Position记录的是当前日志的binlog文件以及文件中的索引。
而后面的Binlog_Do_DB和Binlog_Ignore_DB这两个字段是表示需要记录binlog文件的库以及不需要记录binlog文件的库。目前我们没有进行配置,就表示是针对全库记录日志。这两个字段如何进行配置,会在后面进行介绍。

开启binlog后,数据库中的所有操作都会被记录到datadir当中,以一组轮询文件的方式循环记录。而指令查到的File和Position就是当前日志的文件和位置。而在后面配置从服务时,就需要通过这个File和Position通知从服务从哪个地方开始记录binLog。

在这里插入图片描述
配置slave从服务
#配置server-id,唯一ID号
server-id=2

#开启从服务器二进制日志 (从节点如果后面没有级联的从节点,binlog可以不打开,避免无谓的资源消耗)
#log_bin = mysql-bin

#[必须开启]打开Mysql中继日志,日志格式为二进制
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin

#如果salve库名称与master库名相同,使用本配置
#replicate-do-db = mytestdb

#如果master库名[artisan]与salve库名[artisan01]不同,使用以下配置[需要做映射]
#replicate-rewrite-db = artisan[主库名] -> artisan01[从库名]

#如果不是要全部同步[默认全部同步],则指定需要同步的表
#replicate-wild-do-table=artisan01.t_order
#replicate-wild-do-table=artisan01.t_order_item

#设置只读权限
read_only = 1
#使得更新的数据写进二进制日志中 这个是不是应该为 on 待确认
log_slave_updates = 1

设置3306端口

port=3306

设置mysql的安装目录

basedir=/usr/local/mysql

设置mysql数据库的数据的存放目录

datadir=/usr/local/mysql/data

允许最大连接数

max_connections=10000

允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统

max_connect_errors=10

服务端使用的字符集默认为UTF8

character-set-server=utf8

创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

默认使用“mysql_native_password”插件认证

default_authentication_plugin=mysql_native_password
#sql_model 去掉ONLY_FULL_GROUP_BY
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]

设置mysql客户端默认字符集

default-character-set=utf8
[client]

设置mysql客户端连接服务端时默认使用的端口

port=3306
default-character-set=utf8

配置说明:主要需要关注的几个属性:
server-id:服务节点的唯一标识
relay-log:打开从服务的relay-log日志。
log-bin&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值