使用两台centos7的虚拟机

192.168.8.133

192.168.8.134

首先在两台上面分别搭建MySQL5.7.30的单节点数据库,详细步骤请看:centos7 MySQL5.7.30安装步骤及问题处理

实验只是为了验证主从复制的可行性,所以只需要在配置文件中增加以下两句即可

133的my.cnf

[mysqld]
port=3306
socket=/usr/local/mysql/mysql.sock
#skip-grant-tables
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
server-id=1
log_bin=mysql-bin

[mysqld_safe]
pid-file=/usr/local/mysql/mysql.pid
log-error=/usr/local/mysql/error.log

!includedir /etc/my.cnf.d

134的my.cnf

[mysqld]
port=3306
socket=/usr/local/mysql/mysql.sock
#skip-grant-tables
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
server-id=2
log_bin=mysql-bin

[mysqld_safe]
pid-file=/usr/local/mysql/mysql.pid
log-error=/usr/local/mysql/error.log

!includedir /etc/my.cnf.d

保存退出并分别重启两个MySQL服务

service mysql restart

我们首先设置133为主,134为从

在133上

mysql> grant replication slave on *.* to rep1@192.168.8.134 identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> reset master;
Query OK, 0 rows affected (0.01 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.03 sec)

这里要注意一点:新建的数据库,默认的Position值为154,为了实验方便,如果不是的,我们就重置master。生产环境千万不能如此哦。

在134上

首先使用

show slave status;

确保没有已经做过的主从,如果有,我们可以重置

reset slave;

change master to master_host='192.168.8.133',master_user='rep1',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
这句中的红色部分,要和主库中的配资完全一致,如果输错了,可以改正之后再次输入这个命令

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: 192.168.8.133
                  Master_User: rep1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: localhost-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:

......

然后测试:

在133上创建一个名为test的数据库,在134上可以看到,即为主从复制成功

133上

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

134上:

mysql>  show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

接下来我们设置134为主,133为从。

在134上

mysql> grant replication slave on *.* to rep2@192.168.8.133 identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      593 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> reset master;
Query OK, 0 rows affected (0.02 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
这里要注意:两个用于复制的账号不能一样哦

在133上

mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status;
Empty set (0.00 sec)

mysql> change master to master_host='192.168.8.134',master_user='rep2',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

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: 192.168.8.134
                  Master_User: rep2
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: localhost-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:
。。。。。

此时,在134上创建数据库test1,在133上要能看到

134:

mysql> create database test1;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test1              |
+--------------------+
6 rows in set (0.01 sec)

133:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test1              |
+--------------------+
6 rows in set (0.00 sec)

到此,互为主从的集群就搭建好了。

下面是搭建过程中的一些问题及处理方法:

1,         Slave_IO_Running: No
            Slave_SQL_Running: No

这个问题,是因为从节点的slave服务没有启动,使用start slave; 即可解决

2,Last_IO_Error: error connecting to master 'rep1@192.168.8.133:3306' - retry-time: 60  retries: 1

问题表现为:Replicate_Do_DB为空,且报错误1045。意思为:当前节点没有连接主节点133数据库的权限。那就只能看133是否给了正确的权限了。一般的错误原因在133上创建账号的时候IP等信息写错了,或者slave节点上的change语句写错了,网上翻一翻,肯定能看到错误之处。

3, Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

错误1236,这里提示为master_log_file文件不存在。这个文件在从节点的change语句中定义的

mysql> change master to master_host='192.168.8.134',master_user='rep2',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

这个文件的名称,要和主节点的file字段信息一致

4,以上错误改完之后,在主库133上创建test库,在从库134上看不到

这个问题无法截图,但肯定会存在。究其原因,是因为我们反复的修改了配置信息,导致主库133的Position信息发生了变化,且134这边授权问题也进行了改变,主从信息无法匹配导致的。

这时候,我们要重置master和slave,然后重新授权即可。

重置master:

reset master;

grant replication slave on *.* to rep2@192.168.8.133 identified by '123456';

重置slave:

stop slave;

reset slave;

change master to master_host='192.168.8.134',master_user='rep2',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

正所谓百因必有果,因果循环报应不爽。操作时的粗心大意,是导致错误发生的根本原因。只有反复练习,才能在错误中积累经验,不断进步。

MySQL5.7.30主从复制集群搭建及互为主从集群搭建(附问题处理方案)相关推荐

  1. docker搭建Redis的主从集群

    服务器:Centos7 前提:selinux关掉 一,安装docker并配置镜像加速(我用的阿里加速) [root@localhost ~]# yum -y install docker [root@ ...

  2. OpenShift 4 之 GitOps(6)用ArgoCD部署MongoDB主从集群

    <OpenShift 4.x HOL教程汇总> 文章目录 部署架构 部署MongoDB主从集群 准备操作环境 配置ArgoCD 准备MongoDB所需证书 更新被部署的YAML文件 在三个 ...

  3. mysql集群和主从区别_搭建MySQL主从集群,主从复制过程中同步延迟问题

    上一节我们成功搭建了主从复制.读写分离,实际上并发量和数据量不大的情况下,使用起来也是非常的流畅,无任何问题,可以正常运行了. 但是,要保证高可用,高并发的情况,可以写数据库master就有累了,从服 ...

  4. Redis 主从集群搭建及哨兵模式配置

    Redis 主从集群搭建及哨兵模式配置 最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来: 1.Redis安装 2.主从架构 2.1 Redis主从架构图 2.2Redis主从结构搭建 ...

  5. docker 搭建mysql 连接不上_docker搭建MySQL主从集群

    关于MySQL主从模式,如果我们直接在本机上搭建的话,是没法搭建的,只能借助于虚拟机,但有的时候我们又需要搭建一个主从集群,以便于进行一些功能性的测试.这个时候我们就可以尝试使用docker,借助于d ...

  6. Redis主从复制、Redis哨兵模式、Redis集群

    目录 Redis主从复制 主从复制 Redis哨兵模式 哨兵sentinel 哨兵的工作原理 哨兵sentinel-实现高可用 sentinel的坑 修改从节点的选举优先级 sentinel.conf ...

  7. 【Redis核心知识 八】Redis集群之Cluster模式及集群搭建

    上一篇blog[Redis从入门到放弃系列 十四]Redis集群之哨兵模式详细介绍了哨兵模式,加上之前讲到的主从复制模式,一共聊到了两种模式,实际上哨兵模式也是基于主从复制上的一种更加高可用的模式,那 ...

  8. 搭建高可用mongodb集群(二)—— 副本集

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能 ...

  9. 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务

    使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务 一.基于于NAT的LVS的安装与配置. 1. 硬件需求和网络拓扑                       ...

最新文章

  1. 在CentOS下安装apche+tomcat+mysql+php
  2. Linux系统运行级别
  3. Qt Creator可视化Chrome跟踪事件
  4. redis api-set
  5. bolt界面缺失dll问题
  6. Linux驱动下的platform总线架构(转)
  7. 使用NodeJS将文件或图像上传到服务器
  8. 电驴(easyMule)自动关机工具
  9. Day 2: 数据类型的使用,字符编码
  10. Unity5.3官方VR教程重磅登场-系列5 VR中的运动
  11. 鲁大师2022半年报显卡排行,NVIDIA霸榜,七彩虹成最大赢家!
  12. 阿里云云数据库RDS快速使用教程
  13. 在Windows Server 2008和Vista中增加恢复菜单WinRE
  14. 史玉柱退休继续“烧脑”手游成新宠
  15. linux启动mysql失败,Fatal error: Can‘t open and lock privilege tables: Table ‘mysql.host‘ doesn‘t exist
  16. 【POJ 1788 --- Building a New Depot】
  17. Python基础(类与对象)
  18. 无人机三维建模(3) 航拍实景模型
  19. RD会话主机服务器2012上没有可用的远程桌面许可证服务器
  20. 最新火狐手机浏览器如何通过firefox修改UA

热门文章

  1. redis事务及类事务回滚机制
  2. 回顾我的2016-不过是为了留下足迹
  3. 2020己亥年大年三十新春祝福
  4. 使用冰狐智能辅助实现找图(findImage)
  5. android 桌面图标的点击放大效果,Android仿英语流利说取词放大控件的实现方法(附demo源码下载)...
  6. 使用Stacktrace处理异常
  7. rust怎么传送坐标_5G基站可以这样“上天”,你怎么看?
  8. C# 关于OnMouseDown等事件的简单介绍
  9. java+手柄开发_手把手教你用java轻轻松松开发贪吃蛇游戏
  10. 百度和长沙合作背后:智能城市轮廓初现