linux——主从同步

1. 保证主节点开始二进制日志,从节点配置中继日志
2. 从节点的开启一个 I/O 线程读取主节点二进制日志的内容
3. 从节点读取主节点的二进制日志之后,会将去读的内容写入从节点的中继日志
4. 从节点开启 SQL 线程,读取中继日志的内容,并执行,来保证从节点的数据和主节点的数据保持一致
缺点:
1. 从节点只能从指定的偏移量开始同步数据,也就是说偏移量之前的数据无法通过主从同步去完善, 所以就需要通过逻辑备份等方式来导入到从节点。
2. 二进制日志因为只记录数据变化状态,而不是记录真实有哪些数据存在
主从同步的过程:
1. 分别修改主从节点的配置文件,启用对应类型的日志,需要配置局域网内数据库服务的编号,以区别不同的节点 需要重启服务
2. 在主节点授权,并导出二进制日志偏移量之前的数据,以方便后续数据的写入
3. 在从节点,连接主节点的二进制日志,开启从节点的相关线程
4. 检查从节点的主从同步状态
5. 导入提前备份的主节点数据
6. 在主节点新建数据,测试数据的同步的效果
在从节点写入的数据是不会同步到主节点的!!!!!
主节点: 192.168.110.50 - mysql-1
从节点: 192.168.110.60 - mysql-2
主节点:
server-id 区别局域网内的mysql服务器
log-bin 开启二进制日志。并制定二进制日志的文件名
[root@mysql-1 ~]# cat /etc/my.cnf //如果my.cnf中没有[mysqld],那么将下面的内
容写入 /etc/my.cnf.d./mysql-server.cnf
文件末尾新增如下内容,确保几行在[mysqld]的配置块中:
log_bin=source-bin
server_id=1
validate_password.policy = low
validate_password.length = 4
validate_password.mixed_case_count = 0
validate_password.special_char_count = 0
validate_password.number_count = 0
[root@mysql-1 ~]# rm -f /var/lib/mysql/source-bin.*
[root@mysql-1 ~]# systemctl restart mysqld
[root@mysql-1 ~]# firewall-cmd --add-service=mysql
success
[root@mysql-1 ~]# firewall-cmd --add-service=mysql --permanent
success
从节点:
server-id
relay-log: 开启中继日志,并指定中继日志的文件名
[root@mysql-2 ~]# cat /etc/my.cnf //如果my.cnf中没有[mysqld],那么将下面的内容
写入 /etc/my.cnf.d./mysql-server.cnf
#文件末尾新增,确保几行在[mysqld]的配置块中
server_id = 2
relay_log = relipca-relay
relay_log_index = relipca-relay-index
[root@mysql-2 ~]# rm -f /var/lib/mysql/reli*
[root@mysql-2 ~]# ls /var/lib/mysql/rel*
ls: cannot access '/var/lib/mysql/rel*': No such file or directory
[root@mysql-2 ~]# systemctl restart mysqld
2. 主节点创建同步用户
mysql> CREATE USER 'replica-user'@'192.168.110.%' IDENTIFIED BY
'redhat';
Query OK, 0 rows affected (0.01 sec)
mysql> select user from mysql.user where user = 'replica-user';
+--------------+
| user |
+--------------+
| replica-user |
+--------------+
1 row in set (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicauser'@'192.168.110.%';
Query OK, 0 rows affected (0.00 sec)
# 增加一个读锁,避免在成功建立主从复制架构前产生任何的数据读写
mysql> FLUSH TABLES WITH READ LOCK;
mysql> show master status;
+-------------------+----------+--------------+------------------+-----
--------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-----
--------------+
| source-bin.000001 | 730 | | |
|
+-------------------+----------+--------------+------------------+-----
--------------+
1 row in set (0.00 sec)
3. 主节点需要在开始主从同步之前,将部分数据预先导入从数据库,避免后续 SQL 写入失败。
1. 使用任意一种方式,实现数据迁移到从节点即可。
mysqldump 导出主节点有但是从节点没有的数据
mysql < dump.sql 从节点导入主节点备份的数据
4. 从节点同步主节点二进制日志
主节点:
mysql> UNLOCK TABLES;
从:
mysql> stop slave;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.110.50',
SOURCE_USER='replica-user', SOURCE_PASSWORD='redhat',
-> SOURCE_LOG_FILE='source-bin.000001', SOURCE_LOG_POS=730,
GET_MASTER_PUBLIC_KEY=1;
Query OK, 0 rows affected, 3 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 192.168.110.50
Master_User: replica-user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: source-bin.000001
Read_Master_Log_Pos: 730
Relay_Log_File: relipca-relay.000002
Relay_Log_Pos: 327
Relay_Master_Log_File: source-bin.000001
Slave_IO_Running: Yes //这两行的值必须是YES
Slave_SQL_Running: Yes //这两行的值必须是YES
Replicate_Do_DB:
Replicate_Ignore_DB:
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: 730
Relay_Log_Space: 535
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: 15bdf919-04f6-11ef-b4d0-000c29bbb601
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)
4. 验证主从同步
主节点创建库
从节点检查 同步成功
主:
mysql> create database testa;
Query OK, 1 row affected (0.01 sec)
从:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testa |
+--------------------+
5 rows in set (0.01 sec)
# 如果使用系统自带的mariadb数据库或者不是mysql 8.0.23以上的版本,实现下面的语句进行主节
点的连接参数配置
mysql> CHANGE MASTER TO
-> MASTER_HOST='source_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
Or from MySQL 8.0.23:
mysql> CHANGE REPLICATION SOURCE TO
-> SOURCE_HOST='source_host_name',
-> SOURCE_USER='replication_user_name',
-> SOURCE_PASSWORD='replication_password',
-> SOURCE_LOG_FILE='recorded_log_file_name',
-> SOURCE_LOG_POS=recorded_log_position;
5. 至此主从配置已经完成,但是部分数据还是未同步,现在在主节点上备份这个未同步的数据,并导
入从节点即可,(结合自己架构中是否需要进行数据导入操作)
1. 目前的演示环境下存在一个没有同步的 test 数据库,如果此时在主库从 test 库下的表进行写
入,从节点会因为需要在在从节点上不存在的表写入数据,而停止 SQL 线程,于是我们需要
test 的数据导入到从库中(演示插入了 5 ‘eee’ ) 从节点上 SQL 线程报错,同时也不存在
test 库 和 a 表。
主节点:
[root@mysql-1 ~]# mysqldump -u root -predhat --databases test > dump.sql
mysqldump: [Warning] Using a password on the command line interface can be
insecure.
[root@mysql-1 ~]# scp dump.sql root@192.168.110.60:/root
The authenticity of host '192.168.110.60 (192.168.110.60)' can't be
established.
ECDSA key fingerprint is SHA256:96uJaydFGQSVWCqYUABOjb+GQYl4fNla/WbPreRvsK0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.110.60' (ECDSA) to the list of known
hosts.
root@192.168.110.60's password:
dump.sql
100% 2050 1.2MB/s 00:00
从节点:
[root@mysql-2 ~]# mysql -u root -p'Redhat12~' < dump.sql
mysql: [Warning] Using a password on the command line interface can be
insecure.
主节点写入数据:
mysql> insert into test.a values(6, 'fff');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test.a values(7, 'ggg');
Query OK, 1 row affected (0.00 sec)
从节点查看同步的数据:
mysql> select * from test.a;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 5 | eee | //导入一次
| 5 | eee | //主从同步一次
| 6 | fff |
| 7 | ggg |
+------+------+
7 rows in set (0.01 sec)

加入新的从节点

两种方法:
1. 在新的从节点上,配置 change 语句即可
2. 从原本的从节点复制数据,修改配置文件并重启
1. 在原本的从节点上打包数据目录,方便传输
1. 原本从节点关闭数据库服务
2. tar ,命令打包
[root@mysql-2 ~]# systemctl stop mysqld
[root@mysql-2 ~]# cd /var/lib/mysql
[root@mysql-2 mysql]# tar -czf /root/salve1.tar.gz .
[root@mysql-2 ~]# scp slave1.tar.gz root@192.168.110.131:/root
root@192.168.110.131's password:
slave1.tar.gz
100% 2112KB 110.5MB/s
00:00
2. 将压缩包复制到新的从节点上
1. scp 传输压缩包
2. 启动数据库服务
[root@mysql-2 ~]# scp salve1.tar.gz root@192.168.110.131:/root
root@192.168.110.131's password:
salve1.tar.gz
100% 2108KB 116.2MB/s
00:00
[root@mysql-2 ~]# systemctl start mysqld
3. 确保从节点上新的数据的安全上下文以及权限正确
1. mysql 用户需要有完整的读写执行权限
2. 直接使用 restorecon 恢复数据目录的安全上下文为默认的标签
[root@bogon ~]# rm -rf /var/lib/mysql
[root@bogon ~]# mkdir /var/lib/mysql
[root@bogon ~]# tar -xzf salve1.tar.gz -C /var/lib/mysql/
[root@bogon ~]# chown mysql.mysql /var/lib/mysql
[root@bogon ~]# restorecon -R /var/lib/mysql
4. 在新的从节点上
1. 删除 /var/lib/mysql/auto.cnf
2. 修改配置文件
1. server_id // 值和目前主从复制架构下的任何数据库的 server_id 的值不重复
2. relay_log 相关的配置和原本的从节点保持一致
3. skip_slave_start 在启动数据库时,跳过从节点复制线程的启动
[root@bogon ~]# rm -f /var/lib/mysql/auto.cnf
[root@bogon ~]# vim /etc/my.cnf
# 添加如下内容
server_id=3
skip-slave-start=1
relay_log = relipca-relay
relay_log_index = relipca-relay-index
5. 新的从节点上,启动数据库服务
1. 检查主从配置和原本从节点配置是否一致 show slave status host /user /log/pos
2. 执行 start slave 启动从线程。
[root@bogon ~]# systemctl start mysqld
[root@bogon ~]# mysql -uroot -p'Redhat12~'

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
6. 测试数据同步的效果
1. 在主节点写如任何数据,都会主动同步到所有的从节点上去完成
主:
mysql> insert into test.a values(8, 'hhh');
Query OK, 1 row affected (0.00 sec)
从1:
mysql> select * from test.a;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 5 | eee |
| 5 | eee |
| 6 | fff |
| 7 | ggg |
| 8 | hhh |
+------+------+
8 rows in set (0.00 sec)
从2:
mysql> select * from test.a;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 5 | eee |
| 5 | eee |
| 6 | fff |
| 7 | ggg |
| 8 | hhh |
+------+------+
8 rows in set (0.04 sec)

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

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

相关文章

当AI遇见现实:数智化时代的人类社会新图景

文章目录 一、数智化时代的机遇二、数智化时代的挑战三、如何适应数智化时代《图解数据智能》内容简介作者简介精彩书评目录精彩书摘强化学习什么是强化学习强化学习与监督学习的区别强化学习与无监督学习的区别 前言/序言 随着科技的日新月异&#xff0c;我们步入了一个前所未…

运维自动化之 ansible

目录 一 常见的自动化运维工具 &#xff08;一&#xff09;有哪些常见的 自动化运维工具 &#xff08;二&#xff09;为什么后面都变成用 ansible 二 ansible 基本介绍 1&#xff0c; ansible 是什么 2&#xff0c;ansible能干什么 3&#xff0c;ansible 工作原…

无人机+三维建模:倾斜摄影技术详解

无人机倾斜摄影测量技术是一项高新技术&#xff0c;近年来在国际摄影测量领域得到了快速发展。这种技术通过从一个垂直和四个倾斜的五个不同视角同步采集影像&#xff0c;从而获取到丰富的建筑物顶面及侧视的高分辨率纹理。这种技术不仅能够真实地反映地物情况&#xff0c;还能…

(双指针) 有效三角形的个数 和为s的两个数字 三数之和 四数之和

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、有效三角形的个数&#xff08;medium&#xff09; 1.1、题目 1.2、讲解算法原理 1.3、编写代码 二、和为s的两个数字 2.1、题目 2.2、讲解算…

笔记1--Llama 3 超级课堂 | Llama3概述与演进历程

1、Llama 3概述 https://github.com/SmartFlowAI/Llama3-Tutorial.git 【Llama 3 五一超级课堂 | Llama3概述与演进历程】 2、Llama 3 改进点 【最新【大模型微调】大模型llama3技术全面解析 大模型应用部署 据说llama3不满足scaling law&#xff1f;】…

【C++】深入剖析C++11中右值引用和左值引用

目录 一、左值引用 && 右值引用 二、左值引用于右值引用的比较 三、 右值引用使用场景和意义 1、函数返回值 ①移动赋值 ②移动构造 2、STL容器插入接口 ​3、完美转发 一、左值引用 && 右值引用 传统的C语法中就有引用的语法&#xff0c;而C11中新增了…

pygame鼠标绘制

pygame鼠标绘制 Pygame鼠标绘制效果代码 Pygame Pygame是一个开源的Python库&#xff0c;专为电子游戏开发而设计。它建立在SDL&#xff08;Simple DirectMedia Layer&#xff09;的基础上&#xff0c;允许开发者使用Python这种高级语言来实时开发电子游戏&#xff0c;而无需被…

淘宝霸屏必备!了解淘宝商品评论电商API接口

淘宝商品评论电商API接口是指用于获取淘宝商品评论信息的一种接口&#xff0c;通过该接口可以获取淘宝网上商品的评价内容、评价等级、评价数量等信息。通过了解并使用该接口&#xff0c;联讯数据能够帮助电商了解消费者对商品的评价情况&#xff0c;做好商品的推广和销售工作。…

力扣刷题:四数相加Ⅱ

题目详情&#xff1a; 解法一&#xff1a;暴力枚举 对于这道题&#xff0c;我们的第一思路就是暴力枚举&#xff0c;我们可以写一个四层的for循环进行暴力匹配&#xff0c;只要相加的结果等于0就进行统计。但是我们会发现&#xff0c;我们的事件复杂度为O(N^4)事件复杂度非常大…

【Word】写论文,参考文献涉及的上标、尾注、脚注 怎么用

一、功能位置 二、脚注和尾注区别 1.首先脚注是一个汉语词汇&#xff0c;论文脚注就是附在论文页面的最底端&#xff0c;对某些内容加以说明&#xff0c;印在书页下端的注文。脚注和尾注是对文本的补充说明。 2.其次脚注一般位于页面的底部&#xff0c;可以作为文档某处内容的…

机器人系统ros2内部接口介绍

内部 ROS 接口是公共 C API &#xff0c;供创建客户端库或添加新的底层中间件的开发人员使用&#xff0c;但不适合典型 ROS 用户使用。 ROS客户端库提供大多数 ROS 用户熟悉的面向用户的API&#xff0c;并且可能采用多种编程语言。 内部API架构概述 内部接口主要有两个&#x…

tcping的安装,ping和tcping的区别

ping和tcping的区别 功能不同&#xff1a; Ping&#xff1a;Ping是一种基于ICMP协议的网络工具&#xff0c;用于测试主机之间的连通性。它发送ICMP回显请求&#xff08;Echo Request&#xff09;到目标主机&#xff0c;并等待目标主机返回ICMP回显应答&#xff08;Echo Reply…

架构师:搭建Spring Security、OAuth2和JWT 的安全认证框架

1、简述 Spring Security 是 Spring 生态系统中的一个强大的安全框架,用于实现身份验证和授权。结合 OAuth2 和 JWT 技术,可以构建一个安全可靠的认证体系,本文将介绍如何在 Spring Boot 中配置并使用这三种技术实现安全认证,并分析它们的优点。 2、Spring Security Spri…

Java 笔记 13:Java 数组内容,数组的声明、创建、初始化、赋值等,以及内存分析

一、前言 记录时间 [2024-05-03] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 02&#xff1a;Java 开发环境的搭建&#xff0c;IDEA / Notepad / JDK 安装及环境配置&#xff0c;编写第一个 Java 程序 Java 笔记 …

会声会影电影片头怎么做 会声会影电影质感调色技巧 会声会影视频制作教程 会声会影下载免费中文版

片头通常通过一系列的图像、音乐和文字等元素来引入电影的主题和氛围。通过视觉和音频的呈现方式&#xff0c;给观众留下深刻的第一印象&#xff0c;为电影的故事铺设基础。这篇文章来学习一下会声会影电影片头怎么做&#xff0c;会声会影电影质感调色技巧。 一、会声会影电影…

ASP.NET视频点播系统的设计与实现

摘 要 本文阐述了基于WEB的交互式视频点播系统的协议原理、软件结构和设计实现。本视频点播系统根据流媒体传输原理&#xff0c;在校园局域网的基础上模拟基于Web的视频点播系统&#xff0c;实现用户信息管理、视频文件的添加、删除、修改及在线播放和搜索功能。本系统是一个…

XMall-Front:基于Vue.js的XMall商城前台页面的开发实践

XMall-Front&#xff1a;基于Vue.js的XMall商城前台页面的开发实践 摘要 随着电子商务的蓬勃发展&#xff0c;用户体验逐渐成为决定电商平台成功与否的关键因素。作为XMall商城项目的一部分&#xff0c;XMall-Front是基于Vue.js的前端页面开发&#xff0c;其目标是为用户提供…

关于地盘的紧固连接技术——SunTorque智能扭矩系统

底盘作为汽车的重要组成部分&#xff0c;其材料的选择和连接技术也日益受到关注。尤其是随着新能源汽车的兴起&#xff0c;底盘轻量化已成为一种趋势。在这一背景下&#xff0c;底盘新材料与紧固连接技术的研究和应用显得尤为重要。今天SunTorque智能扭矩系统和大家一起了解地盘…

Go通过CRUD实现学生管理系统

虽然这个项目没有什么含金量&#xff0c;但是可以熟悉go的语法和go开发项目的一般流程 项目结构 项目实现了五个功能&#xff1a; &#xff08;1)增加一个学生 &#xff08;2&#xff09;删除一个学生 &#xff08;3&#xff09;修改一个学生的信息 &#xff08;4&#xf…

9.4k Star!MemGPT:伯克利大学最新开源、将LLM作为操作系统、无限上下文记忆、服务化部署自定义Agent

9.4k Star&#xff01;MemGPT&#xff1a;伯克利大学最新开源、将LLM作为操作系统、无限上下文记忆、服务化部署自定义Agent 原创 Aitrainee | 公众号&#xff1a;AI进修生&#xff1a;AI算法工程师 / Prompt工程师 / ROS机器人开发者 | 分享AI动态与算法应用资讯&#xff0c;提…