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 ![](https://i-blog.csdnimg.cn/direct/caf8537ac7144635ab8e7662747e3062.png) \[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 ![](https://i-blog.csdnimg.cn/direct/8439eb21ac0548a6bbfc02d0e618eeab.png) \[root@openEuler-1 \~\]# systemctl restart mysqld \[root@openEuler-1 \~\]# vim /etc/my.cnf.d/mysql-server.cnf ![](https://i-blog.csdnimg.cn/direct/0477637825a04cf8b11e2e57d7785de5.png) \[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 查看是否配置成功 ![](https://i-blog.csdnimg.cn/direct/1084aa3d0fcb44c793e166187153f4a8.png) ### 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 ``` 从库查看是否存在: ![](https://i-blog.csdnimg.cn/direct/fc10045811c3438384acd384b923151e.png) ![](https://i-blog.csdnimg.cn/direct/ecb84188fefc46a591a1355b7f51c6c3.png) ## 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 ![](https://i-blog.csdnimg.cn/direct/772ea6557f004627a609f434ad9780cd.png) **检查是否成功:** ```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) ``` **从库:** ![](https://i-blog.csdnimg.cn/direct/105f8e6f1c7d4914be0d793a51d46ac8.png)

相关推荐
鹿角片ljp1 小时前
苍穹外卖 day05:店铺营业状态设置与Redis入门实战
数据库·redis·缓存
m0_743470372 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
Demon_Hao2 小时前
JAVA通过Redis实现Key分区分片聚合点赞、收藏等计数同步数据库,并且通过布隆过滤器防重复点赞
java·数据库·redis
掘根2 小时前
【微服务即时通讯】消息转发子服务
数据库·oracle
喜欢喝果茶.2 小时前
SQL 预处理
数据库·sql
数据科学小丫4 小时前
Python 数据存储操作_数据存储、补充知识点:Python 与 MySQL交互
数据库·python·mysql
Knight_AL4 小时前
Nacos 启动问题 Failed to create database ’D:\nacos\nacos\data\derby-data’
开发语言·数据库·python
xianjian09125 小时前
MySQL 的 INSERT(插入数据)详解
android·数据库·mysql
知识分享小能手5 小时前
MongoDB入门学习教程,从入门到精通,MongoDB入门指南 —— 知识点详解(2)
数据库·学习·mongodb
what_20186 小时前
PostgreSQL 索引
数据库·postgresql