MySQL8.0复制原理和部署配置步骤

news2025/1/5 19:24:21

1. mysql 主从复制原理

  1. 在从库上执行change master to;会将主库的信息保存到从库中的master.info文件中
  2. 在从库执行start slave;开启io_thread, sql_thread线程;
  3. io_thread工作;io_thread通过master.info文件中主库的连接信息去连接主库;连接成功后主库就会开启dump_thread;
  4. dump_thread读取主库新产生的二进制日志;然后投递给io_thread;
  5. io_thread接收dump_thread投递的新的二进制日志,将日志写入到relay log(中继日志);
  6. io_thread就会等待主库dump_thread主动把新产生的二进制日志投递;
  7. sql_thread会将relay log新产生的日志恢复到数据库,写到磁盘

2. 环境规划

IP

hostname

说明

192.168.50.80

db01

主库

192.168.50.81

db02

从库

2.1. 修改SELINUX

echo "SELINUX=disabled" > /etc/selinux/config
echo "#SELINUXTYPE=targeted " >> /etc/selinux/config
cat /etc/selinux/config
setenforce 0

2.2. 关闭防火墙

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

2.3. 关闭透明大页

echo never > /sys/kernel/mm/transparent_hugepage/enabled

2.4. 内核参数配置

vi /etc/sysctl.conf

net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
vm.swappiness=0

执行sysctl -p 命令是配置生效

2.5. 修改用户资源限制

/etc/security/limits.conf

mysql soft nofile 65535 
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535

3. 安装MySQL数据库

3.1. 下载mysql8,

下载rpm bundle包上传到centos系统上。官网 MySQL :: Download MySQL Community Server (Archived Versions)

或者在云盘下载:

通过百度网盘分享的文件:mysql-8.0.33-1.el7.x86_64.rpm-bundl...

链接:百度网盘 请输入提取码

3.2. 解压bundle包

tar xvf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar

3.3. 卸载mariadb

rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-*

3.4. 安装 MYSQL

rpm -ivh mysql-community-common-8.0.33-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm mysql-community-libs-8.0.33-1.el7.x86_64.rpm mysql-community-client-8.0.33-1.el7.x86_64.rpm mysql-community-icu-data-files-8.0.33-1.el7.x86_64.rpm mysql-community-server-8.0.33-1.el7.x86_64.rpm

3.5. 初始化MySQL并启动

#初始化
mysqld --initialize --console
#授权mysql用户
chown -R mysql:mysql /var/lib/mysql/
启动服务
systemctl start mysqld

systemctl enable mysqld
#查看初始化密码
cat /var/log/mysqld.log  | grep localhost

第二台主机上面执行

3.6. 登录MySQL和配置用户

mysql -u root -p #登录,输入密码

3.7. 修改密码,开启远程

#修改登录密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'my@123';
#切换到mysql数据库
use mysql;
#开启数据库远程管理
update user set Host='%' where User='root';
flush privileges;

4. 主从配置

4.1. 确保你已经安装了MySQL 8.0并且两个服务器(主服务器和从服务器)都已经正常运行。

4.2. 在主服务器(db01)上修改配置文件(my.cnf或my.ini)新增下面参数:

cat  >> /etc/my.cnf <<EOF
#服务器 id,随意,但要唯一
server-id = 1  
#二进制文件存放路径
log-bin = mysql-bin 
#参数用于排除自带的数据库。  
binlog-ignore-db = mysql 
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
#二进制日志格式,建议使用ROW格式以获得更好的兼容性和可靠性。
binlog-format = ROW 
EOF

重启从服务以使配置更改生效。

systemctl restart mysqld

4.3. 在主服务器的数据库中创建用于复制的账户并授予相应的权限。

#登录MySQL
mysql -uroot -pmy@123

use mysql;
#创建用户
CREATE USER 'db_sync'@'%' IDENTIFIED BY 'my@123';
#授权账号复制权限
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%';
#刷新配置
FLUSH PRIVILEGES;

4.4. 在主服务器上执行以下命令获取当前二进制日志文件的名称和位置:

SHOW MASTER STATUS;

4.5. 在从服务器(db02)上修改配置文件(my.cnf或my.ini),找到并编辑以下参数:

cat >>/etc/my.cnf <<EOF

server-id = 2
#中继日志文件的名称,用于从主服务器接收二进制日志事件。
relay-log = mysql-relay-bin 
#从服务器的二进制日志文件的名称。
log_bin = mysql-bin 
#不同步相关的库
replicate-ignore-db = mysql 
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema

EOF

4.6. 配置主从

登录从服务器(db02)MySQL上更据主服务器建立的账号和show master status;显示的内容,修改以下命令配置主从复制:(根据第2.4上的内容修改)

mysql -u root -pmy@123

STOP SLAVE;

CHANGE MASTER TO
 MASTER_HOST = '192.168.50.81',
 MASTER_USER = 'db_sync',
 MASTER_PASSWORD = 'my@123',
 #主服务器数据库上的file值(不能有空格)
 MASTER_LOG_FILE = 'mysql-bin.000001',
 #主服务器数据库的Position值
 MASTER_LOG_POS = 157,
 get_master_public_key=1;

4.7. 在从服务器启动同步并查看状态

start slave;

4.8. 查看同步状态

SHOW SLAVE STATUS\G;

5. 测试数据插入

[root@db01 opt]# mysql -uroot -pmy@123
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

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

mysql> use testhf
Database changed
mysql> CREATE TABLE testhf (
    -> id INT AUTO_INCREMENT PRIMARY KEY,
    -> name VARCHAR(100) NOT NULL,
    -> salary DECIMAL(10, 2),
    -> date   DATETIME
    -> );

mysql> INSERT INTO testhf (name, salary,date) VALUES ('Alice', 5000.00,sysdate());
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO testhf (name, salary,date) VALUES ('Alice', 5000.00,sysdate());
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO testhf (name, salary,date) VALUES ('Alice', 5000.00,sysdate());
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO testhf (name, salary,date) VALUES ('Alice', 5000.00,sysdate());
Query OK, 1 row affected (0.01 sec)
mysql> select * from testhf.testhf;
+----+-------+---------+---------------------+
| id | name  | salary  | date                |
+----+-------+---------+---------------------+
|  1 | Alice | 5000.00 | 2025-01-03 17:24:04 |
|  2 | Alice | 5000.00 | 2025-01-03 17:24:12 |
|  3 | Alice | 5000.00 | 2025-01-03 17:24:13 |
|  4 | Alice | 5000.00 | 2025-01-03 17:24:14 |
|  5 | Alice | 5000.00 | 2025-01-03 17:24:16 |
+----+-------+---------+---------------------+

6. 从库状态

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.50.81
                  Master_User: db_sync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 2239
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 2408
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB: mysql,information_schema,performance_schema
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 2239
              Relay_Log_Space: 2618
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 50a17fe2-c9af-11ef-b491-000c297836df
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
       Master_public_key_path:
        Get_master_public_key: 1
            Network_Namespace:
1 row in set, 1 warning (0.00 sec)



-- show slave status \G; 查看从库状态

Master_Host: 192.168.50.81 主库ip
Master_User: db_sync 主库用户
Master_Port: 3306 主库端口号
Connect_Retry:60 失败连接的次数

Master_Log_File: mysql-bin.000001 当前从库io_thread正在读取主库的二进制日志文件
Read_Master_Log_Pos: 2239 当前从库io_thread正在读取主库二进制日志文件的位置   --【主库:show master status;】

Relay_Log_File: mysql-relay-bin.000002 当前从库sql_thread正在读取从库的中继日志文件
Relay_Log_Pos: 2199 当前sql_thread正在读取从库中继日志文件的位置

Relay_Master_Log_File: mysql-bin.000001 当前从库sql_thread从relay log中读取的正在进行的sql语句,对应主库的sql语句是在哪个binlog中;
Exec_Master_Log_Pos: 1986 从库sql_thread当前执行的事件,对应主库的binlog中的position

Seconds_Behind_Master: 0 主从复制延迟的时间;如果是0表示主从无延迟

Last_IO_Error 显示io线程错误信息
Last_SQL_Error 显示sql线程错误信息

SQL_Delay: 0 延迟复制

Retrieved_Gtid_Set: 94fc1fbe-b7a0-11eb-b0a0-000c2969aba1:17 当前io_thread已经接受到的binlog
Executed_Gtid_Set: 92fbca79-b219-11eb-9222-000c29a1a06e:1-2, 94fc1fbe-b7a0-11eb-b0a0-000c2969aba1:1-17    当前从库sql_thread执行的二进制日志位置



-- 过滤复制条件,从库上面配置的
Replicate_Do_DB:
Replicate_Ignore_DB: mysql,information_schema,performance_schema
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:

7. 常用命令:

  1. start slave; 开启io_thread和sql_thread
  • start slave io_thread;
  • start slave sql_thread;

  1. stop slave; 关闭io_thread和sql_thread
  • stop slave io_thread;
  • stop slave sql_thread;

  1. show processlist;

  1. reset slave; --【从库执行】
  • 删除master.info,relay-log.info数据;删除所有relay log;将延迟选项master_delay设为0;
  • Reset slave all 相对于RESET SLAVE,RESET SLAVE ALL还会删除内存中的连接信息,这个时候,执行start slave会报错。
  1. reset master;删除所有的二进制日志文件 --【主库操作前要备份好日志】

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

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

相关文章

智联视频超融合平台:电力行业的智能守护者

文章目录 一、远程实时监控与设备状态监测二、提高应急响应能力三、实现无人值守与减员增效四、保障电力设施安全与防范外部破坏五、提升电网运行管理效率与决策科学性六、助力电力企业数字化转型与智能化发展七、智联视频超融合平台 在当今数字化浪潮下&#xff0c;视频联网平…

上传本地项目或文件到SVN服务器(图片讲解,超简单)

上传本地项目或文件到SVN服务器&#xff08;图片讲解&#xff0c;超简单&#xff09; 1、使用TortoiseSVN2、输入SVN远程仓库地址3、添加文件或文件夹 需求&#xff1a;将本地的文件上传到SVN服务器上指定路径。前提&#xff1a;已经安装好TortoiseSVN 1、使用TortoiseSVN 右…

单周期CPU电路设计

1.实验目的 本实验旨在让学生通过设计一个简单的单周期 CPU 电路&#xff0c;深入理解 RISC-V 指令集的子集功能实现&#xff0c;掌握数字电路设计与实现的基本流程&#xff0c;包括指令解析、部件组合、电路设计以及功能仿真等环节&#xff0c;同时培养verilog HDL编程能力和…

ROS功能包开机自启动(2步解决)

为了实现小车在开机后能自动启动相关功能模块需要解决两个问题 1.准备启动脚本文件加载对应的rosnode和roslaunch&#xff0c;整合相关节点按需要顺序进行&#xff0c;防止报错 2.设置开启启动脚本相关内容 既然是自启动&#xff0c;不能避免USB数据传输的一些问题&#xff…

【ArcGISPro/GeoScenePro】解决常见的空间参考和投影问题

修复空间参考缺失的图像 数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 查看属性坐标 查看属性范围 范围值并不是零或接近于零。 这意味着栅格具有范围,因此其已正确进行

NLP 中文拼写检测纠正论文-08-Combining ResNet and Transformer

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

【paddle】初次尝试

张量 张量是 paddlepaddle&#xff0c; torch&#xff0c; tensorflow 等 python 主流机器学习包中唯一通货变量&#xff0c;因此应当了解其基本的功能。 张量 paddle.Tensor 与 numpy.array 的转化 import paddle as paddle import matplotlib.pyplot as plt apaddle.to_t…

如何在谷歌浏览器中使用屏幕录制功能

在日常使用电脑的过程中&#xff0c;我们经常会遇到需要记录屏幕操作的情况。无论是制作教学视频、保存游戏过程还是记录会议内容&#xff0c;谷歌浏览器的屏幕录制功能都能帮助我们轻松实现这些需求。那么&#xff0c;如何在谷歌浏览器中启用并使用屏幕录制功能呢&#xff1f;…

万里数据库GreatSQL监控解析

GreatSQL是MySQL的一个分支&#xff0c;专注于提升MGR&#xff08;MySQL Group Replication&#xff09;的可靠性及性能。乐维监控平台可以有效地监控GreatSQL&#xff0c;帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理&#xff0c;收集数据库性…

APM 3.0.2 | 聚合B站、油管和MF的音乐播放器,支持歌词匹配

APM&#xff08;Azusa-Player-Mobile&#xff09;是一款基于B站的第三方音频播放器&#xff0c;现已扩展支持YouTube Music、YouTube、本地音乐、AList和MusicFree等平台。它不仅提供视频作为音频播放&#xff0c;还具备排行榜、分区动态等功能。用户可以通过添加Alist地址接入…

HTML——61. 单行文本框和密码输入框(主讲input元素的type属性)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>单行文本框和密码输入框</title></head><body><!--input元素的type属性&#xff1a;(必须要有)--> <!--单行文本框:1.type"text"2.可…

在Typora中实现自动编号

文章目录 在Typora中实现自动编号1. 引言2. 准备工作3. 自动编号的实现3.1 文章大纲自动编号3.2 主题目录&#xff08;TOC&#xff09;自动编号3.3 文章内容自动编号3.4 完整代码 4. 应用自定义CSS5. 结论 在Typora中实现自动编号 1. 引言 Typora是一款非常流行的Markdown编辑…

微机——计算机中的数制

目录 数制转换&#xff1a; 十进制数转为非十进制数&#xff1a; 二、八、十六进制数之间的转换&#xff1a; 数及字符的表示&#xff1a; 二进制数的加减运算&#xff1a; 无符号数的运算&#xff1a; 带符号数运算中的溢出问题&#xff1a; 计算机中常用的编码&#…

设计心得——流程图和数据流图绘制

一、流程图和数据流图 在软件开发中&#xff0c;画流程图和数据流图可以说是几乎每个人都会遇到。 1、数据流&#xff08;程&#xff09;图 Data Flow Diagram&#xff0c;DFG。它可以称为数据流图或数据流程图。其主要用来描述系统中数据流程的一种图形工具&#xff0c;可以将…

Node 如何生成 RSA 公钥私钥对

一、引入crypto模块 crypto 为node 自带模块&#xff0c;无需安装 const crypto require(crypto);二、封装生成方法 async function generateRSAKeyPair() {return new Promise((resolve, reject) > {crypto.generateKeyPair(rsa, {modulusLength: 2048, // 密钥长度为 …

壁纸样机神器,可以导出高清图片吗?

壁纸样机神器确实支持导出高清图片。根据搜索结果中的信息&#xff0c;壁纸样机神器提供了以下功能&#xff1a; 壁纸样机神器免费体验 高清壁纸上传&#xff1a;壁纸样机神器支持上传您自己的壁纸图片&#xff0c;推荐尺寸为1290 2796&#xff08;9:19.5&#xff09;&#xf…

数据挖掘——神经网络分类

神经网络分类 神经网络分类人工神经网络多层人工神经网络 误差反向传播&#xff08;BP&#xff09;网络后向传播算法 神经网络分类 人工神经网络 人工神经网络主要由大量的神经元以及它们之间的有向连接构成。包含三个方面&#xff1a; 神经元的激活规则 主要是指神经元输入…

快速上手LangChain(三)构建检索增强生成(RAG)应用

文章目录 快速上手LangChain(三)构建检索增强生成(RAG)应用概述索引阿里嵌入模型 Embedding检索和生成RAG应用(demo:根据我的博客主页,分析一下我的技术栈)快速上手LangChain(三)构建检索增强生成(RAG)应用 langchain官方文档:https://python.langchain.ac.cn/do…

Json字符串解析失败

通过第三方服务&#xff0c;拿到响应体的data对象&#xff08;拿到的时候对象是有值的&#xff09; 通过JSON.parseObject方法&#xff0c;拿到的对象&#xff0c;值为null 通过查看对应的json字符串&#xff0c;发现命名不一样... JSONField SeriealizedName注解是用来解析j…

网络安全 | 信息安全管理体系(ISMS)认证与实施

网络安全 | 信息安全管理体系&#xff08;ISMS&#xff09;认证与实施 一、前言二、信息安全管理体系&#xff08;ISMS&#xff09;概述2.1 ISMS 的定义与内涵2.2 ISMS 的核心标准 ——ISO/IEC 27001 三、信息安全管理体系&#xff08;ISMS&#xff09;认证3.1 认证的意义与价值…