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

MYSQL主从同步----1、基于binlog 2、基于gtid

目录

前提(无论是基于binlog还是基于gitd)

一、对MySQL主从同步的了解

1、MySQL支持的复制类型

2、为什么要做主从复制

3、主从复制原理---面试会考

二、基于binlog的主从同步

1、主库上的操作

        1)配置文件

        2)备份数据库(如果没有数据库则不用)

        3)授权用户(在mysql下)

        4)查看主库上的用户

2、从库上的操作(两个从库上都要操作)

        1)配置文件

        2)还原主库备份(如果步骤1的2)没有操作则不用)

        3)设置从库的change master

        4)开启主从库并查看是否配置成功

3、验证是否同步

二、基于gitd主从同步

1、在vim /etc/my.cnf里写入

2、从库配置change master 有两种方法

3、启动·主从配置

4、验证(验证方法与binlog一样)


前提(无论是基于binlog还是基于gitd)

主库与从库都要安装MySQL(安装方式看自己)----这里使用在线安装

[root@localhost ~]# dnf install -y mysql-server.x86_64 
[root@localhost ~]# systemctl start mysqld

注意主库与从库的系统得一致(比如都是openeuler系统或者其他)

一、对MySQL主从同步的了解

MySQL内建的复制功能是构建大型,高性能应用程序的基础 通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器

1、MySQL支持的复制类型

基于语句(statement)的复制 在主服务器上执行SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。 基于行(row)的复制 把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0开始支持。 混合型(mixed)的复制 默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。

2、为什么要做主从复制

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

3、主从复制原理---面试会考

主要基于MySQL二进制日志 主要包括三个线程(2个I/O线程,1个SQL线程)

       · 1、MySQL将数据变化记录到二进制日志中;
       · 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
       · 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库

二、基于binlog的主从同步

这里用一主二从来操作

1、主库上的操作

        1)配置文件

#进入文件输入 server_id=1 (id写自己的ip)
[root@openeuler ~]# vim /etc/my.cnf

#重新启动mysql
[root@localhost ~]# systemctl restart mysqld

        2)备份数据库(如果没有数据库则不用)

#db1为表 school为数据库
[root@openeuler ~]# mysqldump --opt -B db1 it school > db.sql

        3)授权用户(在mysql下)

mysql> create user rep@'172.16.%.%' identified with mysql_native_password by '123456';

mysql> grant replication slave on *.* to rep@'172.16.%.%';
# *.*表示 所有数据库.所有表

        4)查看主库上的用户

#记住自己的Flie 和 position
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 |      678 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2、从库上的操作(两个从库上都要操作)

        1)配置文件

#进入文件输入 server_id=1 (id写自己的ip)

[root@client ~]# vim /etc/my.cnf

#重新启动mysql
[root@client ~]# systemctl restart mysqld

        2)还原主库备份(如果步骤1的2)没有操作则不用)

[root@client ~]#mysql -uroot -pMySQL@123 < db.sql

        3)设置从库的change master

#master_host----主库的ip
#master_user----在授权用户时设置的 主库的用户
#master_password----在授权用户时设置的密码
#master_log_file----前面要求注意记住的flie名
#master_log_pos----前面要求注意记住的position
mysql> change master to
    -> master_host='192.168.131.20',
    -> master_user='rep',
    -> master_password='123456',
    -> master_log_file='binlog.000002',
    -> master_log_pos=678;
Query OK, 0 rows affected, 8 warnings (0.01 sec)

        4)开启主从库并查看是否配置成功

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

        这里注意出现两个yes才是配置成功

        出现以下这种情况则是配置失败,解决方式如下

[root@client ~]# mysqladmin -urep -p123456 -h192.168.131.20 ping

        如果又出现以下的情况

        就是防火墙没有关把防火墙关了就行了(主从库都关)-----systemctl stop firewalld

3、验证是否同步

在主库上建立一个数据库或者表看从库上是否同步(这里以建立数据库为例)

#在主库上先查看已有的数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

#创建一个school的数据库
mysql> create database school;
Query OK, 1 row affected (0.00 sec)

在从库上查看是否有该数据库

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

二、基于gitd主从同步

如果前有用主从同步得需要关闭(在mysql上)----stop slave;

配置与binlog差不多

1、在vim /etc/my.cnf里写入

#开启gtid
gtid_mode=ON
enforce-gtid-consistency=ON

主库一样

2、从库配置change master 有两种方法

#方法一
mysql> CHANGE MASTER TO
     >     MASTER_HOST = '192.168.131.20',
     >     MASTER_PORT = 3306,----可以不用写
     >     MASTER_USER = 'rep',
     >     MASTER_PASSWORD ='12456',
     >     MASTER_AUTO_POSITION = 1;

Or from MySQL 8.0.23:

#方法二
mysql> CHANGE REPLICATION SOURCE TO
     >     SOURCE_HOST ='192.168.131.20',
     >     SOURCE_PORT = 3306,----可以不用写
     >     SOURCE_USER = 'rep',
     >     SOURCE_PASSWORD = '123456',
     >     SOURCE_AUTO_POSITION = 1;

3、启动·主从配置

mysql> START SLAVE;
Or from MySQL 8.0.22:

mysql> START REPLICA;
#查看
mysql> START SLAVE STATUS;

4、验证(验证方法与binlog一样)

        在主库上

#创建数据库以及表并写内容
mysql> create database school;
Query OK, 1 row affected (0.00 sec)

mysql> use school;
Database changed
mysql> CREATE TABLE `Student` (
    ->   `Sno` int(10) NOT NULL COMMENT '学号',  `Sname` varchar(16) NOT NULL CMMENT '姓名',
    ->   `Ssex` char(2) NOT NULL COMMENT '性别',  `Sage` tinyint(2) NOT NULL DEAULT '0' COMMENT '学生年龄',
    ->   `Sdept` varchar(16) DEFAULT 'NULL' COMMENT '学生所在系别',  PRIMARY KE (`Sno`)
    -> ) ;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> INSERT INTO `Student` VALUES (1, '陆亚', '男', 24, '计算机网络'),(2, 'to', '男', 26, '英语'),(3, '张阳', '男', 21, '物流管理'), (4, 'alex', '女', 22, '电子商务');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

        在从库上查看是否有(可以看到就说明同步成功)

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

mysql> select * from Student;
+-----+--------+------+------+-----------------+
| Sno | Sname  | Ssex | Sage | Sdept           |
+-----+--------+------+------+-----------------+
|   1 | 陆亚   | 男   |   24 | 计算机网络      |
|   2 | tom    | 男   |   26 | 英语            |
|   3 | 张阳   | 男   |   21 | 物流管理        |
|   4 | alex   | 女   |   22 | 电子商务        |
+-----+--------+------+------+-----------------+
4 rows in set (0.00 sec)


http://www.kler.cn/a/510572.html

相关文章:

  • C++,设计模式,【目录篇】
  • 安路FPGA开发工具TD:问题解决办法 及 Tips 总结
  • 口令攻击和钓鱼攻击
  • Linux 操作二:文件映射与文件状态
  • Typora + PowerShell 在终端打开文件
  • Linux虚拟化技术:从Xen到KVM
  • 在线宠物用品|基于vue的在线宠物用品交易网站(源码+数据库+文档)
  • Excel重新踩坑6:工作实战总结之根据筛选条件求平均成绩
  • Linux(基础配置)
  • 【个人学习记录】软件开发生命周期(SDLC)是什么?
  • 基于springboot的口腔管理平台
  • 鸿蒙安装HAP时提示“code:9568344 error: install parse profile prop check error” 问题现象
  • Oracle事务(7)
  • protobuf: 网络版通讯录
  • Ubuntu 24.04 LTS 服务器折腾集
  • Qt常用控件之输入类控件
  • 论文阅读 AutoDev: Automated AI-Driven Development
  • AT8870单通道直流电机驱动芯片
  • 算法竞赛里面的STL——堆和priority_queue
  • ThreadLocal如何实现的
  • 【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局
  • 硬件学习笔记--33 GB/T 17215.211相关内容介绍
  • 双序列双指针
  • Python(十七)excel指定列自动翻译成英文
  • 多学科视角下探索开源Github、Git初步学习
  • 企业邮箱iRedMail搭建