找回密码
 立即注册
首页 业界区 安全 数据库主从同步架构

数据库主从同步架构

盖彗云 2026-3-10 00:20:06
数据库主从同步架构

(1)常见主从同步异常情况

IO线程异常
  1. -- IO线程状态显示为:connecting
  2. 异常问题原因01: 连接主库配置错误,主库网络或用户信息匹配从库配置信息
  3. 异常问题原因02: 主从之间网络通讯被阻止
  4. 异常问题原因03: 主从之间连接没有空闲连接数,可以实现主从建立连接了
  5. -- IO线程状态显示为:no
  6. 异常问题原因01:主从之间标识信息冲突 (server_id/server_uuid)
  7.         可以修改server_id/可以通过删除数据目录中 auto.cnf文件,重启数据库服务,可以获取新的uuid信息
  8. 异常问题原因02:需要加载的binlog日志在主库中找不到了
  9.         可以重新将主库数据做全备,从库重新加载全备数据,根据全备中位置点信息做主从重新配置
复制代码
SQL线程异常
  1. -- SQL线程状态显示:no
  2. 异常问题原因:不能正确读取中继日志信息,回放SQL语句
  3. 情况01:中继日志信息丢失损坏了
  4.        可以根据当前从库完成事务情况,对比主库中事务完成情况,回去对应事务位置点,利用位置点进行主从重新建立
  5.        reset slave all; change master to master_binlog=''  master_posxxxx='738';start slave;
  6. 情况02:回放SQL语句在从库中已经执行过了
  7.        当需要手动在数据库中写入数据信息时,现在从库做了操作,后又在主库中做了操作   
复制代码
解决SQL线程异常方法:
  1. 1)将SQL线程回放冲突信息删除清理
  2. 2) 将冲突数据错误信息进行忽略
  3.    vim /etc/my.cnf
  4.    slave_skip_errors=1007
  5. 避免以上SQL线程回放数据冲突情况:
  6. 1)在从库上设置只读功能,避免连接数据库错误导致SQL线程回放异常
  7.    read_only             - 针对普通用户设置只读功能
  8.    super_read_only       - 针对管理员设置只读功能
  9. 2) 不要进行主从搭建时,主从数据库实例使用不同版本
  10. 3) 在实现高可用架构搭建时,必须实现数据补偿功能
  11. 4)在实现双主架构搭建时,需要避免相同业务数据实现同步功能
复制代码
(2)数据库主从架构搭建过程
  1. 方法一:利用传统方式实现主从同步
  2. 方法二:利用GTID方式实现主从同步
  3. GTID实现主从同步原理
  4. -- 当开启GTID功能,会为每个数据库中完成的事务做编号处理  
  5. -- 主从数据库中都会加载应用binlog日志
  6. -- 实现主从之间binlog日志信息对比,就能自动完成数据主从同步
  7. 步骤一:编写配置文件开启GTID功能
  8. 主从数据库都需要开启
  9. vim /etc/my.cnf
  10. [mysqld]
  11. gtid-mode=on
  12. enforce-gtid-consistency=true
  13. -- 以上配置项表示开启GTID功能(主从数据库都需要配置)
  14. log-slave-updates=1  
  15. -- 以上配置项表示从库SQL线程回放数据操作后,会将操作信息记录到从库binlog日志中 (从库配置即可)
  16. /etc/init.d/mysqld restart
  17. 步骤二:主库备份数据/从库恢复数据
  18. create table xiaoA.t1 (id int);
  19. create table xiaoA.t2 (id int);
  20. -- 备份数据前,需要在主库中创建一些测试数据
  21. mysqldump -A --source-data >/backup/all-03-06.sql
  22. scp -rp /backup/all-03-06.sql 10.0.0.52:/backup
  23. mysql >source /backup/all-03-06.sql;
  24. 步骤三:设置主从同步功能
  25. CHANGE MASTER TO
  26.   MASTER_HOST='10.0.0.51',
  27.   MASTER_PORT=3306,
  28.   MASTER_USER='repl',
  29.   MASTER_PASSWORD='123456',
  30.   master_auto_position=1;
  31. 步骤四:激活主从功能并查看主从同步状态
  32. start slave;
  33. show slave status\G
  34. Retrieved_Gtid_Set: 1adc0957-1862-11f1-8fae-000c29fd5e80:3-4
  35. -- 表示主库给从库发送的事务信息
  36. Executed_Gtid_Set: 1adc0957-1862-11f1-8fae-000c29fd5e80:1-4
  37. -- 表示从库执行的事务信息
  38. mysqldump -A --source-data >/backup/all-03-06.sql
  39. Warning:
  40. A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions,
  41. even those that changed suppressed parts of the database.
  42. 当数据库开启GTID功能后,会为每个备份文件中事务信息设置事务编号,并存储到备份文件中
  43. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF.
  44. 数据库开启GTID功能后,如果不想存储事务编号信息到备份文件,请在备份时添加 --set-gtid-purged=OFF
  45. To make a complete dump, pass --all-databases --triggers --routines --events.
  46. 想实现完成数据备份,请在备份时添加 --all-databases --triggers --routines --events
  47. mysqldump -A --source-data --set-gtid-purged=OFF >/backup/all-03-06.sql
  48. -- 可以没有警告
  49. -- 在备份文件中是没有GTID事务编号信息,可以用于数据异常修复
  50. mysqldump -A --source-data --set-gtid-purged=ON >/backup/all-03-06.sql
  51. -- 会显示警告
  52. -- 在备份文件中是具有GTID事务编号信息,可以用于主从数据迁移
复制代码
  1. 方法三:实现主从延迟同步架构搭建
  2. 主从延迟架构:表示实现主从之间数据同步,不是实时同步,可以控制一定时间后再进行同步
  3. 主从延迟目的:可以实现主库数据的修复(DDL误操作)
  4. 搭建主从延迟架构
  5. 步骤一:构建好正常的主从同步架构
  6. 基于传统方式/基于GTID方式
  7. 步骤二:调整从库配置,实现延迟功能
  8. stop slave;
  9. change master to master_delay=300;
  10. start slave;
  11. 步骤三:主库中创建数据测试延迟功能
  12. ........
复制代码
利用延迟从库修复数据
  1. 步骤一:模拟删除数据信息
  2. create database xiaoB;  5
  3. create database xiaoC;  6
  4. create database xiaoD;  7
  5. drop database oldboy;   8
  6. 步骤二:利用延迟从库修复数据
  7. stop slave sql_thread; / stop slave;
  8. mysqldump -B oldboy --set-gtid-purged=OFF >/backup/oldboy.sql
  9. scp -rp /backup/oldboy.sql 10.0.0.51:/backup
  10. mysql> set global sql_log_bin=0;
  11. mysql> source /backup/oldboy.sql
  12. mysql> set global sql_log_bin=1;   
  13. -- 在主库中恢复延迟中的数据信息
  14. 步骤三:将延迟从库进行恢复
  15. start slave sql_thread; / start slave;
  16. change master to master_delay=0;
  17. -- 将延迟功能关闭
  18. start slave until sql_before_gtids="xxxx5:7";
  19. -- 只是将延迟事务中 5-7事务快速恢复
  20. mysqldump -B oldboy --set-gtid-purged=OFF >/backup/oldboy.sql
  21. start slave sql_thread; / start slave;
复制代码
搭建数据库服务高可用架构
  1. 搭建高可用架构目的:实现数据服务主库异常后,可以将从库自动切换为主库;
  2. 搭建高可用主从架构:
  3. 架构环境规划 -- centos 7.9
  4. 主库    10.0.0.51    8.0.36  MHA-node
  5. 从库    10.0.0.52    8.0.36  MHA-node
  6. 从库    10.0.0.53    8.0.36  MHA-node
  7. mgr     10.0.0.54    8.0.36  MHA-node MHA-manager
  8. MHA-manager: 管理程序包  负责监控和控制主从架构
  9. MHA-node   : 节点程序包  和管理程序进行对接
  10. 步骤一:在虚拟环境中部署安装数据库和MHA程序
  11. 主库安装程序信息
  12. 安装数据库8.0.36 程序 并实现程序正常运行 (二进制包)
  13. 安装MHA-node程序
  14. yum install perl-DBD-MySQL -y
  15. rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  16. yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  17. 从库安装程序信息
  18. 安装数据库8.0.36 程序 并实现程序正常运行 (二进制包)
  19. 安装MHA-node程序
  20. yum install perl-DBD-MySQL -y
  21. rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  22. yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  23. 管理节点程序信息
  24. 安装数据库8.0.36 程序 不需要程序正常运行 (二进制包)
  25. 安装MHA-node程序
  26. yum install perl-DBD-MySQL -y
  27. rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  28. yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  29. 安装MHA-manager程序
  30. yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
  31. rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
  32. yum localinstall -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
  33. 步骤二:在数据库和管理节点中做高可用环境配置
  34. 准备好主从同步架构环境 -- GTID(推荐)
  35. 实现主从数据库之间互信 -- ssh互信      
  36. 主库操作 -- 10.0.0.51
  37. rm -rf /root/.ssh
  38. ssh-keygen
  39. cd /root/.ssh
  40. mv id_rsa.pub authorized_keys
  41. scp  -r  /root/.ssh  10.0.0.52:/root
  42. scp  -r  /root/.ssh  10.0.0.53:/root
  43. ssh 10.0.0.52 date
  44. ssh 10.0.0.53 date
  45. -- 以上操作完毕,表示52和53都信任了51
  46. ssh 10.0.0.51 date
  47. ssh 10.0.0.53 date
  48. -- 以上操作完毕,表示51和53都信任了52
  49. ssh 10.0.0.51 date
  50. ssh 10.0.0.52 date
  51. -- 以上操作完毕,表示51和52都信任了53
复制代码
总结
  1. 01 数据库主从架构搭建
  2.    1)数据库主从常见异常情况: IO线程异常(connecting/no) SQL线程异常(no)
  3.    2)数据库主从架构搭建扩展:
  4.       1)利用GTID方式可以实现主从架构搭建
  5.       2)利用延迟从库实现主库数据修复  
  6. 02 数据库高可用架构搭建
  7.    1)搭建高可用架构目的
  8.    2)搭建高可用架构环境准备 (MHA-manger MHA-node)
  9.    3)搭建高可用架构安装程序 (环境配置--主从配置/实现主从互信)
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

3 天前

举报

您需要登录后才可以回帖 登录 | 立即注册