mysql 主表 从表,MYSQL主主从设置
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主主从设置相关推荐
- mysql查看当前表字符集_mysql 字符集设置查看
1.列出MYSQL支持的所有字符集: SHOW CHARACTER SET; 2.当前MYSQL服务器字符集设置 SHOW VARIABLES LIKE 'character_set_%'; 3.当前 ...
- MySQL 获取物理表的主键字段
参考代码: 1 /** 2 * 获取主键字段 3 * @param $table 4 * @param $database 5 * @return mixed 6 */ 7 public functi ...
- mysql宠物种类表,mysql中的表操作
------------恢复内容开始------------ 创建数据库 create database 数据库名 切换数据库 use 数据库名 建表: create table 表名 ( 字段名1, ...
- mysql建立司机表,MYSQL进阶,生手变司机
MYSQL进阶,新手变司机 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 1 S ...
- mysql set 子表,mysql update set 更新表数据
1.update ...set...where... 题目:修改students id=2的name为"yanxia" mysql>update students set ...
- mysql中工资表,MySQL操作工资表,获取累计工资和月平均工资
根据一个实际的需求案例,描述一下:如何在工资条中添加获取累计工资[字段]和月平均工资[字段] 这个需求存在一个前后端分离的微服务EHR项目中,通过两个SQL语句来实现.业务逻辑:前端调用一个接口,返回 ...
- mysql 存储过程新增表,mysql实例 存储过程中向表中添加数据
摘要 腾兴网为您分享:mysql实例 存储过程中向表中添加数据,信和财富,视达网,人人视频,企商理财等软件知识,以及电视猫,office2000,贵阳银行,搜电共享充电宝,雅图电影院,达达跑腿,万圣节 ...
- mysql 动态 建表,mysql数据库动态创建表的实例分享
摘要 腾兴网为您分享:mysql数据库动态创建表的实例分享,易视云3,完美root,刷机大师,手游宝等软件知识,以及清仓兔,找明星,爱普生1500w,txt完结小说全本软件,windows自带画图软件 ...
- mysql搜索所有表,mySQL查询来搜索数据库中的所有表以查找字符串?
Is there a mySQL query to search all tables within a database? If not can you search all tables with ...
最新文章
- 鸟哥的私房菜 第0章
- C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)
- 深度学习pytorch--线性回归(一)
- pandas.read_csv参数详解
- 使用CreateThread函数创建线程
- 【Gym - 101196F】Removal Game (环形区间dp,环状,细节优化)
- torchvision包的主要构成
- python无限循环语句的代码_如何在Python中实现非阻塞无限循环
- PHP中的Array类型其实是Hashtable
- 未来的云计算基础设施长什么样?
- 深入浅出通信原理知识点10
- Google技巧:crack web sites
- iOS 指纹识别/人脸识别登录(ECDSA 加签)
- 科技赋能时代 用ocr身份证识别
- Python 3程序开发指南 (第二版) 中文PDF下载 Programming in Python 3, 2rd Ed - Python - 大家论坛 -...
- Vue · 导航守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave
- 延时调用的时候要注意
- html外链怎么做,外链铺广之路如何走?外链实操战术整理
- iOS之Swift实现二维码扫描
- 刚构桥的优缺点_桥梁钢结构特点及优缺点
热门文章
- php自动修图,PS顶级修图插件,专业人像修图只需一键
- 生物质燃料检测仪器解析 生物质燃料检测设备资讯
- 数据猿·金猿榜丨2017中国医疗大数据领域最具潜力创业公司
- pyecharts可视化——地图
- EAGLE初体验--SparkFun上学习--PCB画板
- 论文笔记之:Playing Atari with Deep Reinforcement Learning
- 【论文阅读】CAFE: Catastrophic Data Leakage in Vertical Federated Learning
- 最短路径--Dijkstra(狄克斯特拉)算法
- 基于java+jsp+ssm餐饮管理系统-计算机毕业设计
- 万能数据导出Excel