MySQL - 主从同步

​​​​​​1.主从同步原理:

MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。

主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作。

  • MySQL内建的复制功能是构建大型、高性能应用程序的基础。

  • 通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行。

  • 复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器
    2、MySQL支持的复制类型

  • 基于语句(statement)的复制:在主服务器上执行SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。

  • 基于行(row)的复制 把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0开始支持。

  • 混合型(mixed)的复制 默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。

3、为什么要做主从复制

  • 灾备
  • 数据分布
  • 负载平衡
  • 读写分离
  • 提高并发能力

1.基于binlog的主从同步

1.1 主库配置

1.1.1 配置文件

root@openEuler-1 \~# vim /etc/my.cnf.d/mysql-server.cnf

root@openEuler-1 \~# systemctl restart mysqld.service

1.1.2 授权用户

sql 复制代码
mysql> create user rep@'172.25.254.%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to rep@'172.25.254.%';
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000003 |      680 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

1.2 从库配置

1.2.1 配置文件

root@openEuler-1 \~# vim /etc/my.cnf.d/mysql-server.cnf

root@openEuler-1 \~# systemctl restart mysqld

root@openEuler-1 \~# vim /etc/my.cnf.d/mysql-server.cnf

root@openEuler-1 \~# systemctl restart mysqld

1.2.2 设置从库的change master

sql 复制代码
mysql> change master to master_host='172.25.254.11',
    ->     master_user='rep',
    ->     master_password='123456',
    ->     master_log_file='binlog.000003',
    ->     master_log_pos=1202
    -> ;
Query OK, 0 rows affected, 8 warnings (0.04 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.12 sec)

1.2.3 查看是否配置成功

1.3 测试

主库创建数据库:

sql 复制代码
mysql> create database db1;
Query OK, 1 row affected (0.02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db1                |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use db1;
Database changed
mysql> create table t1(id int);
Query OK, 0 rows affected (0.14 sec)

mysql> insert into t1 values(1),(2),(3),(4);
Query OK, 4 rows affected (0.07 sec)
Records: 4  Duplicates: 0  Warnings: 0

从库查看是否存在:

2.基于gtid的主从同步配置

2.1 配置文件(三台同时进行)

首先停掉从库基于binlog的主从同步:

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.02 sec)

开启gtid:

gtid_mode=ON

enforce-gtid-consistency=ON

root@openEuler-1 \~# vim /etc/my.cnf.d/mysql-server.cnf

检查是否成功:

sql 复制代码
mysql> show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON        |
| gtid_executed                    |           |
| gtid_executed_compression_period | 0         |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+
9 rows in set (0.00 sec)


mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000004 |      157 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

设置从库的change master:

sql 复制代码
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)


mysql> change master to master_host='172.25.254.11',
    -> master_user='rep',
    -> master_password='123456',
    -> master_auto_position=1;
Query OK, 0 rows affected, 7 warnings (0.02 sec)

2.2 测试

主库:

sql 复制代码
mysql> create database db2;
Query OK, 1 row affected (0.00 sec)

从库:

相关推荐
珠***格16 分钟前
通信链路全打通:西格电力四可装置的 4G/5G + 加密认证技术详解
大数据·数据库·分布式·5g·架构·能源
盗理者17 分钟前
AI Agent 技能分享|从零实现 MCP Server,让 Agent 安全读取数据库
数据库·oracle
xqqxqxxq1 小时前
Redis 五大常用数据类型 + 通用命令笔记
数据库·redis·笔记
l1t1 小时前
DeepSeek总结的在 pg_stat_statements 中诊断高基数工作负载
数据库·缓存·postgresql
buyue__1 小时前
Python实现连接MySQL数据库并执行目录下的所有SQL文件,遇到错误时终止执行。
python·mysql
神奇霸王龙2 小时前
Agentic RAG 双硬门屠夫:5 旗舰实测
数据库·人工智能·ai·agent·ai编程·ai写作·rag
ACP广源盛139246256732 小时前
WAIC2026 国产算力浪潮下@ACP#IX8024 在算力矩阵中的定位与落地场景
大数据·数据库·人工智能·嵌入式硬件·线性代数·矩阵
snow@li2 小时前
MySQL:库表设计完整规范与实战方案
数据库·mysql
ClouGence2 小时前
数据库管理工具 CloudDM 4.1.0 发布,支持达梦、Cloudberry
数据库·开源
小白勇闯网安圈2 小时前
Django 模板复用、ORM 查询与多对多关系
数据库·python·django