CentOS7 MySQL5.7.35主从 不停机搭建 以及配置

如需安装MySQL,参照MySQL 5.7.35 安装教程

	https://blog.csdn.net/CsethCRM/article/details/119418841

一、主&从 环境信息准备

1.1.查看硬盘信息,确保磁盘够用(主&从)

df -h

1.2.查看内存信息 (主&从,推荐从库配置略高)

free -h

1.3. 查看主库数据库大小 (主库)

SELECT table_schema AS '数据库名称',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS '数据库大小(MB)'
FROM information_schema.tables
GROUP BY table_schema;

1.4.查看主库数据表占用的空间大小(主库,查看是否在预期内)

SELECT * FROM (SELECT table_schema,table_name,ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS TableGBFROM information_schema.tables WHERE 0=0and table_schema ='数据库名称' group by table_schema,table_name) T1 ORDER BY T1.TableGB desc

1.5. 查看主库和从库的UUID,一定要不相同才可以 (主&从)

SHOW VARIABLES LIKE 'server_uuid%';

1.6.确认防火墙已关闭

查看防火墙状态
systemctl status firewalld.service
#关闭运行的防火墙
systemctl stop firewalld.service
#禁止防火墙服务器,保证重新启动服务器之后防火墙还是关闭状态
systemctl disable firewalld.service

1.7.设置 SSH 工具 ,SSH Keepalive

MobaXterm 为例:SSH keepalive 要 打钩
其他工具 找到各自的 超时时间,默认很多工具 都是 30分钟,如果不设置,超过 30分钟 会自动断开
导致 主库 备份 失败

二、主库配置,配置在 [mysqld] 下方(主)

2.1./etc/my.cnf 配置(主)

# 1.  配置server-id ,主库和从库不可以相同,配置不同的数字即可(主)
server-id       = 1
# 2. 为了保证数据一致性,每次执行写入行操作,都进行磁盘同步; (主)
sync_binlog = 1
# 3. 配置需同步的库(主)
binlog-do-db = 数据库名称1
binlog-do-db = 数据库名称2
# 4. 配置不需要同步的库(主)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog-ignore-db=自定义1
binlog-ignore-db=自定义2
# 5. 配置event_scheduler(主)
event_scheduler = on
# 6. 设置 binlog_format(主)
binlog_format     = row

2.2.Mysql库 如果有触发器

建议用 if server-id = 1 来判断 主库才执行,从库不执行
避免 自增列、now()、uuid() 执行结果不一致,从而导致 主从数据不一致

三、从库配置,配置在 [mysqld] 下方(从)

3.1./etc/my.cnf 配置(从)

# 1. 从库 server-id ,和主库不同即可(从)
server-id = 2
# 2.注释掉 log-bin=mysql-bin  从库不需要配置此项,从主库传递到从库,从库没必要开启binlog ( Slave 作为其它 Slave 的 Master 时需要开启,我们只是从库 所以不开启)
# log-bin=mysql-bin
# 3. 支持通配符,忽略 zdy开头的表 进行主从同步(从)
replicate-wild-ignore-table=数据库.zdy_%   # zdy_ 开头的忽略
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = information_schema.%
replicate-wild-ignore-table = sys.%
replicate-wild-ignore-table = performance_schema.%
# 4.从库关闭事件(从)
event_scheduler = off
# 5.从库设置只读(从)
read_only=1
# 6.为保证数据一致性,每次同步都进行磁盘同步(从)
sync_binlog = 1
# 7. 通过复制接收到并执行的更新都会被写入该从服务器的二进制日志中。这使得连接到此从服务器的其他从服务器也能接收到这些自主服务器同步过来的更新。(从)
log_slave_updates = 1
# 8.从库中继日志。Relaylog 的主要目的是提高数据复制的效率和可靠性(从)
relay_log = mysql-relay-bin

四、建立主从

4.1. 建立主从需要的账号 (主-SSH)

# CentOS SSH 连接后登录MySQL
mysql -u root -p
输入 mysql root 的密码:你的密码
# 创建用户,指定该用户只能在 主库IP 上 使用 密码登录
mysql> create user '用户名'@'主库IP' identified by '密码';
# 为用户 赋予 REPLICATION SLAVE 权限
mysql> grant replication slave on *.* to '用户名'@'主库IP';
mysql> GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
# 查看用户
mysql> select user,host from mysql.user;
# 查看master状态
mysql> show master status;

4.2. 主库上进行备份等操作(主-SSH)

# 在主库机器上 SSH 登录后 执行mysqldump命令,此命令会包含 MASTER_LOG_FILE 和 MASTER_LOG_POS 等位置信息
# 后续从库按照 备份的位置开始建立,备份后 变更的数据 会自动同步到从库
mysqldump -u root -p --single-transaction  --master-data=2 --databases 数据库1 数据库2 > /home/dbsql.sql
输入密码:你的密码
# mysqldump 备份完毕后,把备份文件 从 master(主) 传输 至 slave(从) 机器scp /home/dbsql.sql root@从库IP:/home输入:yes输入从库SSH的密码:你的密码

4.3.在从库上还原数据库(从-SSH)

# 导入备份的mysql数据
mysql -u用户名 -p密码 < /home/dbsql.sql 
# 导入成功后,重启mysql
systemctl restart mysqld

4.4.在从库的MySQL中 建立主从连接(从)

# 查看 dbsql.sql 文件中的 postion ,查看文件的前 30行(文件小直接打开查看,文件超过GB之后用命令查看)
# SSH命令
cd /home
head -n 30 dbsql.sql# 找到如下结果,下边建立主从连接会用到:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000276', MASTER_LOG_POS=11613709;
# 建立主从连接,我是在navicate 中操作的,SSH命令中登录mysql也可以,navicate命令如下:
# 我们在建立主从过程中,主机是不需要停止的,这条命令执行完毕,会从此位置(也就是mysqldump的位置) 开始
# 把之后 主 的所有改动 同步至 从库,使主从数据一致,就实现了 不停机 主从change master to master_host='主的IP', 
master_user='4.1建立的账号'
,MASTER_PORT =3306
,master_password='4.1账号的密码'
,master_log_file='mysql-bin.000276'
,master_log_pos=11613709;# 停止主从同步
stop slave; 
# 开启主从同步
start slave;  
# 查看 从库 状态 ,看到 2个 Yes  恭喜你,大功告成
show slave status; # 看到结果中的下边2列,表示主从建立成功:
Slave_IO_Running	Slave_SQL_Running
Yes	Yes

4.5 不停机主从至此就搭建完毕了,恭喜一下 自己吧 _

五、主从搭建过程中 排查问题的方法

5.1 查看日志,根据日志指引能解决99%的问题:

/var/log/mysqld.log

5.2 日志中并未报错,在从库中 停一下 再启动 也许就好了(从库执行)

# 停止主从同步(从)
stop slave; 
# 开启主从同步(从)
start slave;  
# 查看 从库 状态 ,看到 2个 Yes  恭喜你,大功告成(从)
show slave status; 

5.3 解决不了的错误/ 不需要的主从内容 可以 跳过

https://blog.csdn.net/weixin_72244810/article/details/132569820
slave_skip_errors = 1146

六、其它备忘

清空主从配置(从)

reset slave all; 

show slave status\G 超详细全面解释

	https://blog.csdn.net/weixin_48154829/article/details/134974113

主从原理

在这里插入图片描述

mysql5.7 主从复制压力测试

	https://blog.csdn.net/shixiaoling123/article/details/109004274

主从复制的日志格式 ,这里的日志格式就是指二进制日志的三种格式

binlog_format=statement
binlog_format=row
binlog_format=mixed
其中基于row的复制方式更能保证主从库数据的一致性,但日志量较大,在设置时考虑磁盘的空间问题

硬件推荐

		a) CPU好b) SSD硬盘 或者 SANc)同一交换机,万兆环境

尽量不要使用 存储过程 和 触发器、事件

尽量不要使用 temporary tables

尽量不要使用MyISAM类型的表,推荐使用InnoDB,MyISAM不支持事务

mysql主从同步加速方法

1、sync_binlog在slave端设置为0
2、–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。
3、直接禁用slave端的binlog
4、slave端,如果使用的存储引擎是innodb,innodb_flush_log_at_trx_commit =2

九、附录

1.配置完毕检查语句

# uuid 主从检查,不相同即可
SHOW VARIABLES LIKE 'server_uuid%';
# server-id 主从检查,不相同即可
show variables like '%server_id%';
# event scheduler ,一般主库on 从库 off
show variables like '%event_scheduler%';
# read only ,一般主库 on ,从库off
show variables like '%read_only%';
# sync_binlog
show variables like '%sync_binlog%';
# log_slave_updates 
show variables like '%log_slave_updates%';
# relay_log
show variables like '%relay_log%';

2.主从搭建完毕,检查表个数是否相同

SELECT COUNT(*) TABLES, table_schema
FROM information_schema.TABLES
WHERE table_schema = '数据库名称'
GROUP BY table_schema;

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

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

相关文章

Ansible——cron模块

目录 参数总结 示例1&#xff1a;创建一个定时任务 示例2&#xff1a;删除一个定时任务 示例3&#xff1a;每周一早上 3 点清理临时文件 示例4&#xff1a;每小时运行一次日志轮转 示例5&#xff1a;为指定用户添加一个定时任务 Playbook (YAML 格式) 中管理定时任务。 …

elasticsearch安装与使用(4)-搜索入门

1、创建索引 PUT /hotel {"mappings": {"properties":{"title":{"type": "text"},"city":{"type": "keyword"},"price":{"type":"double"}}} }2、写入文档 …

sentaurus修改界面字体

修改界面字体&#xff0c;view——table options——change table 在出现的选框中选择使用系统默认或者自定义字体

VBA经典应用69例应用5:使用VBA冻结窗格

《VBA经典应用69例》&#xff08;版权10178981&#xff09;&#xff0c;是我推出的第九套教程&#xff0c;教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开&#xff0c;这套教程案例众多&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以便…

代码随想录算法训练营第36期DAY49

DAY49 139单词拆分 没有思路。 回溯法 回溯怎么做呢&#xff1a;拼接str&#xff0c;看能不能拼出来。注意每个单词能用多次&#xff0c;不是用了就没。 但是语法还是难写。 自己的思路不好&#xff0c;题解思路&#xff1a;枚举所有分割字符串&#xff0c;判断是否在字典…

力扣每日一题85:最大矩形

题目 困难 相关标签 相关企业 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0",&q…

LeetCode-day06-3040. 相同分数的最大操作数目 II

LeetCode-day06-3040. 相同分数的最大操作数目 II 题目描述示例示例1&#xff1a;示例2&#xff1a; 思路代码 题目描述 给你一个整数数组 nums &#xff0c;如果 nums 至少 包含 2 个元素&#xff0c;你可以执行以下操作中的 任意 一个&#xff1a; 选择 nums 中最前面两个元…

使用 Django 和 MQTT 构建实时数据传输应用

文章目录 什么是 MQTT&#xff1f;Django 中的 MQTT结论 在现代的 Web 应用程序开发中&#xff0c;实时数据传输变得越来越重要。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布/订阅消息传输协议&#xff0c;而 Django 是一个流行的 Pyt…

如何解决访问网站时IP被限制的问题?

在互联网上&#xff0c;用户可能会面临一个令人困扰的问题——当尝试访问某个特定的网站时&#xff0c;却发现自己的IP地址被该网站屏蔽。 IP地址被网站屏蔽是一个相对常见的现象&#xff0c;而导致这种情况的原因多种多样&#xff0c;包括恶意行为、违规访问等。本文将解释IP地…

Linux进程基本概念

基本概念 内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的实体进程信息被放在一个叫做进程控制块的数据结构中&#xff0c;可以理解为进程属性的集合&#xff08;PCB&#xff09;在Linux中描述进程的结构体叫做task_structtask_struc…

qt自定义事件过滤器

以下是一个完整的示例&#xff0c;包括如何使用这个事件过滤器的步骤&#xff1a; 1. 定义事件过滤器类 你已经正确定义了 LostFocusFilter 类&#xff0c;这里是完整的定义&#xff1a; #include <QObject> #include <QEvent>class LostFocusFilter : public Q…

自然语言处理:第三十二章HippoRAG:性能提高20% - 受海马体启发的RAG

文章链接: HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models 项目地址: OSU-NLP-Group/HippoRAG: HippoRAG is a novel RAG framework inspired by human long-term memory that enables LLMs to continuously integrate knowledge across e…

2024-06-08 问AI: 大语言模型中,思维链CoT是什么?

文心一言 在大语言模型中&#xff0c;思维链&#xff08;Chain-of-Thought, CoT&#xff09;是一种改进的提示策略&#xff0c;旨在提高大语言模型&#xff08;LLM&#xff09;在复杂推理任务中的性能。以下是对思维链CoT的详细解释&#xff1a; 定义&#xff1a; 思维链CoT是…

利用单调栈思路解决递增关系数据问题

利用单调栈思路解决递增关系数据问题 一、题目描述二、解题思路思路1&#xff1a;思路2&#xff1a; 三、代码实现1&#xff1a;暴力法2&#xff1a;单调栈 一、题目描述 在对数据进行排序的过程中&#xff0c;通常采用取1个数作为主元&#xff0c;通过比较交换&#xff0c;把…

学习分享-注册中心Naocs的优雅上下线

前言 学习微服务-分享一下Naocs的优雅上下线 Nacos Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴开源的一款用于动态服务发现、配置管理和服务管理的系统。Nacos 提供了丰富的功能&#xff0c;以便在分布式系统中进行服务管理和配置管…

Vue3 + TS + Antd + Pinia 从零搭建后台系统(一) 脚手架搭建 + 入口配置

简易后台系统搭建开启&#xff0c;分几篇文章更新&#xff0c;本篇主要先搭架子&#xff0c;配置入口文件等目录 效果图一、搭建脚手架&#xff1a;二、处理package.json基础需要的依赖及运行脚本三、创建环境运行文件四、填充vue.config.ts配置文件五、配置vite-env.d.ts使项目…

二百三十九、Hive——Hive函数全篇

--创建测试数据库test show databases ; create database if not exists test; use test;一、关系运算 1、等值比较&#xff1a; select 1 where 1 1; --1 select 1 where 0 1; --NULL 2、不等值比较&#xff1a;<> select 1 where 1 <> 2; --1 sele…

java 大型企业MES生产管理系统源码:MES系统与柔性化产线控制系统的关系、作用

MES定义为“位于上层的计划管理系统与底层的工业控制之间的面向车间层的管理信息系统”,它为操作人员/管理人员提供计划的执行、跟踪以及所有资源(人、设备、物料、客户需求等)的当前状态。 MES系统与柔性化产线控制系统的关系 MES&#xff08;制造执行系统&#xff09;是一种…

2003NOIP普及组真题 3. 数字游戏

线上OJ 地址&#xff1a; 【03NOIP普及组】数字游戏 此题考察的是 区间DP 前缀和 核心思想&#xff1a; 1、这道题主要考查了动态规划的思想。通过分析题目&#xff0c;可以发现需要 枚举环上所有划分为m组 的不同方案&#xff0c;来求得最大或最小值。属于 环上动态规划 问…

2024.6.7学习记录

1、css面试题复习加整理 2、dp刷题 也是水