linux——主从同步

news2024/11/24 3:47:06

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.coloradmin.cn/o/1647883.html

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

相关文章

计算机视觉中的计算几何

计算几何领域出现于 20 世纪 70 年代&#xff0c;研究解决几何问题的数据结构和算法。这尤其包括确定图像内的拓扑结构&#xff0c;或者实际上是更高维的表示&#xff0c;例如点邻域&#xff0c;这可以帮助从数字图像数据等中导出几何意义[1]。 计算机视觉主要涉及静态或动态图…

利用傅里叶变换公式理解camera raw中的纹理和清晰度的概念(可惜的是camera raw的计算公式应该不会是这个傅里叶变换,只能说类似于这里的效果)

知乎说&#xff1a;在Adobe官方的解释中&#xff0c;就像图片可以分解成彩色通道&#xff08;如&#xff1a;红绿蓝通道&#xff09;&#xff0c;同样的&#xff0c;图片也可以分解成不同的频率&#xff0c;一张图片可以是由高频&#xff0c;中频和低频组成&#xff0c;例如&am…

500 Internal Server Error问题

总结 mysql语句有问题 #前端报错#后端报错 SQL错误&#xff0c;sql的where条件不全 delete from dish.flavor where dish.id#修改一番 #将in加上即可

如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

uniapp/微信小程序实现加入购物车点击添加飞到购物车动画

1、预期效果 2、实现思路 每次点击添加按钮时&#xff0c;往该按钮上方添加一个悬浮元素&#xff0c;通过位移动画将元素移到目标位置。 1. 为每个点击元素设置不同的class&#xff0c;才能通过uni.createSelectorQuery来获取每个元素的节点信息&#xff1b; 2. 添加一个与…

websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步

文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结&#xff08;陈硕老师的总结&#xff09; 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段&#xff1a;数据准备和数据读写。 我们的网络IO…

Redis教程——主从复制

在上篇文章我们学习了Redis教程——管道&#xff0c;这篇文章学习Redis教程——主从复制。 主从复制 为了数据更加安全可靠&#xff0c;在实际的项目中&#xff0c;肯定是有多个Redis服务&#xff0c;主机Redis以写为主&#xff0c;从机Redis以读为主&#xff0c;当主机Redis…

什么年代了,还在拿考勤说事

最近&#xff0c;看到了某公司的一项考勤规定&#xff1a;自然月内&#xff0c;事假累计超过3次或者累计请假时间超过8小时的&#xff0c;不予审批&#xff0c;强制休假的按旷工处理。 真的想吐槽&#xff0c;什么年代了&#xff0c;还在拿考勤说事&#xff0c;这是什么公司、什…

国内游戏公司Q1净利润大增40%以上,神州泰岳增幅65.62%

易采游戏网5月7日消息&#xff0c;近日多家国内知名游戏公司公布了其2024年第一季度的财务报告&#xff0c;其中净利润大增40%以上的数据引起了市场的广泛关注。这一业绩表现不仅远超市场预期&#xff0c;也再次证明了国内游戏行业的强劲增长势头。 据了解&#xff0c;这些游戏…

react【实用教程】 搭建开发环境(2024版)Vite+React (官方推荐)

以项目名 reactDemo为例 1. 下载脚手架 在目标文件夹中打开命令行 npm create vite2. 安装项目依赖 cd reactDemo npm i若安装失败&#xff0c;则修改下载源重试 npm config set registry https://registry.npmmirror.com3. 启动项目 npm run dev4. 预览项目 浏览器访问 http…

vue 百度地图点击marker修改marker图片,其他marker图片不变。

直接上代码 marker.name tag;marker.id i; //一定要设置id&#xff0c;我这里是设置的循环key值&#xff0c;要唯一性。map.addOverlay(marker);let pointAIcon2 new BMapGL.Icon(require("../xxxxx.png"), new BMapGL.Size(36, 52));let pointAIcon1 new BMapGL.I…

翔云优配官网美股市场分析问界回应M7事故四大疑问

问界再次新M7 Plus山西高速事故。 4月26日下午,山西运城曾有一辆问界新M7 Plus车辆(以下简称“事故车辆”)在高速行驶时和一辆高速洒水车追尾,碰撞后车辆起火,造成三人遇难,该事故引发了广泛关注。 翔云优配以其专业的服务和较低的管理费用在市场中受到不少关注。该平台提供了…

管理能力学习笔记九:授权的常见误区和如何有效授权

授权的常见误区 误区一&#xff1a;随意授权 管理者在授权工作时&#xff0c;需要依据下属的能力、经验、意愿问最自己&#xff1a;这项工作适合授权给Ta做吗&#xff1f;如果没有&#xff0c;可以通过哪些方法进行培训呢&#xff1f; 误区二&#xff1a;缺乏信任 心理暗示…

Photoshop中选区工具的应用

Photoshop中选区工具的应用 前言Photoshop中选区工具的基本操作创建选区的工具及方法选择、取消、隐藏选区选区的增加、减少选区的应用变换扩大选取与选取相似 Photoshop中采用快速选择工具来创建选区Photoshop中采用色彩范围命令来创建选区Photoshop中采用快速蒙版来创建选区P…

UV胶是什么材料制成的?

UV胶是一种特殊的胶水&#xff0c;由丙烯酸酯单体、活性稀释剂、光引发剂、助剂等材料制成的。它是指在紫外线照射下能够迅速固化的胶水。UV胶的主要成分是丙烯酸酯单体&#xff0c;它在没有紫外线照射时是液体状态&#xff0c;但一旦受到紫外线照射&#xff0c;就会迅速发生聚…

电脑如何查看一段时间内是否被人使用过?

前言 有时候我们可能会担心别人未经许可使用我们的电脑。为了确保自己不在场时电脑是否被使用过&#xff0c;以下两种方法可能会帮到你 第一种方法 WinX打开事件查看器。像WinX能快速打开很多东西&#xff0c;比如安装的应用(可以进行软件的删除)&#xff0c;设备管理器&…

生成requirements.txt文件

前言 对于Python项目&#xff0c;生成和使用requirements.txt是十分必要的。通过requirements.txt可以一次性保存和安装项目所需要的所有库。尤其是在复现github上的实验代码时。 方法1 常用的命令 pip freeze > requirements.txt然而这种方法并不好用&#xff0c;有时会…

影响项目成功的六个“致命”错误

项目经理作为项目的负责人&#xff0c;肩负着巨大的责任和挑战。他们需要具备专业知识、出色的综合管理能力以及敏锐的洞察力&#xff0c;以便在项目执行过程中及时关注项目动态&#xff0c;处理好各种问题&#xff0c;并避免那些可能影响项目实施的致命错误。 一、缺乏明确的…

社交媒体数据恢复:华为畅连

尊敬的用户您好&#xff0c;以下是关于社交软件华为畅连的聊天记录数据恢复教程。在华为手机中&#xff0c;我们可以通过华为云服务和第三方软件来恢复删除的聊天记录。以下是详细的步骤&#xff1a; 第一步&#xff1a;登录华为云服务 请在您的华为手机上找到并打开“云服务”…

Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南

文章目录 一、安装vscode和配置pyside6环境二、安装vscode扩展三、扩展配置编辑四、编辑运行 一、安装vscode和配置pyside6环境 这一步默认已经通过了 二、安装vscode扩展 三、扩展配置编辑 四个地方需要修改&#xff1b;rcc路径、uic路径、designer.exe路径 uic.exe 用于将…