Mysql集群技术

mysql的主从复制

配置mastesr

#设置主机的id
[root@mysql-node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=10
[root@mysql-node1 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 
 
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=20
[root@mysql-node2 ~]# /etc/init.d/mysqld restart
Shutting down MySQL. SUCCESS! 
Starting MySQL. SUCCESS! 
 
#开启二进制日志
[root@mysql-node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=10
log-bin=mysql-bin
[root@mysql-node1 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS!
 
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=20
log-bin=mysql-bin
[root@mysql-node2 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS!
 
#登录mysql
[root@mysql-node1 ~]# mysql -u root -predhat
#创建一个用户
mysql> CREATE USER rep1@'%' IDENTIFIED BY 'haha';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT REPLICATION SLAVE ON *.* TO rep1@'%';
Query OK, 0 rows affected (0.00 sec)
 
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      595 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

在这里插入图片描述
配置salve

[root@mysql-node2 ~]# mysql -u root -predhat
#注意: master_log_file='mysql-bin.000001'和master_log_pos=1252为node1的mysql中的show master status;的数值
mysql> change master to master_host='172.25.254.10',master_user='rep1',master_password='haha',master_log_file='mysql-bin.000001',master_log_pos=1252;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
 
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.25.254.10
                  Master_User: rep1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1252
               Relay_Log_File: mysql-node2-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1252
              Relay_Log_Space: 533
              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
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: 10
                  Master_UUID: 5ac2d97c-602f-11ef-bb8a-000c29fe3a1f
             Master_Info_File: /data/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)
 
ERROR: 
No query specified

在这里插入图片描述
测试:

#node1
mysql> CREATE DATABASE lee;
Query OK, 1 row affected (0.00 sec)
 
mysql> CREATE TABLE lee.userlist (
    -> username varchar(20) not null,
    -> password varchar(50) not null
    -> );
Query OK, 0 rows affected (0.00 sec)
 
mysql> INSERT INTO lee.userlist VALUE ('lee','123');
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT * FROM lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| lee      | 123      |
+----------+----------+
1 row in set (0.00 sec)
 
 
#node2测试
mysql> SELECT * FROM lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| lee      | 123      |
+----------+----------+
1 row in set (0.01 sec)
 

在这里插入图片描述

在这里插入图片描述
当有数据时添加slave2

创建第三个mysql
node1传输文件:

[root@mysql-node1 ~]# rsync -al /usr/local/mysql root@172.25.254.30:/usr/local

node3

[root@mysql-node3 mysql]# useradd -s /sbin/nologin -M mysql
#创建mysql的数据目录
[root@mysql-node3 ~]# mkdir /data/mysql -p
[root@mysql-node3 ~]# chown mysql.mysql -R /data/mysql
 
#生成启动脚本
[root@mysql-node3 ~]# cd  /usr/local/mysql/support-files/
[root@mysql-node3 support-files]# cp mysql.server /etc/init.d/mysqld
 
#生成配置文件
[root@mysql-node3 support-files]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql               #指定数据目录
socket=/data/mysql/mysql.sock     #指定套接字
symbolic-links=0                  #数据只能存放到数据目录中,禁止链接到数据目录
 
#修改环境变量
[root@mysql-node3 support-files]# vim ~/.bash_profile 
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
[root@mysql-node3 support-files]# source ~/.bash_profile
 
#数据库初始化建立mysql基本数据
[root@mysql-node3 support-files]# mysqld --initialize --user=mysql
#会出现mysql的密码保存一下
 
#启动
[root@mysql-node3 support-files]#/etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/mysql-node1.err'.
 SUCCESS! 
#开机自启动
[root@mysql-node3 support-files]# chkconfig mysqld on
[root@mysql-node3 support-files]# chkconfig --list
 
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 
 
      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。
 
mysqld         	0:关	1:关	2:开	3:开	4:开	5:开	6:关
netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关
network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关
rhnsd          	0:关	1:关	2:开	3:开	4:开	5:开	6:关
 
#数据库安全初始化
#刚才保存的密码
[root@mysql-node3 support-files]# cat /root/passwd 
RSx(k=YcK8M0
[root@mysql-node3 support-files]# mysql_secure_installation
 
Securing the MySQL server deployment.
 
Enter password for user root:     #输入当前密码
 
The existing password for the user account root has expired. Please set a new password.
 
New password:       #输入新密码
 
Re-enter new password:     #重复密码
 
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
 
Press y|Y for Yes, any other key for No: no      #是否启用密码插件
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : no   #是否要重置密码
 
 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
 
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
 
 
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
 
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
 
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
 
 
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.
 
 - Removing privileges on test database...
Success.
 
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
 
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y    
Success.
 
All done! 
 
 
#测试
[root@mysql-node3 support-files]# mysql -uroot -predhat
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.44 Source distribution
 
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
 
mysql> 
 

延迟复制

延迟复制时用来控制sql线程的,和i/o线程无关

这个延迟复制不是i/o线程过段时间来复制,i/o是正常工作的

是日志已经保存在slave端了,那个sql要等多久进行回放

当master端误差做,可以在slave端进行数据备份

在从20上面添加延时
在这里插入图片描述
在主上添加数据
在这里插入图片描述
过了时间后,从显示数据
在这里插入图片描述

慢查询日志

  • 慢查询,顾名思义,执行很慢的查询
  • 当执行SQL超过long_query_time参数设定的时间阈值(默认10s)时,就被认为是慢查询,这个SQL语句就是需要优化的
  • 慢查询被记录在慢查询日志里
  • 慢查询日志默认是不开启的
  • 如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。

在主服务器上配置开启功能
在这里插入图片描述
测试
在这里插入图片描述
查看日志:
在这里插入图片描述

mysql的并行复制

  • 默认情况下slave中使用的是sql单线程回放
  • 在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重
  • 开启MySQL的多线程回放可以解决上述问题

在 slaves中设定,修改gtid,并添加配置

[root@mysql2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=2
gtid_mode=ON
enforce-gtid-consistency=ON
slave-parallel-type=LOGICAL_CLOCK #基于组提交,
slave-parallel-workers=16 		 #开启线程数量
master_info_repository=TABLE	 #master信息在表中记录,默认记录
在/data/mysql//master.info
relay_log_info_repository=TABLE  #回放日志信息在表中记录,默认记录
在/data/mysql/relay-log.info
relay_log_recovery=ON 			 #日志回放恢复功能开启
[root@mysql2 ~]# /etc/init.d/mysql start
Starting MySQL. SUCCESS!

在这里插入图片描述
测试:此时 sql 线程转化为协调线程, 16 个 worker 负责处理 sql 协调线程发送过来的处理请求
在这里插入图片描述

注意:MySQL 组提交( Group commit )是一个性能优化特性,它允许在一个事务日志同步操作中将多个事务的日志记录一起写入。这样做可以减少磁盘 I/O 的次数,从而提高数据库的整体性能。

半同步模式

模型原理:
在这里插入图片描述

  1. 用户线程写入完成后master中的dump会把日志推送到slave端
  2. slave中的io线程接收后保存到relaylog中继日志
  3. 保存完成后slave向master端返回ack
  4. 在未接受到slave的ack时master端时不做提交的,一直处于等待当收到ack后提交到存储引擎
  5. 在5.6版本中用到的时after_commit模式,after_commit模式时先提交在等待ack返回后输出ok

gtid模式

当为启用gtid时我们要考虑的问题

  • 在master端的写入时多用户读写,在slave端的复制时单线程日志回放,所以slave端一定会延迟与master端

  • 这种延迟在slave端的延迟可能会不一致,当master挂掉后slave接管,一般会挑选一个和master延迟日志最接近的充当新的master

  • 那么为接管master的主机继续充当slave角色并会指向到新的master上,作为其slave

  • 这时候按照之前的配置我们需要知道新的master上的pos的id,但是我们无法确定新的master和slave之间差多少
    在这里插入图片描述
    激活gitd后

  • 当master出现问题后,slave2和master的数据最接近,会被作为新的master

  • slave1指向新的master,但是他不会去检测新的master的pos id,只需要继续读取自己gtid_next即可

在主数据库上设置gtid模式
在这里插入图片描述
在20.30上添加
在这里插入图片描述
在这里插入图片描述
重启查看日志
开启 slave 端的 gtid

CHANGE MASTER TO MASTER_HOST='172.25.254.10',MASTER_USER='repl', 
MASTER_PASSWORD='123456', MASTER_AUTO_POSITION=1; 

在这里插入图片描述

启用半同步模式

在master端配置启用半同步模式:
要在配置文件/etc/my.cnf 里面添加rpl_semi_sync_master_enabled=1 目的是开启半同步功能

在主数据库安装插件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开启slave的半同步模式
要在配置文件/etc/my.cnf 里面添加
rpl_semi_sync_master_enabled=1 目的开启半同步功能

Query OK, 0 rows affected (0.01 sec)
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
Query OK, 0 rows affected (0.00 sec)
mysql> STOP SLAVE IO_THREAD; #重启io线程,半同步才能生效
Query OK, 0 rows affected (0.00 sec)
mysql> START SLAVE IO_THREAD; ##重启io线程,半同步才能生效
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.01 sec)
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.00 sec)

测试:

  • 当两台slave线程关了,主上面添加数据不会成功,只有当slave上start了之后就会再添加成功
    当slave没有停止,数据添加迅速
    在这里插入图片描述
    在slave上停止,不会写入
    在这里插入图片描述
    出现10s超时,变成异步模式
    在这里插入图片描述
    在这里插入图片描述

mysql高可用之组复制 (MGR)

组复制流程
在这里插入图片描述
首先我们将多个节点共同组成一个复制组,在执行读写(RW)事务的时候,需要通过一致性协议层(Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里“大多数人”(对应 Node 节点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1),这样才可以进行提交,而不是原发起方一个说了算。而针对只读(RO)事务则不需要经过组内同意,直接 提交 即可
节点数量不能超过9台

single-primary mode(单写或单主模式)
单写模式 group 内只有一台节点可写可读,其他节点只可以读。当主服务器失败时,会自动选择新的主服务器,
在这里插入图片描述
multi-primary mode(多写或多主模式)
组内的所有机器都是 primary 节点,同时可以进行读写操作,并且数据是最终一致的。

实现mysql组复制

主修改

[root@mysql-node10 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=1 #配置server唯一标识号
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #禁用指定存储引擎
gtid_mode=ON #启用全局事件标识
enforce_gtid_consistency=ON #强制gtid一致
master_info_repository=TABLE #复制事件数据到表中而不记录在数据目录中
relay_log_info_repository=TABLE
binlog_checksum=NONE #禁止对二进制日志校验
log_slave_updates=ON #打开数据库中继,
#当slave中sql线程读取日志后也会写入到自己的binlog中
log_bin=binlog #重新指定log名称
binlog_format=ROW #使用行日志格式
plugin_load_add='group_replication.so' #加载组复制插件
transaction_write_set_extraction=XXHASH64 #把每个事件编码为加密散列
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #通知插件正式加入
#或创建的组名
#名称为
uuid格式
group_replication_start_on_boot=off #在server启动时不自动启动组复制
group_replication_local_address="172.25.254.10:33061" #指定插件接受其他成员的信息端group_replication_group_seeds="172.25.254.10:33061,172.25.254.20:33061,
172.25.254.30:33061" #本地地址允许访
问成员列表
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8" #主机白名单
#不随系统自启而启动,只在初始成员主机中手动开启,
#需要在两种情况下做设定:1.初始化建组时 2.关闭并重新启动整个组时
group_replication_bootstrap_group=off
group_replication_single_primary_mode=OFF #使用多主模式
group_replication_enforce_update_everywhere_checks=ON #组同步中有任何改变检测更新
group_replication_allow_local_disjoint_gtids_join=1 #放弃自己信息以master事件为主

初始化并修改密码

[root@mysql-node10 ~]# mysqld --user=mysql --initialize
[root@mysql-node10 ~]# /etc/init.d/mysqld start
[root@mysql-node10 ~]# mysql -uroot -p 初始化后生成的密码 -e "alter user
root@localhost identified by '123456';"

在这里插入图片描述
从配置
将配置文件里面id,ip修改了
再初始化,和上面一样的操作。
注意直接start
在这里插入图片描述
测试: 写数据在主上建库,创表。从上插入数据,主上也可以查看

#在mysql-node10中
[root@mysql-node10 ~]# mysql -p
mysql> CREATE DATABASE lee;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE TABLE lee.userlist(
-> username VARCHAR(10) PRIMARY KEY NOT NULL,
-> password VARCHAR(50) NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO lee.userlist VALUES ('user1','111');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
+----------+----------+
1 row in set (0.00 sec)
#在mysql-node20中
[root@mysql-node20 ~]# mysql -p
mysql> INSERT INTO lee.userlist values ('user2','222');
Query OK, 1 row affected (0.00 sec)
mysql> select * from lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
| user2 | 222 |
+----------+----------+
2 rows in set (0.00 sec)
#mysql—node30中
[root@mysql-node30 ~]# mysql -p
mysql> INSERT INTO lee.userlist values ('user3','333');
Query OK, 1 row affected (0.00 sec)
mysql> select * from lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
| user2 | 222 |
| user3 | 333 |
+----------+----------+
3 rows in set (0.00 sec)

mysql高可用之MHA

介绍MHA

MHA–解决单点故障

在这里插入图片描述
什么是 MHA?

  • MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
  • MHA 的出现就是解决MySQL 单点的问题。
  • MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
  • MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

MHA 的组成

  • MHA由两部分组成:MHAManager (管理节点) MHA Node (数据库节点),
  • MHA Manager 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave 节点上。
  • MHA Manager 会定时探测集群中的 master 节点。
  • 当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。

MHA 的特点

  • 自动故障切换过程中,MHA从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
  • 使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性
  • 目前MHA支持一主多从架构,最少三台服务,即一主两从

故障切换备选主库的算法

  1. 一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选
    主。
  2. 数据一致的情况下,按照配置文件顺序,选择备选主库。
  3. 设定有权重(candidate_master=1),按照权重强制指定备选主。
    (1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
    (2)如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主。

MHA工作原理

  • 目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群必须最少有3台数据库服务器,一主二从,即一台充当Master,台充当备用Master,另一台充当从库。
  • MHA Node 运行在每台 MySQL 服务器上
  • MHAManager 会定时探测集群中的master 节点
  • 当master 出现故障时,它可以自动将最新数据的slave 提升为新的master
  • 然后将所有其他的slave 重新指向新的master,VIP自动漂移到新master。
  • 整个故障转移过程对应用程序完全透明。

部署MHA

实验环境需要再添加一个虚机来当作MHA服务器

需要创建ssh公钥免密认证,让mha和后面几台进行免密认证

[root@mysql-mha ~]# ssh-keygen
[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.10
[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.20
[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.30
scp id_rsa root@172.25.254.10:/root/.ssh/
scp id_rsa root@172.25.254.20:/root/.ssh/
scp id_rsa root@172.25.254.30:/root/.ssh/

做本地解析:
在这里插入图片描述

搭建主两从架构

一主二从
还原上面的实验配置
只做一下操作:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

停止数据库,三台都要停止 /etc/init.d/mysqld stop
要恢复成一主两从,初始化

主上启动半同步:

在这里插入图片描述

打开半同步功能

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

查看半同步功能状态

mysql> SHOW VARIABLES LIKE ‘rpl_semi_sync%’;

从开启slave

mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl',
 
MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;
 
 
 
Query OK, 0 rows affected, 2 warnings (0.00 sec)
 
mysql> start slave;
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
 
Query OK, 0 rows affected (0.01 sec)
 
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> STOP SLAVE IO_THREAD;
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> START SLAVE IO_THREAD;
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

在这里插入图片描述
在mha上面安装软件包

在这里插入图片描述

将软件复制到在从上

scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.20:/root

scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.30:/root

修改ssh配置文件
在这里插入图片描述
在三台主机上都安装:
yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y

生成配置文件:mkdir /etc/masterha

解压mha4mysql-manager-0.58.tar.gz

tar zxf mha4mysql-manager-0.58.tar.gz

拷贝到下面/etc/masterha
在这里插入图片描述

修改三台主机上的myssql权限,并修改/etc/masterha/app1.cnf
在这里插入图片描述

测试:
检测网络及其ssh免密

在这里插入图片描述
检测数据主从复制情况

注意要将每个MySQL主机里面开启bin-log日志功能
masterha_check_repl --conf=/etc/masterha/app1.cnf
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值