IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 数据库读写分离,主从同步 -> 正文阅读

[系统运维]数据库读写分离,主从同步

  • 前言

随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,而且一般的系统“读”的压力远远大于“写”,因此我们可以通过实现数据库的读写分离来提高系统的性能。

  • 实现思路

通过设置主从数据库实现读写分离,主数据库负责“写操作”,从数据库负责“读操作”,根据压力情况,从数据库可以部署多个提高“读”的速度,借此来提高系统总体的性能。

  • 基础知识

要实现读写分离,就要解决主从数据库数据同步的问题,在主数据库写入数据后要保证从数据库的数据也要更新

在这里插入图片描述

主服务器master记录数据库操作日志到Binary log,从服务器开启i/o线程将二进制日志记录的操作同步到relay log(存在从服务器的缓存中),另外sql线程将relay log日志记录的操作在从服务器执行。
记住这张图,接下来基于这个图实际设置主从数据库

主从数据库设置的具体步骤

  • 打开mysql数据库配置文件

vim /etc/my.cnf

  • 在主服务器master上配置开启Binary log,主要是在[mysqld]下面添加:

server-id=1
log-bin=master-bin
log-bin-index=master-bin.index

  • 重启mysql服务

service mysqld restart

  • 检查配置效果,进入主数据库并执行

mysql> SHOW MASTER STATUS;
这里的 File 和 Position 在从数据库配置会用到

  • 配置从服务器的 my.cnf

server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin

  • 重启从数据库

接下来配置两个数据库的关联

  • 主数据库创建用户:

mysql> create user repl;
mysql> GRANT REPLICATION SLAVE ON . TO ‘repl’@‘从xxx.xxx.xxx.xx’ IDENTIFIED BY ‘mysql’;
mysql> flush privileges;

这个配置的含义就是创建了一个数据库用户repl,密码是mysql, 在从服务器使用repl这个账号和主服务器连接的时候,就赋予其REPLICATION SLAVE的权限, . 表面这个权限是针对主库的所有表的,其中xxx就是从服务器的ip地址。

  • 进入从数据库后执行:

mysql> change master to master_host=‘主xxx.xxx.xxx.xx’,master_port=3306,master_user=‘repl’,master_password=‘mysql’,master_log_file=‘master-bin.000001(上面主库中File)’,master_log_pos=0(上面主库中Position);

  • 执行start slave启动配置

mysql> start slave;

  • 查看状态命令

mysql> show slave status \G;

  • 可以看到状态如下:
    在这里插入图片描述

这里看到从数据库已经在等待主库的消息了,接下来在主库的操作,在从库都会执行了。我们可以主库负责写,从库负责读(不要在从库进行写操作),达到读写分离的效果。

  • 测试:

在主数据库中创建一个新的数据库:
mysql> create database testsplit;

在从数据库查看数据库:
mysql> show databases;

可以看到从数据库也有testsplit这张表了,这里就不上图了,亲测可用。在主数据库插入数据,从数据库也可以查到。
至此已经实现了数据库主从同步

  • 遇到的问题:

错误1:
mysql同步复制报Slave can not handle replication events with the checksum that master 错误
同步的时候报错了:
Slave_IO_Running: No
Slave_SQL_Running: Yes
解决:
在master1中设置binlog_checksum =none;
重启mysql
重新查询master状态,show master status\G;
set global binlog_checksum=‘NONE’;
show variables like ‘%checksum%’;
添加 my.cnf 配置文件中添加如下设置,下次重启就可以不用做步骤1,直接生效了。
binlog_checksum=NONE
重新查询master状态:show master status\G;

错误2:
Last_IO_Errno: 1593
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work
解决:
1.查看/etc/my.cnf中server-id=1是否一致,如果一致需要修改; show variables like ‘server_id’;
2.查看/www/server/auto.cnf(这是我服务器目录)中,service-uuid是否一致,如果一致需要删除从库的,这个文件中的是自己生成,不需要自己去修改。

错误3:
主从同步遇到 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log…
解决:
1.打开主服务器,进入mysql
2.执行flush logs;//这时主服务器会重新创建一个binlog文件;
3.在主服务上执行SHOW MASTER STATUS;;显示:File 和 Position
4.来到从服务器的mysql;
5.stop slave;
6.change master to master_log_file=‘mysql-bin.000012’,master_log_pos=154;//这里的file和pos都是上面主服务器master显示的。
7.start slave;//这时候就应可以了
8.show slave status \G;

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:41:54  更:2021-10-28 12:42:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:59:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码