当前位置: 首页 > news >正文

【mysql】数据库存量数据双主实现

数据库存量数据双主实现

概述

在现代数据库管理中,主从复制是一种常见的数据同步技术,用于实现数据的高可用性和灾难恢复。本文将详细介绍如何配置MySQL的双主(仅对一个库进行写入),并展示一个实际的迁移过程。

步骤1:数据库配置

首先,我们需要在主数据库上停止程序以确保没有新数据写入 可以在运行中,并修改MySQL配置以启用二进制日志。

  1. 主库添加binlog配置,并设置不需要同步的数据库
[mysqld]
log-bin=db11
server_id=1
expire-logs-days = 7
# 设置不需要同步的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
  1. 备库添加binlog配置,并设置不需要同步的数据库
[mysqld]
log-bin=db12
server_id=2
expire-logs-days = 7
# 设置不需要同步的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

步骤2:创建复制用户

两台数据库上分别新建一个用于复制的用户,并授权。

-- 在主库上执行
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.17.2.12' IDENTIFIED BY 'Test@320';-- 在备库上执行
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.17.2.11' IDENTIFIED BY 'Test@320';

步骤4:数据备份与恢复

在主库上,使用innobackupex工具在主库上进行数据备份,并在从库上恢复数据。

# 主库上备份数据(实际数据55G数据耗时:5分钟)
innobackupex --use-memory=1G --user=root --password=Root@320 /tmp/backup_test
# 执行校验命令,返回ok即可。
innobackupex --apply-log /tmp/backup_test/2023-12-25_02-52-07
# 将备份数据传输到备库(实际数据55G数据耗时:15分钟)
scp -r /tmp/backup_test/* root@172.17.2.12:/tmp/

在备库上,停止MySQL服务,移动原有数据目录,并从备份中恢复数据。

systemctl stop mysqld
cd /var/lib/
mv mysql mysql.bak
mkdir mysql
mv /tmp/2023-12-25_02-52-07/* mysql/
chown -R mysql.mysql mysql
systemctl start mysqld

步骤5:查看主从库上的binlog偏移并配置

  1. 查看主库上备份时的binlog偏移量。
cat /var/lib/mysql/xtrabackup_binlog_info 

比如为db11.000001 154

  1. 查看备库当前binlog偏移量
show master status;

比如为db12.000001 154

  1. 在备库上,配置主从复制信息
CHANGE MASTER TO MASTER_HOST="172.17.2.11", MASTER_USER="repl", MASTER_PASSWORD="Test@320", MASTER_LOG_FILE="db11.000001", MASTER_LOG_POS=154;
  1. 在主库上,重新创建复制用户并配置主从复制信息。
# 上面备份文件直接覆盖了repl用户需要重新创建。
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.17.2.12' IDENTIFIED BY 'Test@320';
CHANGE MASTER TO MASTER_HOST="172.17.2.12", MASTER_USER="repl", MASTER_PASSWORD="Test@320", MASTER_LOG_FILE="db12.000001", MASTER_LOG_POS=154;

步骤6:启动复制并检查状态

主备两台数据库上启动复制,并检查复制状态。

START SLAVE;
SHOW SLAVE STATUS\G;

一旦复制状态正常Slave_IO_RunningSlave_SQL_Running两个状态为yes。启动后再次检查主从状态是否正常,并持续观察。

检查

简单的sql查看表行数

SELECT table_name AS ‘表名’, TABLE_ROWS AS ‘行数’
FROM information_schema.TABLES
WHERE table_schema = ‘你的数据库名’;

不准。

可以使用直接select count(*) from '表名’或者安装percona-toolkit,使用pt-table-checksum命令校验。


http://www.mrgr.cn/news/79624.html

相关文章:

  • 北京大学《操作系统原理》课堂笔记(一)
  • LLM - 多模态大模型的开源评估工具 VLMEvalKit 部署与测试 教程
  • leetcode-54.螺旋矩阵-day1
  • Adobe Premiere Pro 2024 [24.6.1]
  • 2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判
  • MySQL-DML之数据表操作
  • 递归算法题(1)
  • C++小小复习一下
  • SpringBoot3整合MyBatis
  • 2020 年“泰迪杯”数据分析职业技能大赛A 题教育平台的线上课程智能推荐策略
  • NanoLog起步笔记-4-Server端的两个线程
  • BottomNavigation
  • NanoLog起步笔记-1
  • ubuntu16.04部署dify教程
  • ESP32开发 云调试
  • 加强版第十二章 开闭操作
  • 协程设计原理与实现
  • QT 多级嵌套结构体,遍历成员--半自动。<模板+宏定义>QTreeWidget树结构显示
  • 我们来学mysql -- 事务并发之不可重复读(原理篇)
  • Text2SQL(NL2sql)对话数据库:设计、实现细节与挑战