Linux环境MySQL数据库主从复制保姆级教程

news2024/11/16 13:51:10

文章目录

  • 1、环境准备
    • 1.1、安装MySQL
    • 1.2、设置root登录密码
  • 2、主库配置
    • 2.1、修改my.cnf
    • 2.2、重启数据库
    • 2.3、检验设置是否成功
    • 2.4、建立主从复制的账号
  • 3、从库配置
    • 3.1、配置my.cnf
    • 3.2、配置复制参数
    • 3.3、查看从库状态
  • 4、测试
  • 5、注意事项
    • 5.1、接口放行
    • 5.2、防火墙关闭
    • 5.3、Slave_IO_Running: No
  • 6、总结

1、环境准备

本文主要是针对MySQL数据库做个主从复制测试,环境是Linux(在阿里云领取的免费服务器,可以试用一个月),MySQL数据库的版本我这里是5.7.40

主库IP:120.26.60.94

从库IP:120.27.241.69

1.1、安装MySQL

我这里安装的版本是5.7.40

首先进入opt目录,执行下面命令进行下载:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

然后执行下面命令进行安装:

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo

必须进入到 /etc/yum.repos.d/目录后再执行安装

cd /etc/yum.repos.d/
yum install mysql-server --nogpgcheck      //nogpgcheck表示不校验key

下面就表示安装成功了

在这里插入图片描述

运行下面命令进行启动:

systemctl start mysqld

设置开机自动启动:

systemctl enable mysqld

其他命令:

# 关闭开机启动
systemctl stop mysqld
# 关闭MySQL
systemctl stop mysqld
# 重启MySQL
systemctl restart mysqld

运行下面命令查看MySQL运行状态:

systemctl status mysqld

如下:

在这里插入图片描述

1.2、设置root登录密码

那么如何设置root账户的登录密码呢?可按照下面步骤修改root账户密码:

1、进入MySQL数据配置文件进行修改

vi /etc/my.cnf

再按字母【i】进入编辑模式,然后将下面这一行拷贝进去,放到最后一行,含义是免密码登录

skip-grant-tables

然后按【Esc】后再输入【:wq】,表示保存并退出

然后重启:

systemctl restart mysqld.service

2、直接免密登录

mysql -uroot -p

此时提示要你输入密码,什么都不用输入,直接回车就可以进入数据库了

3、设置密码

你可以使用以下命令来重置root账户的密码:(我这里设置的是AaBa123456,设置最好不要设置的太简单)

5.7以上版本运行:
update user set password= password("123456")where user='root';

5.7以下版本运行:
update user set authentication_string= password("123456")where user='root';

4、删除免密设置

按照刚才的步骤,进入【my.cnf】文件中,将【skip-grant-tables】代码删除,并保存退出,再重启MySQL服务器即可,这样以后就可以使用123456这个密码进行登录了

2、主库配置

下面所有配置都是在主库中进行的

2.1、修改my.cnf

执行下面命令:

vi /etc/my.cnf

然后按字母【i】进入编辑模式,将下面内容拷贝进去即可:(拷贝到【mysqld】节点下面)

[mysqld]
#开启log-bin二进制日志
log-bin=mysql-bin

#配置唯一的服务器ID,一般使用IP最后一位
server-id=94

#添加,允许从服务器更新二进制日志
log-slave-updates=true

#需要同步的数据库,如果有多个,复制多份指定数据库名即可
binlog_do_db=testdb
#不需要同步的数据库,如果有多个,复制多份指定数据库名即可
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

#下面不是必须配置
#主要是为了使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性
innodb_flush_log_at_trx_commit = 1
#使binlog在每1次binlog写入后与硬盘同步
sync_binlog = 1
#只保留7天的二进制日志,以防磁盘被日志占满
expire-logs-days=7

在这里插入图片描述

然后按【Esc】后,再按【:wq】进行保存并退出操作

2.2、重启数据库

修改完配置文件后需要重启数据库,并查看配置是否生效,执行下面命令进行重启:

systemctl restart mysqld.service

然后在输入下面命令查看MySQL重启后的运行状态:

systemctl status mysqld

在这里插入图片描述

OK,到此主库设置完毕

2.3、检验设置是否成功

先使用下面命令登录数据库:

mysql -uroot -p123456

登录成功后输入下面命令检查:

show variables like 'server_id';

在这里插入图片描述

再输入命令:

show variables like 'log_bin';

在这里插入图片描述

再输入命令:

#skip_networking默认是OFF关闭状态,启用后,主从服务器将无法相互通信,所以这里必须是OFFer
show variables like '%skip_networking%';

在这里插入图片描述

OK,全部检查完毕,确实设置成功了

2.4、建立主从复制的账号

同样先登录MySQL之后,执行下面命令:

GRANT REPLICATION SLAVE ON *.* to 'slavetest'@'%' identified by 'root@123456';

注意:

上面SQL的作用是创建一个用户【slavetest】密码为【root@123456】并且给【slavetest】用户授予REPLICATION SLAVE权限,常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制,如下:

在这里插入图片描述

然后执行下面命令:

#查看master的状态
show master status\G

在这里插入图片描述

就不用再执行其他命令了

上面结果中的File和Position的值需要记录一下,待会要用到

主库的配置就搞完了,都已经做好准备了,下面我们开始搞从库

3、从库配置

先在从库上执行下面语句检查下刚刚建立的账号是否可以连接

#IP是主库IP
mysql -uslavetest -p'root@123456' -h120.26.60.94

在这里插入图片描述

确定可以连接

3.1、配置my.cnf

执行下面命令编辑my.cnf

vi /etc/my.cnf

然后在【mysqld】节点下面新增下面内容:

#配置唯一的服务器ID,一般使用IP最后一位
server-id=69

如下:

在这里插入图片描述

然后重启数据库,并查看刚配置的是否生效:

systemctl restart mysqld
mysql -uroot -p123456
show variables like 'server_id';
show variables like 'log_bin';

如果报错:

在这里插入图片描述

那就执行:

ALTER USER USER() IDENTIFIED BY 'Admin2023!';

就可以了执行了:

在这里插入图片描述

在这里插入图片描述

3.2、配置复制参数

配置同步,注意 MASTER_LOG_FILE 和 MASTER_LOG_POS 的值要与Master的一致,登录MySQL后运行下面语句:

CHANGE MASTER TO MASTER_HOST='120.26.60.94',MASTER_USER='slavetest',MASTER_PASSWORD='root@123456',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=434;

下面是主库的参数:

在这里插入图片描述

在这里插入图片描述

如果执行失败,就执行:reset slave;

我这里执行成功了,就可以直接执行下面语句了:

start slave;

在这里插入图片描述

3.3、查看从库状态

执行下面命令查看从库状态:

show slave status\G

在这里插入图片描述

参数介绍:

# 负责与主机的io通信
Slave_IO_Running: Yes

# 负责自己的slave mysql进程
Slave_SQL_Running: Yes

若出错,则清理掉之前的配置,执行以下命令:

mysql> stop slave;
mysql> reset slave all;

4、测试

在我本地用Navicat工具连接主库和从库:

在这里插入图片描述

目前两个库都是一样的库,我现在在主库上面新建一个【testdb】数据库,然后从库直接刷新,就可以看到这个数据库了,同样的,你在主库上新建什么表,添加什么数据,刷新从库后,会发现,数据都在了,说明测试成功了,现在主从复制功能就实现了:
在这里插入图片描述

5、注意事项

如果你设置都已经设置好了,确保没有问题了,但是本机windows就是无法远程连接Linux中的MySQL服务器的话,那就需要检查下:

  1. 接口是否放行
  2. 防火墙是否关闭

一般情况下,需要检查下Linux服务器的防火墙是否关闭,然后检查端口是否放行(不放行的话其他服务器上连接不成功的)

5.1、接口放行

我这里是阿里云的服务器,所以登录到阿里云的控制台中,如下这样配置:

在这里插入图片描述

5.2、防火墙关闭

防火墙相关命令:

  • 远程访问linux时,需要关闭防火墙,否则访问linux上的tomcat,mysql等服务可能会失败;
  • 查看防火墙状态: systemctl status firewalld.service(绿的running表示防火墙开启)
  • 执行关闭命令(立即关闭 - 立即生效): systemctl stop firewalld.service
  • 再次执行查看防火墙命令:systemctl status firewalld.service
  • 执行开机禁用防火墙自启命令(永久关闭 - 重启生效): systemctl disable firewalld.service
  • 开启防火墙:systemctl start firewalld.service

5.3、Slave_IO_Running: No

一般出现这样的问题有以下几种情况,逐一检查下即可:

  • 网络不通
  • my.cnf 配置有问题
  • 密码、file 文件名、pos 偏移量不对
  • 防火墙没有关闭

6、总结

  1. 本文梳理出了在Linux环境中如何做主从复制,希望对大家有帮助

如果本文对你有帮助的话,记得点赞+关注哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Framework的框架描绘~

前言 写在前面: 1、有没有必要学习linux内核? 我认为是很有必要的。学习linux内核有助于我们加深对一些概念的理解,比如“进程”、“线程”。 2、有没有必要自己编译android源码? 非必须,可以直接用android studio查看…

【图表利剑】开发复杂Echarts时,visualMap视觉组件中属性seriesIndex必须用起来

一、背景 据说90%的可视化是用Echarts开发,没错,笔者也没例外,在新的开发项目中,遇到了这个开发神器Echarts,想要的功能就是在省份上显示动态效果图,比如涟漪。原来的功能已有范围视觉组件visualMap。 二…

【Matplotlib绘制图像大全】(十九):Matplotlib绘制等高线

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

SAP ABAP——数据类型(四)【TYPE系列关键字】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

gitHub不能用密码推送了,必须要使用令牌

有一段时间没使用github去push项目了,今天push之后,根据提示输入账号密码,但是失败了,报错如下: support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com…

【Swin Transformer原理和源码解析】Hierarchical Vision Transformer using Shifted Windows

目录前言一、动机和改进点二、整体架构:SwinTransformer三、输入设置:PatchEmbed四、4个重复的Stage:BasicLayer4.1、SwinTransformerBlock4.1.1、创建mask4.1.2、shift特征4.1.3、为shift后的特征划分窗口4.1.4、W-MSA VS SW-MSA4.2、PatchM…

Android APP 停止运行报错弹窗

一个APP经常性的报错,然后就会弹出一个"很抱歉,xxx已停止运行"这样的弹窗,在Android系统层临时将这个弹窗屏蔽.弹窗如下: 在没做过此类修改之前,不知到如何下手的情况下,请做如下几步: 在Android目录下全局搜索关键字"很抱歉",然后会有一个路径frameworks…

ICS计算系统概论实验3—LC3汇编代码实现最长重复子字符串Longest-duplicate-substring

Lab03 Longest-duplicate-substring Purpose 子字符串是字符串中至少出现一次的连续字符序列。重复子字符串是一种由相同字符组成的子字符串。例如,“aabbbc”的重复子字符串是“aa”,“bbb”和“c”。 给定一个字符串及其长度,计算出它最长…

全球DTC品牌纷纷奔走线下,价值岂止于用户体验和品牌形象

走向线下,开设新零售门店/旗舰店/体验店/快闪店,已成为很多全球品牌的共同做法:从海外巨头亚马逊的Amazon go、国内的盒马O2O,到DTC经典品牌的Warby Parker、Allbirds们遍地开花的线下实体店,是什么让全球DTC品牌纷纷走…

【Matplotlib绘制图像大全】(二十三):Matplotlib保存图像

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

Sqli-Libs 速通

Sqli-Libs持续更新...目标Less-1Less-2Less-3Less-4Less-5Less-6Less-7Less-8Less-9Less-10Less-11Less-12Less-13Less-14Less-15Less-16Less-17Less-18Less-19 bp处理Less-20目标 直接写payload,sql语句非预期执行就算成功 表:emails,referers,uagent…

scratch绘制旋转六边形 电子学会图形化编程scratch等级考试二级真题和答案解析2022年9月

目录 scratch绘制旋转六边形 一、题目要求 1、准备工作 2、功能实现

12月2日:thinkphp中数据库完结

数据库的查询 聚合查询 聚合查询的几种方法其中将count作为重点来说,由图所示,即为使用count()方法中需要注意的点 count(*)的使用count()中字段名为具体值的使用方法时间查询 官方文档中列举的是使用wheretime()进行查询的方法,但是在日常的…

如何在Windows上安装并启动MySql

如何在Windows上安装并启动MySql一、MySql 安装包下载二、MySql 初始化三、启动MySql服务四、登录MySql五、修改MySql的root密码六、关于远程登录七、设置环境变量一、MySql 安装包下载 首先进入以下网址,选择合适的版本进行下载即可。 https://dev.mysql.com/dow…

Bootstrap5 安装使用

我们可以通过以下两种方式来安装 Bootstrap5&#xff1a; 使用 Bootstrap5 CDN。 从官网 getbootstrap.com 下载 Bootstrap 5。 Bootstrap 5 CDN 国内推荐使用 Staticfile CDN 上的库&#xff1a; Bootstrap5 CDN <!-- 新 Bootstrap5 核心 CSS 文件 --> <link r…

基于vue-simple-uploader的断点续传

方案&#xff1a; 分片上传&#xff0c;再次上传时&#xff0c;查询已上传分片&#xff0c;继续上传剩余分片 实现效果&#xff1a; 1. 安装uploader和spark-md5的依赖 npm install --save vue-simple-uploader npm install --save spark-md5 2.mainjs导入uploader impo…

日期格式化 YYYY-MM-DD 出现时间偏移量

在js中&#xff0c;很多时候需要把日期字符串转换为一个 Date 对象。 如果得到的日期字符串有时间还好办&#xff0c;如果没有时间&#xff0c;只有日期的格式&#xff0c;例如 2022-12-01 这样的字符串呢&#xff1f; 大部分人可能什么都没想&#xff0c;直接就调用了 new D…

MyBatis-Plus分页查询(快速上手运用)

系列文章目录 Mybatis-Plus知识点[MyBatisMyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作&#…

【实操篇】Linux实用指令总结

目录 1.运行级别类 ●运行级别 ●指定运行级别 2.帮助指令类 ●帮助指令 1.man获得帮助信息 2.help指令 3.文件目录类 ●pwd指令 ●ls指令 ●cd指令 ●mkdir指令 ●rmdir指令 ●touch指令 ●cp指令 ●rm指令 ●mv指令 ●cat指令 ●more指令 ●less指令 ●>指令和>>…

如此简单的K8S,来玩下pv和pvc,利用nfs来实现持久化存储(内网环境,非常详细)

如此简单的K8S,来玩下pv和pvc&#xff0c;利用nfs来实现持久化存储(内网环境&#xff0c;非常详细) k8s很简单&#xff0c;怎么个简单法呢&#xff0c;来给小编一起再来复习一边吧。今天主要来了解下pv和pvc的概念&#xff0c;小编也是当过多次的面试官&#xff0c;小编悄悄的告…