Linux MYSQL8.0数据库安装-->MYSQL主从节点配置-->MYSQL主从切换 详细教程

2023-11-08

目录

一、准备

1、关闭防火墙和SELINUX安全模式

2、上传安装包到/usr/local/mysql

二、安装MYSQL数据库

1、解压包并开始安装

2、 依次安装

 3、启动并进入数据库配置

三、MYSQL主从节点配置

1、主机配置(master)

2.配置从库(slave) 

3、主从关联配置

三、 MySQL 主从切换


一、准备

我这是使用RPM包安装,可前往mysql官网下载或用我网盘的包,

官网下载安装包:MySQL :: Download MySQL Community Server (Archived Versions)

百度网盘链接:https://pan.baidu.com/s/1vyHmyJNojTetuFZKnLNYPw?pwd=aqws 
提取码:aqws

1、关闭防火墙和SELINUX安全模式

#关闭防火墙并设置开机不启动
systemctl stop firewalld
 
systemctl disable firewalld
 
#关闭SElinux安全模式
setenforce 0
    
#设置永久关闭selinux
 
vi /etc/selinux/config
 
#修改SELINUX:
SELINUX=disabled
 
#重启生效
reboot

2、上传安装包到/usr/local/mysql

#创建一个放包的路径
mkdir -p /usr/local/mysql

二、安装MYSQL数据库

1、解压包并开始安装

#进入包在的路径
cd  -p /usr/local/mysql

#解压
tar -xvf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar

2、 依次安装

rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm

#安装此包时会报错(看下图)
#是原来自带的,卸了即可
rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm

#卸载
yum remove mysql-libs

#再次安装
rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm

#把一些依赖安装一下
sudo yum install -y libaio

yum install -y net-tools.x86_64


#继续安装包
rpm -ivh mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm

#最后一一个包 要语句后面加上 --nodeps --force,安装时忽
略依赖关系
rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm --nodeps --force

 3、启动并进入数据库配置

#启动
systemctl start mysqld

#查看初始密码(要先启动才有)
cat /var/log/mysqld.log |grep password

#登陆并修改密码(密码自取,有大小写字令母符号数字)
mysql -u root -p

alter user 'root'@'localhost' identified by 'password';

#配置远程连接
use mysql;

update user set host='%' where user='root';

#刷新才生效
flush privileges;

#最好再重启一下数据库
systemctl restart mysqld

三、MYSQL主从节点配置

MYSQL 数据库准备好两个单机的,如果从库是克隆主库出来的,所以两个库的 IP 地址以及 auto.cnf
里的 UUID 都要改得不一样
不是克隆的不用理
修改一个库的 UUID 就行,只要两库的 UUID 不一样就行
#执行命令查看 auto.cnf 文件的位置
find -name auto.cnf  #执行命令后没有的话,看最后一行
vi 到上面命令查询到的地址,修改 uuid 的值,随便改,只要不一样就可以了
#server-uuid=sgsgsg455sfsfgsg4
#修改后,进库查看主从两库的 UUID 是不是不一样
mysql -u root -p
show variables like '%server_uuid%';


#如改后还是一样,在/var/lib/mysql 可能也有一个 auto.cnf,修改一下即可
vi /var/lib/mysql/auto.cnf

#修改后,进库查看主从两库的 UUID 是不是不一样
mysql -u root -p
show variables like '%server_uuid%';

1、主机配置(master)

进入 /etc/my.cnf 添加或修改配置
vi /etc/my.cnf

#添加配置如下
#在[mysqld]下添加
server-id = 1 #节点 ID,确保唯一。建议放在[mysqld]下的首行,不然可能会有报错
log-bin = mysql-bin #binlog 日志位置

#以下参数选填(可不填)
binlog_format = mixed #binlog 日志格式,mysql 默认采用 statement,建议使用 mixed
expire_logs_days = 7 #binlog 过期清理时间
max_binlog_size = 100m #binlog 每个日志文件大小
binlog_cache_size = 5m #binlog 缓存大小
max_binlog_cache_size= 256m #最大 binlog 缓存大
binlog-ignore-db=mysql #不生成日志文件的数据库,可用逗号拼接
binlog-do-db= 数据库名 #需要同步的数据库
binlog-ignore-db = 数据库名 #不需要同步的数据库

重 MYSQL 启服务

service mysqld restart

进入数据库,查看主库(master)信息, File 和 Position 信息要记下,后面要用,可复制出来先放 txt 文档中先

mysql -u root -p

show master status;

2.配置从库(slave) 

vi /etc/my.cnf

#在[mysqld]下添加
server-id=2 #节点 ID,确保唯一。建议放在[mysqld]下的首行,不然可能会有报错
log-bin= mysql-bin #binlog 日志位置
relay-log= slave-relay-bin #必须开启,从主数据库同步的 binlog 会写入到该目录下
重 MYSQL 启服务
service mysqld restart

3、主从关联配置

#从库进入数据库
mysql -u root -p

#停掉从库的服务,一定要停掉服务再去执行下面的命令
stop slave;

#配置关联主库(master),
#MASTER_HOST : 要连接的主服务器的 ip 地址
#MASTER_USER : 要连接的主服务器的用户名
#MASTER_PASSWORD : 设置要连接的主服务器的密码
#以下两个填主库执行 show master status; 得到的信息
#MASTER_LOG_FILE :要连接的主服务器的 bin 日志的日志名称
#MASTER_LOG_POS :要连接的主服务器的 bin 日志的记录位置

change master to master_host='主节点IP', master_port=3306,master_user='root',master_password='数据库密码',master_log_file='mysql-bin.000001',master_log_pos=157;

#启动
start slave

#查看主从同步状态,没有报错启动成功
show slave status \G;
下面两个选项要都是 Yes

 测试:连接主数据库,建库建表看是否同步到从库

三、 MySQL 主从切换

1、手动切换
#切断对主库的数据传输,进入主库备库设置只读

mysql -u root -p

set global read_only=ON;
set global super_read_only=ON;

#从库查看主从同步状态

show slave status \G

图中两处也还为Yes

#比对主备两边的 GTID 是否一致(要是一样的)

select @@global.gtid_executed;

我这都是为空的,测试后未发现对主从库切换,数据同步有影响

#从库停掉复制进程,并清空主从信息

stop slave;
reset slave all;

#从库关闭只读开启读写,转为新主库

set global read_only=off;
set global super_read_only=off;

#查看新主库信息, File 和 Position 信息要记下,后面要用,可复制出来先放 txt 文档中先

show master status;

#停掉原主库的服务
stop slave;

#配置关联主库(master),
#MASTER_HOST : 要连接的主服务器的 ip 地址
#MASTER_USER : 要连接的主服务器的用户名
#MASTER_PASSWORD : 设置要连接的主服务器的密码
#以下两个填主库执行 show master status; 得到的信息
#MASTER_LOG_FILE :要连接的主服务器的 bin 日志的日志名称
#MASTER_LOG_POS :要连接的主服务器的 bin 日志的记录位置

change master to master_host='主节点IP', master_port=3306,master_user='root',master_password='数据库密码',master_log_file='mysql-bin.000001',master_log_pos=1736;


#启动
start slave;

#查看主从同步状态,没有报错启动成功
show slave status \G;

图中两处要为Yes

#旧主库关闭只读,开启读写,转为从库

set global read_only=off;
set global super_read_only=off;

测试:连接新主数据库,建表看是否同步到从库

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux MYSQL8.0数据库安装-->MYSQL主从节点配置-->MYSQL主从切换 详细教程 的相关文章

  • MySQL - 查找与连接表中的所有行匹配的行

    表 1 曲目 表 2 词汇表 表 3 N M 轨道有单词 trackwords 找到包含所有单词的所有曲目 目前查询如下 SELECT DISTINCT t id FROM track as t Left Join trackwords a
  • pip 找不到满足要求的版本 django==2.2.1

    我刚刚将操作系统更改为 linux 并且想安装 django 但我无法安装最新版本的 django 我努力了 pip install django 但是它安装了 django 1 11 11 这不是我需要的 我还将我的 pip 升级到了 1
  • AMD OpenCL 在 Linux 上工作所需的最小必要文件子集是什么?

    我已经使用 buildroot 构建了 Linux 内核 我已将开源 amdgpu 驱动程序和所需的固件合并到其中 驱动程序很好 检测 GPU 模式设置运行良好 调整 小文本 的分辨率 启动后会显示命令行 现在我需要运行 OpenCL 程序
  • 串口读取未完成

    下面的函数用于在Linux下从串口读取数据 我在调试时可以读取完整的数据 但是当我启动程序时 读缓冲区似乎并不完整 我正确接收了一小部分数据 但缓冲区的其余部分完全正确zero 可能是什么问题呢 int8 t serial port ope
  • 是否可以使用 LOAD DATA INFILE 类型命令来更新数据库中的行?

    伪表 primary key first name last name date of birth 1 John Smith 07 04 1982 眼下名包含多行的用户全名 期望的结果是分割数据 因此first name包含 John la
  • 检测 MySQL 中的 utf8 损坏字符

    我有一个数据库 其中有一堆损坏的 utf8 字符分散在多个表中 字符列表不是很广泛 AFAIK 修复给定的表非常简单 update orderItem set itemName replace itemName 但我无法找到检测损坏字符的方
  • Mysql使用触发器建表

    我尝试在 Mysql 触发器内创建表 但没有创建 如何使用触发器创建表 这里传递的表的名称是动态的 据我所知 在触发器内创建表是不可能的 看这里 http forums mysql com read php 99 121849 122609
  • SQL 未插入到 Yii 中具有关系的表中

    我正在尝试创建一个用户 但所有值都没有插入到数据库中 Systems user 表与partys 表有关系 因为party id 是sytems user 的主键 没有插入任何内容 甚至没有错误 它只是返回到 创建 页面 这是我的架构 Ta
  • InnoDB如何存储字符列?

    这个问题仅解决 短 的问题CHAR and VARCHAR列存储在 InnoDB 表中 Does a CHAR 10 列正好占用 10 个字节吗 尾随空格会发生什么情况 对于每个字符需要超过 1 个字节的字符集怎么办 如何VARCHAR 1
  • 如何告诉 CMake 将构建文件放在哪里?

    我想告诉 CMake 将文件和文件夹输出到不同的文件夹而不是当前文件夹 我在下面讨论的是 CMake 生成的文件 文件 CMakeCache txt 目录 CMakeFiles 文件 生成文件 目录 bin 文件 cmake install
  • python 的 fcntl.flock 函数是否提供文件访问的线程级锁定?

    Python 的 fcnt 模块提供了一种名为 flock 1 的方法来证明文件锁定 其描述如下 对文件执行锁定操作op 描述符 fd 文件对象提供 fileno 方法被接受为 出色地 请参阅 Unix 手册集群 2 了解详情 在某些系统上
  • 如何在 Linux 中制作一个将文件转换为大写的 x86 汇编程序?

    我找到了一个名为 ProgrammingGroundUp 1 0 booksize pdf 的 pdf 文件 其中一个项目是制作一个汇编程序 该程序接收文件并将其转换为大写 section data CONSTANTS system cal
  • 存储 MySQL GUID/UUID

    这是我能想到的将 UUID 生成的 MySQL GUID UUID 转换为二进制文件 16 的最佳方法 UNHEX REPLACE UUID 然后将其存储在 BINARY 16 中 我应该知道这样做有什么影响吗 从 MySQL 8 0 及以
  • 如何在Linux中获取带有图标的活动应用程序

    我想找到一种方法获取活动应用程序的列表及其名称和图标 实际上 我正在使用此命令来获取所有活动进程 wmctrl lp 示例输出 0x03800002 0 3293 user notebook XdndCollectionWindowImp
  • /proc/kmsg 和 dmsg 有什么区别?

    我们通常这样做cat proc kmsg or dmesg从用户空间查看内核日志 我明白了dmesg是一个循环缓冲区 它从kmsg 但是kmsg也不是循环缓冲区 它们之间有什么区别和联系呢 宽松地说 dmesg 是一个转储 proc kms
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • 如何在我的查询中使用日期格式?

    这适用于 phpmyadmin 但是当我在代码上使用时给我一个错误 错误说 解析错误 语法错误 意外的 我的语法有什么问题 gt
  • MySQL 连接最新行

    我有两张桌子agents and calls 座席将始终处于一个活动呼叫中 可能有另一个待处理的呼叫分配给某个座席 而该座席尚未应答 我想编写一个查询来测试最新的调用是否按排序dateCreated与代理表中当前活动的呼叫匹配 以下是当前呼
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 计算 MySQL 中的行数以及实际行内容

    MySQL 中有没有办法执行单个 SQL 语句来返回所选行以及结果行数 我可以做这个 SELECT COUNT FROM BigTable WHERE firstname LIKE a 这给了我一个带有计数 37 781 的结果行 我可以像

随机推荐