数据库应用——MySQL主从复制和Atlas读写分离

MySQL在企业中的拓扑图

在企业网站中,后端MySQL数据库只有一台时,会有以下问题

  • 单点故障,服务不可用
  • 无法处理大量的并发数据请求
  • 数据丢失—大灾难

改造方法

  • 增加MySQL数据库服务器,对数据进行备份,形成主备
  • 确保主备MySQL数据库服务器数据是一样的
  • 主服务器宕机了,备份服务器继续工作,数据有保障

更好的解决方案

  • 通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力
    在这里插入图片描述

MySQL主从复制

MySQL主从复制的类型

  • 基于语句的复制(默认,一般都是用这种类型)

    • 在主服务器上执行的语句,从服务器执行同样的语句
  • 基于行的复制

    • 把改变的内容复制到从服务器
  • 混合类型的复制

    • 一旦发现基于语句无法精确复制时,就会采用基于行的复制

主从复制的工作过程

在这里插入图片描述

  1. 每个事务更新数据完成之前,master在二进制日志记录这些改变。写入二进制日志完成后,master通知存储引擎提交事务。
  2. slave将master的Binary log复制到其中继日志(Relay log)。首先,slave开始一个工作线程——I/O线程,I/O线程在master上打开一个普通连接,开始binlog dump process。binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志
  3. sql slave thread(sql从线程)处理该过程最后一步。sql线程从中继日志读取事件,并重放其中的事件而更新 slave的数据。使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小
  4. 复制过程中有一个重要限制,即复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作

MySQL主从复制步骤

主机 ip
主MySQL服务器 192.168.188.65
从MySQL服务器1 192.168.188.66
从MySQL服务器2 192.168.188.67

安装MySQL

我们通过二进制包安装
tar xf mysql-5.7.25-el7-x86_64.tar.gz  -C /usr/local/
mv mysql-5.7.25-el7-x86_64  mysql

groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql
chown -R mysql.mysql /usr/local/mysql

vim /etc/my.cnf

[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
server_id=1
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
prompt=mysql [\\d]>

添加环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

初始化
mysqld --initialize-insecure  --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

如果报错可以
yum install -y libaio

使用systemd管理mysql
vim /etc/systemd/system/mysqld.service 

[Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

systemctl daemon-reload
systemctl start mysqld
netstat -lnt

设置密码
mysqladmin -uroot  password '123'

登陆验证
mysql -uroot -p123 

保证三台服务器都完整安装MySQL

建立时间同步环境

在主节点上搭建时间同步服务器

安装NTP(关闭防火墙/selinux)
yum -y install ntp

配置NTP
vim /etc/ntp.conf 

# local clock
server 127.127.1.0		# 本地时间供给源
fudge  127.127.1.0 stratum 8	# 设置时区为+08区

重启服务并设置为开机启动
systemctl enable ntpd --now

在从节点上进行时间同步
yum -y install ntpdate
ntpdate 192.168.188.65

在这里插入图片描述
将时间误差缩小到0.00以下就行

配置主从复制

主节点配置
修改主节点配置
vim /etc/my.cnf

server_id = 1		# 服务器编号
log_bin = master-bin	# 开启二进制日志
log-slave-updates = true	# 开启从机复制

重启mysqld
systemctl restart mysqld
进入mysql查看二进制日志是否开启
show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

给服务器授权
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.188.%' IDENTIFIED BY '123';
刷新权限
FLUSH PRIVILEGES;

查看授权是否成功
select user,host from mysql.user
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值