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.rhkb.cn/news/346189.html

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

相关文章

C++ 贪心算法——跳跃游戏、划分字母区间

一&#xff1a;跳跃游戏 55. 跳跃游戏 题目描述&#xff1a;给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1…

解决阿里云的端口添加安全组仍然无法扫描到

发现用线上的网站扫不到这个端口&#xff0c;这个端口关了&#xff0c;但是没有更详细信息了 我用nmap扫了一下我的这个端口&#xff0c;发现主机是活跃的&#xff0c;但是有防火墙&#xff0c;我们列出云服务器上面的这个防火墙list&#xff0c;发现确实没有5566端口 参考&a…

Mac环境下,简单反编译APK

一、下载jadx包 https://github.com/skylot/jadx/releases/tag/v1.4.7 下载里面的这个&#xff1a;下载后&#xff0c;找个干净的目录解压&#xff0c;我是放在Downloads下面 二、安装及启动 下载和解压 jadx&#xff1a; 下载 jadx-1.4.7.zip 压缩包。将其解压到你希望的目…

内网安全--隧道技术代理技术

注:本文仅做技术交流,请勿非法破坏... 目录 项目: 1-Ngrok 用法 2-Frp 用法 3-Nps 用法 4-Spp 用法 工具: windows下: Proxifier(推荐~) Sockscap ccproxy Linux下: Proxychains 用法 http://t.csdnimg.cn/88Ew7 隧道技术&#xff1a;解决不出网协议上线的问…

**《Linux/Unix系统编程手册》读书笔记24章**

D 24章 进程的创建 425 24.1 fork()、exit()、wait()以及execve()的简介 425 . 系统调用fork()允许父进程创建子进程 . 库函数exit(status)终止进程&#xff0c;将进程占用的所有资源归还内核&#xff0c;交其进行再次分配。库函数exit()位于系统调用_exit()之上。在调用fo…

“RabbitMQ入门指南:从入门到起飞,这一篇就够!打造高效消息通信系统的第一步“。

1.前言 RabbitMQ是一个开源的消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;的标准&#xff0c;并用Erlang语言编写。作为消息代理&#xff0c;RabbitMQ接收、存储和转发消息&#xff0c;帮助应用程序之间实现异步通信。它提供了一个强大而灵活…

Qt开发技术:Q3D图表开发笔记(四):Q3DSurface三维曲面图颜色样式详解、Demo以及代码详解

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139424086 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子网络科技博…

PawSQL优化 | 分页查询太慢?别忘了投影下推

​在进行数据库应用开发中&#xff0c;分页查询是一项非常常见而又至关重要的任务。但你是否曾因为需要获取总记录数的性能而感到头疼&#xff1f;现在&#xff0c;让PawSQL的投影下推优化来帮你轻松解决这一问题&#xff01;本文以TPCH的Q12为案例进行验证&#xff0c;经过Paw…

Redisson分布式锁原理解析

前言 首先Redis执行命令是单线程的&#xff0c;所以可以利用Redis实现分布式锁&#xff0c;而对于Redis单线程的问题&#xff0c;是其线程模型的问题&#xff0c;本篇重点是对目前流行的工具Redisson怎么去实现的分布式锁进行深入理解&#xff1b;开始之前&#xff0c;我们可以…

Vmess协议是什么意思? VLESS与VMess有什么区别?

VMess 是一个基于 TCP 的加密传输协议&#xff0c;所有数据使用 TCP 传输&#xff0c;是由 V2Ray 原创并使用于 V2Ray 的加密传输协议&#xff0c;它分为入站和出站两部分&#xff0c;其作用是帮助客户端跟服务器之间建立通信。在 V2Ray 上客户端与服务器的通信主要是通过 VMes…

ThinkPHP发邮件配置教程?群发功能安全吗?

ThinkPHP发邮件的注意事项&#xff1f;如何优化邮件发送的性能&#xff1f; 无论是用户注册、密码重置还是消息提醒&#xff0c;发送邮件都是一个常见的需求。AokSend将详细介绍如何在ThinkPHP框架中配置和发送邮件&#xff0c;帮助开发者轻松实现邮件功能。 ThinkPHP发邮件&…

43【PS 作图】颜色速途

1 通过PS让画面细节模糊&#xff0c;避免被过多的颜色干扰 2 分析画面的颜色 3 作图 参考网站&#xff1a; 色感不好要怎么提升呢&#xff1f;分享一下我是怎么练习色感的&#xff01;_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1h1421Z76p/?spm_id_from333.1007.…

【Python教程】3-控制流、循环结构与简单字符串操作

在整理自己的笔记的时候发现了当年学习python时候整理的笔记&#xff0c;稍微整理一下&#xff0c;分享出来&#xff0c;方便记录和查看吧。个人觉得如果想简单了解一名语言或者技术&#xff0c;最简单的方式就是通过菜鸟教程去学习一下。今后会从python开始重新更新&#xff0…

MySQL之查询性能优化(七)

查询性能优化 排序优化 无论如何排序都是一个成本很高的操作&#xff0c;所以从性能角度考虑&#xff0c;应尽可能避免排序或者尽可能避免对大量数据进行排序。前面已经提到了&#xff0c;当不能使用索引生成排序结果的时候&#xff0c;MySQL需要自己进行排序&#xff0c;如果…

人脸考勤项目实训

第一章 Python-----Anaconda安装 文章目录 第一章 Python-----Anaconda安装前言一、Anaconda是什么&#xff1f;二、Anaconda的前世今生二、Windows安装步骤1.官网下载2.安装步骤安装虚拟环境 总结 前言 工欲善其事必先利其器&#xff0c;项目第一步&#xff0c;安装我们的环境…

【Unity UGUI】Screen.safeArea获取异形屏数据失败

Screen.safeArea获取不到异形屏的尺寸位置等数据 检查AndroidManifest.xml文件是否有设置&#xff1a;android:theme"style/UnityThemeSelector"&#xff0c;没有加上即可 android:theme"style/UnityThemeSelector"

第1章Hello world 4/5:对比Rust/Java/C++创建和运行Hello world全过程:运行第一个程序

讲动人的故事,写懂人的代码 1.7 对比Rust/Java/C++创建和运行Hello world全过程 有了会听懂人类的讲话,还能做记录的编程助理艾极思,他们三人的讨论内容,都可以变成一份详细的会议纪要啦。 接下来,我们一起看看艾极思是如何记录下赵可菲创建和运行Java程序Hello world,…

简记:为Docker配置服务代理

简记 为Docker配置服务代理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/art…

Leetcode3040. 相同分数的最大操作数目 II

Every day a Leetcode 题目来源&#xff1a;3040. 相同分数的最大操作数目 II 解法1&#xff1a;记忆化搜索 第一步可以做什么&#xff1f;做完后&#xff0c;剩下要解决的问题是什么&#xff1f; 删除前两个数&#xff0c;剩下 nums[2] 到 nums[n−1]&#xff0c;这是一个…

分享一个 .NET Core Console 项目中应用 NLog 写日志的详细例子

前言 日志在软件开发中扮演着非常重要的角色&#xff0c;通常我们用它来记录应用程序运行时发生的事件、错误信息、警告以及其他相关信息&#xff0c;帮助在调试和排查问题时更快速地定位和解决 Bug。 通过日志&#xff0c;我们可以做到&#xff1a; 故障排除和调试&#xff…