MYSQL配置主从

作用

减轻数据库的负载,优化数据库性能,实现读写分离减轻单库CURD的压力,同时也具有备份数据库的作用。

主从复制分为Mater(主库)和Slave(从库),Master库主要负责, 增 删 改 操作, 由于查询操作较多,所以Slave库只负责 查询 操作,这样就实现了读写分离,很大的减轻了单个数据库的压力。

主从复制的原理

MySQL主从复制的基础是二进制日志文件(binary log file)。

Mater库必须开启binlog,当Master库发生操作,将操作记录(事件)存在binlog里。

Slave库将Mater库的binlog文件,同步到本机并记录在relay log中,

然后根据relay log记录的(事件)执行到自己的数据库,达到同步数据的效果。

在这里插入图片描述

同步过程

概念

Master有一个log dump线程,用来和Slave的I/O线程传递binlog,

当Slave (slave start)连接到Master的时候,Master机器会为Slave开启

binlog dump线程。当Master 的 binlog发生变化的时候,binlog dump

线程会通知Slave,并将相应的binlog内容发送给Slave。

Slave有两个线程,其中I/O线程用来同步Master的binlog并生成relay log,

另外一个SQL线程用来把relay log里面的sql语句落地(执行)

实现步骤

Slave 上的IO线程连接上 Master, 并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO线程根据请求信息读取指定日志指定位置之后的日志信息,

返回给 Slave 端的 IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 BinaryLog 中的位置。

Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的RelayLog文件(mysql-relay-lin.xxxxxx)的最末端,

并将读取到的Master端的bin-log的文件名和位置记录到 master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;

Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave端执行了同样的 Query,所以两端的数据是完全一样的。

1.1 确认是否符合条件

查看两个数据库,数据库的名字是否相同,是否都为jhipv1,安装位置是否相同。不同则做相应的修改。这两个服务器分为服务器A与服务器B。

1.2 新建用户

首先打开数据库命令行模式

验证

点击此处进入命令行界面,如图1.2.1所示。

点击进入命令行

输入mysql –V出现版本号,如图1.2.1所示及可证明安装成功。

验证成功

输入mysql –u root –p回车,输入jiahemk显示如图3.3.2即可表示可以打开MySQL。如果出现错误请检查环境变量和MYSQL80服务是否启动,如果服务未启动请启动程序,如果启动失败请卸载重新安装。

打开mysql

在数据库A的命令行模式中分别输入:

CREATE USER 'sync'@'服务器BIP' IDENTIFIED WITH mysql_native_password BY 'PASWORD';

GRANT REPLICATION SLAVE ON *.* TO 'sync'@'服务器BIP';

在数据库B的命令行模式中分别输入

CREATE USER 'sync'@'服务器AIP' IDENTIFIED WITH mysql_native_password BY 'PASWORD';

GRANT REPLICATION SLAVE ON *.* TO 'sync'@'服务器AIP';

大概如图所示

1.3更改配置文件

首先对配置文件进行备份

注意事项:注意用记事本打开的话,修改完成后要进行另存为选择编码为ANSI,防止编码错误服务启动不了。保存时直接覆盖原文件即可。确认在进行了备份。

1.3.1可以直接添加的部分

对配置文件进行更改,打开D:\ProgramData\MySQL\MySQL Server 8.0目录下的my.ini文件,对其进行编辑,首先找到[mysqld]节点,如图所示:

图中找到[mysqld]节点

在[mysqld]下添加几个值,分别为:

binlog_format=mixed

sync-binlog=1

binlog-do-db=jhipv1

auto-increment-increment=2

auto-increment-offset=1

#主键初始偏移量,服务器A设置为1,服务器B设置为2

replicate-do-db=jhipv1

#数据同步的数据库

relay_log=relay-bin

服务器A修改后如图所示:

服务器B修改后如图1.2.3所示:

1.3.2不可以直接添加的部分

server-id

找到[mysqld]节点下的server-id节点,并将服务器A的值改为1,服务器B的值改为2,如图所示。

log-bin

找到[mysqld]节点下的log-bin节点,并将两个服务器上此处改为

log-bin="mysql-bin"

如图所示:

max_allowed_packet:mysqlsql语句最大的长度,一般默认为4M。

找到[mysqld]节点下的max_allowed_packet节点,并将两个服务器上此处改为

max_allowed_packet=1G

如图所示:

添加group_concat_max_len

group_concat_max_len = 4294967291;

再[mysqld]节点下添加group_concat_max_len = 4294967291;默认的mysql的语句拼接最长为1024字节,当我们需要较长的拼接时需要扩大其大小。

注意事项:注意用记事本打开的话,修改完成后要进行另存为选择编码为ANSI,防止编码错误服务启动不了。保存时直接覆盖原文件即可。确认在1.2进行了备份。

1.4重启服务

进入服务,找到MySQL80服务,点击重启,如果重启失败则查看配置文件修改是否有问题,例如“"”是否是中文格式,如果是中文格式,请改正。

设置slave_pending_jobs_size_max,重启后进入mysql命令端或者Navicat设置。

set global slave_pending_jobs_size_max=2147483648;

默认的传输文件大小在我们更改最大传输大小后太小,需要增加。

1.5继续进行主主配置

在两台服务器上进入命令行模式,输入

SHOW MASTER STATUS\G;

根据File: mysql-bin.000021和Position: 982820038可知:当前写的二进制日志文件名称和位置是mysql-bin. 000021: 982820038,在文件mysql-bin.000021中有“end_log_pos 982820038”的地方就是这个位置

1.6配置主主服务

接着上一步的做,在命令行上输入“

CHANGE MASTER TO MASTER_HOST=‘另一个服务器的IP’,MASTER_USER=‘sync’,MASTER_PASSWORD=‘password’,MASTER_LOG_FILE=‘另一个服务器输出的File的值’,MASTER_LOG_POS=另一个服务器输出的Position的值;”

(File的值和Position的值是1.5中SHOW MASTER STATUS\G运行得出)

在两个服务器上分别打出“start slave;”

在两个服务器上分别打出“show slave status\G”。

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.10.118.25

Master_User: mysync

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000023

Read_Master_Log_Pos: 39913

Relay_Log_File: mysql-relay-bin.000031

Relay_Log_Pos: 40059

Relay_Master_Log_File: mysql-bin.000023

Slave_IO_Running: Yes #Yes表示io_thread的和主库连接正常并能实施复制工作,No则说明与主库通讯异常,多数情况是由主从间网络引起的问题;

Slave_SQL_Running: Yes #具体就是语句是否执行通过,常会遇到主键重复或是某个表不存在。

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table: mysql.%,test.%,information_schema.%

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 39913

Relay_Log_Space: 40361

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0 #判断主动同步延时的参考值,是通过比较sql_thread执行的event的timestamp和io_thread复制好的event的timestamp(简写为ts)进行比较,而得到的这么一个差值;

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 18

1 row in set (0.00 sec)

ERROR:

No query specified

mysql>

如果出现不是两个yes请卸载数据库重新安装。

1.7验证配置主主服务成功

在服务器A上添加表或数据查看是否能同步到服务器B,同理在服务器B上添加数据查看是否能够同步到服务器A。若能够同步数据,则配置成功。

mysql 主表 从表,MYSQL主主从设置相关推荐

  1. mysql查看当前表字符集_mysql 字符集设置查看

    1.列出MYSQL支持的所有字符集: SHOW CHARACTER SET; 2.当前MYSQL服务器字符集设置 SHOW VARIABLES LIKE 'character_set_%'; 3.当前 ...

  2. MySQL 获取物理表的主键字段

    参考代码: 1 /** 2 * 获取主键字段 3 * @param $table 4 * @param $database 5 * @return mixed 6 */ 7 public functi ...

  3. mysql宠物种类表,mysql中的表操作

    ------------恢复内容开始------------ 创建数据库 create database 数据库名 切换数据库 use 数据库名 建表: create table 表名 ( 字段名1, ...

  4. mysql建立司机表,MYSQL进阶,生手变司机

    MYSQL进阶,新手变司机 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 1 S ...

  5. mysql set 子表,mysql update set 更新表数据

    1.update ...set...where... 题目:修改students id=2的name为"yanxia" mysql>update  students  set ...

  6. mysql中工资表,MySQL操作工资表,获取累计工资和月平均工资

    根据一个实际的需求案例,描述一下:如何在工资条中添加获取累计工资[字段]和月平均工资[字段] 这个需求存在一个前后端分离的微服务EHR项目中,通过两个SQL语句来实现.业务逻辑:前端调用一个接口,返回 ...

  7. mysql 存储过程新增表,mysql实例 存储过程中向表中添加数据

    摘要 腾兴网为您分享:mysql实例 存储过程中向表中添加数据,信和财富,视达网,人人视频,企商理财等软件知识,以及电视猫,office2000,贵阳银行,搜电共享充电宝,雅图电影院,达达跑腿,万圣节 ...

  8. mysql 动态 建表,mysql数据库动态创建表的实例分享

    摘要 腾兴网为您分享:mysql数据库动态创建表的实例分享,易视云3,完美root,刷机大师,手游宝等软件知识,以及清仓兔,找明星,爱普生1500w,txt完结小说全本软件,windows自带画图软件 ...

  9. mysql搜索所有表,mySQL查询来搜索数据库中的所有表以查找字符串?

    Is there a mySQL query to search all tables within a database? If not can you search all tables with ...

最新文章

  1. 鸟哥的私房菜 第0章
  2. C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)
  3. 深度学习pytorch--线性回归(一)
  4. pandas.read_csv参数详解
  5. 使用CreateThread函数创建线程
  6. 【Gym - 101196F】Removal Game (环形区间dp,环状,细节优化)
  7. torchvision包的主要构成
  8. python无限循环语句的代码_如何在Python中实现非阻塞无限循环
  9. PHP中的Array类型其实是Hashtable
  10. 未来的云计算基础设施长什么样?
  11. 深入浅出通信原理知识点10
  12. Google技巧:crack web sites
  13. iOS 指纹识别/人脸识别登录(ECDSA 加签)
  14. 科技赋能时代 用ocr身份证识别
  15. Python 3程序开发指南 (第二版) 中文PDF下载 Programming in Python 3, 2rd Ed - Python - 大家论坛 -...
  16. Vue · 导航守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave
  17. 延时调用的时候要注意
  18. html外链怎么做,外链铺广之路如何走?外链实操战术整理
  19. iOS之Swift实现二维码扫描
  20. 刚构桥的优缺点_桥梁钢结构特点及优缺点

热门文章

  1. php自动修图,PS顶级修图插件,专业人像修图只需一键
  2. 生物质燃料检测仪器解析 生物质燃料检测设备资讯
  3. 数据猿·金猿榜丨2017中国医疗大数据领域最具潜力创业公司
  4. pyecharts可视化——地图
  5. EAGLE初体验--SparkFun上学习--PCB画板
  6. 论文笔记之:Playing Atari with Deep Reinforcement Learning
  7. 【论文阅读】CAFE: Catastrophic Data Leakage in Vertical Federated Learning
  8. 最短路径--Dijkstra(狄克斯特拉)算法
  9. 基于java+jsp+ssm餐饮管理系统-计算机毕业设计
  10. 万能数据导出Excel