将已有的MySQL8.0单机架构变成主从复制架构

过程: 把数据库做一个完全备份, 恢复到从节点上, 恢复后从备份的那个点开始往后复制,从而保证后续数据的一致性。

步骤:

  1. 修改 master 主节点 的配置( server-id log-bin )
  2. master 主节点 完全备份( mysqldump )
  3. master 主节点 创建复制用户并授权
  4. master 主节点 将完全备份文件拷贝至从节点
  5. 修改 slave 从节点 的配置( server-id read-only )
  6. 修改 完全备份数据文件( 添加主节点的相关信息 )
  7. slave 从节点 还原备份( souce /data/all.sql )
  8. slave 从节点 开启复制( start slave; )
  9. 验证 主从复制架构

主节点

#修改master主节点的配置

bash 复制代码
#修改master主节点的配置
[root@centos8 ~]#vim /etc/my.cnf

[mysqld]
server-id=8

#MySQL老版本开启二进制日志
log-bin=/data/mysql/logbin/mysql-bin   #MySQL8.0二进制日志默认开启

新建目录并改所有者

bash 复制代码
mkdir -p /mysql/logbin/  #新建文件夹
chown -R mysql.mysql /mysql/logbin/  #赋权

重新启动数据库

bash 复制代码
systemctl restart mysqld

当前目录的二进制日志就生成了

#完全备份

生成备份文件

bash 复制代码
mysqldump -uroot -A -F --single-transaction --master-data=1 > /data/full_bak.sql
#-A :全部
#-F :刷新 

#创建复制用户并授权

bash 复制代码
#创建用户
mysql>create user repluser@"10.0.0.%" identified by "123456";
#授权
mysql>grant replication slave on *.* to repluser@"10.0.0.%";

#将备份文件复制到从节点

bash 复制代码
[root@centos8 ~]#scp /data/full_bak.sql 从节点:/data

从节点

#配置从节点

bash 复制代码
[root@centos8 ~]#vim /etc/my.cnf

[mysqld]
server-id=18
read-only

重启数据库

bash 复制代码
systemctl restart mysqld

#从节点修改备份文件

bash 复制代码
vim /data/full_bak.sql
bash 复制代码
CHANGE MASTER TO
MASTER_HOST='主节点',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,

#从节点还原备份

数据库的还原过程没必要记录二进制, 所以把二进制记录临时关闭

bash 复制代码
mysql> set sql_log_bin=0;

恢复数据库文件

bash 复制代码
mysql> source /data/full_bak.sql;

重新打开二进制日志

bash 复制代码
mysql>set sql_log_bin=1;

#从节点开始复制

线程开启

bash 复制代码
mysql> start slave;

验证是否开启

bash 复制代码
mysql> show slave status\G

增加新从

当性能耗尽之后再添加一个从节点,需重新在主节点备份

生成新的备份文件

bash 复制代码
mysqldump -uroot -A -F --single-transaction --master-data=1 > /data/full_bak2.sql
#-A :全部
#-F :刷新 

#将备份复制到第二个从节点

bash 复制代码
[root@centos8 ~]#scp /data/full_bak2.sql 从节点:/data

打开备份文件

bash 复制代码
less full_bak2.sql

#从节点还原备份

关闭二进制

sql 复制代码
mysql> set sql_log_bin=0;

备份文件还原执行

sql 复制代码
mysql> source /data/full_bak2.sql;

重新打开二进制

sql 复制代码
mysql>set sql_log_bin=1;

手动执行还原命令(根据之前记录的命令)

sql 复制代码
CHANGE MASTER TO 
  MASTER_HOST='10.0.0.8',
  MASTER_USER='repluser',
  MASTER_PASSWORD='123456',
  MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=156;

#从节点开始复制

sql 复制代码
mysql> start slave;

这样就可以完成同步啦!!!!

随着从节点数量的增加,就会消耗主节点的dump线程, 就会增加主节点的性能压力

相关推荐
NiceCloud喜云10 分钟前
Anthropic 一周三连发:Cowork 多端、Fable 5 按需付费、J-space 论文的技术解读
java·服务器·网络·人工智能·ai
qeen8740 分钟前
【Linux】指令补充与shell的简单介绍
linux·运维·服务器
gs801401 小时前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
沙蒿同学1 小时前
当古诗词遇上 AI:从 38 万句诗词中取一个好名字
python·算法·架构
cyforkk1 小时前
MySQL锁机制详解:从乐观锁到悲观锁
数据库·mysql
shujudang1 小时前
深入数据架构选型:开源埋点系统 vs 企业级增长分析平台的工程与业务考量
架构·数据分析·开源
ShiXZ2132 小时前
指令集-SQL 常用指令速查手册
数据库·sql·mysql·oracle
一拳一个娘娘腔2 小时前
【后渗透-Linux篇】Linux 提权与逃逸:从 www-data到 root的蜕变
linux·运维·服务器
郑州光合科技余经理2 小时前
海外外卖平台源码改造实战——多语言核心代码实现
java·开发语言·前端·后端·mysql·架构·php
Dlrb12112 小时前
信息查询Web服务器-->电子商城信息查询项目
linux·服务器·数据库·html·嵌入式·epoll·数据查询