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所示及可证明安装成功。
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。若能够同步数据,则配置成功。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值