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)

从库:

相关推荐
ss2731 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
瑞克-桑切斯1 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
z06.2 小时前
MySQL索引
数据库·mysql
考虑考虑2 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
云祺vinchin2 小时前
中小企业备份软件选型从恢复需求到总体成本评估
数据库·数据备份·中小企业备份·容灾备份软件
Zenova EdgeOS2 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
KKKlucifer3 小时前
国内数据安全服务的产品智能化转型:大模型赋能下的技术能力重构分析
大数据·数据库·重构
字节跳动开源3 小时前
OpenViking 上线原生 3D 内容理解模型
数据库·开源
CCIE-Yasuo6 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
这个DBA有点耶6 小时前
内核级AI与多模融合:AI数据库在海外场景的落地要点
数据库·人工智能·架构