admin管理员组

文章数量:1532034

最近有人私信我说,我两年前的文档主从配置,太长太乱,看不懂。

其实,相信也有人发现了,我的整体文章只有极小极小一部分适合新手,大部分都是作为职场新人或已经学了很多年计算机的大三,大四学生的的参考或者说思想启发教程,主要是看整体流程和思路,方便排错和调优和思路启发,以及抄袭我的思路并运用于生产环境,这才是我写文合适的阅览者。为什么呢?我已经接触计算很久了,我写博客第一目的是沉淀技术,学的太杂了所以一边写一边梳理所学尽量形成一个属于我的体系,这才是我的初衷,所以我一般写的有时候技术壁垒很高,不是那个领域的根本听不了,比如像这种:如何用sql在1分钟从1T数据中精准定位查询?Hive离线数仓 Spark分析_hive 通过sparksql查询能力-CSDN博客文章浏览阅读3.4k次,点赞66次,收藏21次。在大数据-Hadoop体系中 ,spark批处理和hive离线数仓可以说是对立并行的两个大分支技术栈,,,建议主攻其一,另一个灵活使用就行。他们是2015出现在国内,2017年之后国外各大公司纷纷采用,国内2020采用的,目前属于很前沿,并且很主流,很顶层的技术。(注:19年国内云计算开始起势,大数据的发展与云计算和人工智能等密切相关,更离不开芯片,硬件存储技术等相关支撑,它们之间相辅相成_hive 通过sparksql查询能力https://blog.csdn/qq_61414097/article/details/140999898

对于一些小白,对此,我只能说抱歉了,很抱歉,对不起,不过我在梳理归纳我的个人知识体系的时候,未来也会尽量尽量写很多比较零起点的小白也能看的,比如像这种:Centos 7.9 安装 图解版 小白必看 最新_centos7.9 2009 系统-CSDN博客文章浏览阅读1.4k次,点赞33次,收藏24次。VMware安装win7用 12win10 用 15win11用 16.2.4别问为什么,问就是win和VMware不兼容导致虚拟机各种奇葩异常,重装集群了这已经是我当年实验了20多次得出的结果,最佳兼容性搭配。_centos7.9 2009 系统https://sanfenyunjisuan.blog.csdn/article/details/141171717

目前有些我们所周知的基本概念,我没注释,比如 vim 命令行下 :q    # 退出   :wq 保存并退出,:wq! 强制保存并退出 :q! 强制退出,我直接在多篇文章教程中    vim编辑内容 我是直接用了并没说明怎么保存退出,但是你们vim 编辑必然是要保存并退出的,但是在文章中,我一般没做说明,默认你们基础都会,因为如果像这种都注释,那样的话一篇文章起码上两万字了,根本没那么多的时间写的,再次说声抱歉

最近有人私信我说,我两年前的文档太长太乱,看不懂,因此就有了这篇,这是我最近做的,跟着做完上手就直接运行的  

主从复制的一些概念了解即可

 MySQL主从复制方式都有那些?区别是什么

MySQL的主从复制(Master-Slave Replication)是一种数据同步机制,它允许将一个MySQL服务器(主服务器)的数据复制到一个或多个MySQL服务器(从服务器)上。主从复制可以用于多种目的,比如数据备份、读取扩展、灾难恢复等。实现MySQL主从复制的方式主要有以下几种:

1基于二进制日志(Binary Log)的复制

这是最常见的复制方式。

主服务器记录所有对数据库的更改(如INSERT、UPDATE、DELETE等操作)到二进制日志中。

从服务器连接到主服务器,并请求最新的二进制日志事件。

从服务器读取这些事件,并在自己的数据库上重放这些事件,从而实现数据同步。

这种方式可以是同步复制也可以是异步复制。

2.

基于GTID(Global Transaction Identifiers)的复制

GTID提供了一种全局唯一的事务标识符,使得复制过程更加可靠和易于管理。

在GTID复制中,每个事务都有一个唯一的标识符,从服务器可以确保不会遗漏或重复执行事务。

这种方式简化了故障转移和复制拓扑的管理。

3.

基于日志传输(Log Shipping)的复制

这种方式通常用于灾难恢复。

主服务器的二进制日志文件被定期传输到一个或多个从服务器。

从服务器应用这些日志文件来更新自己的数据。

这种方法通常比基于二进制日志的复制要慢,因为它涉及到文件传输和应用。

4.

基于半同步复制(Semi-Synchronous Replication)

半同步复制是介于异步复制和同步复制之间的一种方式。

当事务提交时,主服务器会等待至少一个从服务器确认已经接收到事务的二进制日志,然后才返回给客户端事务提交成功。

这种方式提高了数据的安全性,因为即使主服务器失败,至少还有一个从服务器拥有最新的数据。

5.

基于复制过滤器的复制

可以在主服务器或从服务器上设置过滤器,以决定哪些数据库或表应该被复制。

这种方式允许更细粒度的控制复制过程,但需要仔细规划以避免数据不一致。

每种复制方式都有其特定的使用场景和优缺点。选择哪种方式取决于具体需求,如对数据一致性、性能、故障恢复等方面的要求。在实施复制时,还需要考虑网络延迟、复制延迟、主从服务器的硬件配置等因素。

所有主从复制前置条件:

 前置1centos 已安装,yum 已配置阿里云的源, 可ping通 如果没有 按照以下 ,操作

Centos 7.9 安装 图解版 小白必看 最新_centos7.9 2009 系统-CSDN博客文章浏览阅读1.5k次,点赞33次,收藏24次。VMware安装win7用 12win10 用 15win11用 16.2.4别问为什么,问就是win和VMware不兼容导致虚拟机各种奇葩异常,重装集群了这已经是我当年实验了20多次得出的结果,最佳兼容性搭配。_centos7.9 2009 系统https://sanfenyunjisuan.blog.csdn/article/details/141171717

 前置2MySQL安装 三个都要装。

MySQL 安装 小白/新手入门 yum 安装MySQL 配置yum 安装MySQL5.7 yum 安装指定版本的MySQL 修改主机名 配置静态DNS解析 关闭防火墙及内核防火墙 设置出入站规则-CSDN博客文章浏览阅读296次,点赞18次,收藏5次。MySQL 安装 小白/新手入门 yum 安装MySQL 配置yum 安装MySQL5.7 yum 安装指定版本的MySQL 修改主机名 配置静态DNS解析 关闭防火墙及内核防火墙 设置出入站规则安装MySQL:配置安装源 :配置yum 安装MySQL指定版本所用的yum 仓库源https://blog.csdn/qq_61414097/article/details/141367105

 前置3三台台机器环境必须一致,如下

集群主机名分别修改为 master  slave 1slave2 

然后,三台机器配置hosts解析如下

三个虚拟机的/etc/hosts 文件 ,都需要添加内容变成如下 

 192.168.28.145这是我的虚拟机主机名,要改成你自己的虚拟机ip

 vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.28.145 root
192.168.28.144 slave1
192.168.28.143 slave2

 前置4  时间也得一致  使用NTP 来进行集群时间同步

基于RPM的Linux发行版(如CentOS、Fedora、RHEL等),

可以使用以下命令安装NTP服务:sudo yum install ntp

对于基于Debian的系统(如Ubuntu),

使用以下命令安装

sudo apt-get install ntp

默认的NTP服务器地址替换为阿里云提供的NTP服务器,如下

vim /etc/ntp.conf 

#server 0.centos.pool.ntp iburst

#server 1.centos.pool.ntp iburst

#server 2.centos.pool.ntp iburst

#server 3.centos.pool.ntp iburst

server ntp.aliyun iburst

server time1.aliyun iburst

server time2.aliyun iburst

server time3.aliyun iburst

server time4.aliyun iburst

server time5.aliyun iburst

server time6.aliyun iburst

:wq

重启服务 他只要ntpd服务运行,就会自动同步,不过自动同步之前先 关闭ntpd使用ntpdate一次性同步时间工具校准目前时间

sudo systemctl restart ntpd

一次性同步时间 ntpdate命令 

[root@root ~]# systemctl stop ntpd

[root@root ~]# sudo ntpdate ntp.aliyun time1.aliyun time2.aliyun time3.aliyun time4.aliyun time5.aliyun time6.aliyun

执行ntpdate ntp.aliyun time1.aliyun 。。这个命令后输出如下:

19 Aug 16:14:32 ntpdate[16365]: adjust time server 203.107.6.88 offset 0.006931 sec

校准完成 ,开启自动同步

sudo systemctl restart ntpd

开机自启

sudo systemctl enable ntpd

前置5修改uuid 

修改虚拟机uuid :可不做,虚拟机如果是克隆的需要改uuid 不然网卡报错

有一种野路子: 使用在线uuid生成器直接生成  uuid 然后直接找到配置文件修改

UUID在线生成器 在线批量生成UUID iP138在线工具UUID是通用唯一识别码(Universally Unique Identifier)的缩写,指在一台机器上生成的唯一数字,由32位16进制数字组成,形式为8-4-4-4-12。由于UUID的唯一性特征,通常用于分布式系统中对象的标识。本工具可批量生成指定数量的UUID。https://tool.ip138/uuid/

UUID=85e0b05c-db67-4785-9237-4b4c39afe49c

# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static  # 或dhcp

ONBOOT=yes

重置网卡uuid

rm -rf /etc/udev/rules.d/70-persistent-ipoib.rules

Cd  /etc/udev/rules.d/

Ls

找到 带70-xxxxx的文件删除

Vim /etc/sysconfig/network-scripts/ifcfg-eth0

vim /etc/sysconfig/network-scripts/ifcfg-eth33

  把配置文件里的uuid 替换 成 刚刚在线生成的UUID=85e0b05c-db67-4785-9237-4b4c39afe49c

# 禁用与启用网络接口

# 禁用并重新启用 ens33 接口:

Copyifdown ens33

ifup ens33

完成。

修改MySQL  uuid

查询uuid方法1

systemctl  stop mysqld

systemctl restart mysqld

mysql -uroot -p

Password123$

mysql> SELECT UUID();

+--------------------------------------+

| UUID()                               |

+--------------------------------------+

| 82461950-5e1d-11ef-bf68-000c296de0fc |

+--------------------------------------+

1 row in set (0.00 sec)

mysql> exit

查询uuid方法2

 另外,

还有有一种野路子: 使用在线uuid生成器直接生成直接修改

 有一种野路子: 使用在线uuid生成器直接生成  uuid 然后直接找到配置文件修改

UUID在线生成器 在线批量生成UUID iP138在线工具https://tool.ip138/uuid/

设置新的server-uuid

注意:uuid 不支持SET PERSIST命令

注意:获取到uuid后直接把刚刚SELECT UUID();  生成的uuid 添加到配置文档中

yum安装的uuid在vim /var/lib/mysql/autof

vim /var/lib/mysql/autof

//修改server-uuid

vim /etc/myf 这个文档不可以添加uuid  会报错  yum安装的uuid在autof中

[mysqld]  

systemctl restart mysqld 注意如果有些随机生成的uuid曾经集群某个虚拟机用过,重启会失败,此时把uuid那行先注释掉,再重新生成uuid 重新设置uuid

重启MySQL服务:重启失败 检查 .log 和.pid 文件是否存在

[root@slave2 ~]# mkdir /var/log/mysqld.log

mkdir: 无法创建目录"/var/log/mysqld.log": 文件已存在

[root@slave2 ~]# mkdir /var/run/mysqld/mysqld.pid

mkdir /var/lib/myssocket

mkdir /var/lib/mysql/mysql.sock
为了使更改生效,您需要重启MySQL服务。根据您的操作系统和MySQL版本,使用相应的命令重启服务。例如,在基于RPM的系统上,您可能需要运行:

systemctl restart mysqld

在基于Debian的系统上,您可能需要运行:

systemctl restart mysql

验证设置:
重启MySQL服务后,您可以通过再次执行SELECT @@server_uuid;命令来验证新的UUID是否已正确设置。

总结

无论配置什么服务的uuid 都可以使用

使用在线uuid生成器直接生成 然后直接修改某指定服务配置文档中的uuid

UUID在线生成器 在线批量生成UUID iP138在线工具 生成uuid

 注意:

yum安装的uuid在vim /var/lib/mysql/autof

二进制安装的

编译安装在编译安装的 MySQL 中,autof 文件的位置取决于你配置的数据目录(通常是 /usr/local/mysql/data)

vim /var/lib/mysql/autof

MySQL基于GTID配置原理 gid配置主从原理

1、master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。

2、slave端的i/o 线程将变更的binlog,写入到本地的relay log中。

3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。

4、如果有记录,说明该GTID的事务已经执行,slave会忽略。

5、如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。

注意 :必看  !!!!!!!!!

当你开始配置主服务器时 ,备份导入导入到从服务器的方式

备份数据库时   /path/to/backup.sql  要改成你自己的路径比如/opt/backup-gid.sql 
mysqldump -u root -p --all-databases --master-data > /path/to/backup.sql

导出的数据库 存储在/opt/backup-gid.sql,可以通过 FTP,SSH,SFTP,U盘,SCP 等方式 导入到从数据库,我个人建议,scp 和u盘拷贝  其他不是很安全。。。

导入到从服务器/opt下 举例

scp -p /opt/backup-gid.sql 192.168.28.143:/opt/ 

scp -p /opt/backup-gid.sql 192.168.28.144:/opt/

主服务器的数据库备份: /path/to/backup.sql  要改成你自己的路径比如/opt/backup-gid.sql 

mysql -u root -p < /path/to/backup.sql 

    /path/to指的是你自己的配置路径 backup是备份的意思,在企业中,通常做备份都会命名为.bak 或backup,这是在公司中一种约定俗成的做法,属于代码规范的一部分,bak-gid.sql或backup-gid.sql  表示这是MySQL数据库的做gid时 备份 

 

1.MySQL基于GTID配置一主两从详解:
 

IP为

master 192.168.28.145

slave1 192.168.28.144

slave2 192.168.28.143

配置MySQL基于GTID(全局事务标识符)的主从复制可以有效确保数据在多个服务器之间的一致性和高可用性。下面是一个详细的配置步骤和示例,假设你的主服务器IP为192.168.28.145,从服务器1的IP为192.168.28.144,从服务器2的IP为192.168.28.143。

1. 准备工作

确保在三台服务器上都已经安装了MySQL,并且版本支持GTID(MySQL 5.6及以上)

2. 配置主服务器(192.168.28.145) 编辑MySQL配置文件(通常是/etc/myf或/etc/mysql/myf),添加以下配置:

[mysqld]

server-id=1

log-bin=mysql-binbinlog-format=ROW

gtid-mode=ONenforce-gtid-consistency=ON

重启MySQL服务以应用配置更改:

注意:如果重启报错,那么,先创建用户授权,锁表在改配置。

systemctl restart mysqld

创建一个用于复制的用户,并授予必要的权限:

CREATE USER 'repl'@'192.168.28.144' IDENTIFIED BY 'password';CREATE USER 'repl'@'192.168.28.143' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.28.144';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.28.143';

FLUSH PRIVILEGES;

锁定数据库以进行快照(可选,但推荐):

FLUSH TABLES WITH READ LOCK;

获取主服务器的二进制日志文件名和位置:

SHOW MASTER STATUS;

记下File和Position的值。

备份数据库: /path/to/backup.sql  要改成你自己的路径比如/opt/backup-gid.sql 

mysqldump -u root -p --all-databases --master-data > /path/to/backup.sql

解锁数据库:

UNLOCK TABLES;

3. 配置从服务器1(192.168.28.144)

编辑MySQL配置文件(通常是/etc/myf或/etc/mysql/myf),添加以下配置:

[mysqld]

server-id=2

gtid-mode=ONenforce-gtid-consistency=ON

重启MySQL服务以应用配置更改:

sudo systemctl restart mysqld

导入主服务器的数据库备份: /path/to/backup.sql  要改成你自己的路径比如/opt/backup-gid.sql 

mysql -u root -p < /path/to/backup.sql

配置从服务器与主服务器进行复制:

CHANGE MASTER TO

    MASTER_HOST='192.168.28.145',

    MASTER_USER='repl',

    MASTER_PASSWORD='password',

    MASTER_AUTO_POSITION=1;

启动复制进程:

START SLAVE;

检查复制状态:

SHOW SLAVE STATUS\G;

确保Slave_IO_Running和Slave_SQL_Running都显示为Yes,并且没有错误。

4. 配置从服务器2(192.168.28.143)

编辑MySQL配置文件(通常是/etc/myf或/etc/mysql/myf),添加以下配置:

[mysqld]

server-id=3

gtid-mode=ON

enforce-gtid-consistency=ON

重启MySQL服务以应用配置更改:

sudo systemctl restart mysqld

导入主服务器的数据库备份: /path/to/backup.sql  要改成你自己的路径比如/opt/backup-gid.sql 

mysql -u root -p < /path/to/backup.sql

配置从服务器与主服务器进行复制:

CHANGE MASTER TO

    MASTER_HOST='192.168.28.145',

    MASTER_USER='repl',

    MASTER_PASSWORD='password',

    MASTER_AUTO_POSITION=1;

启动复制进程:

START SLAVE;

检查复制状态:

SHOW SLAVE STATUS\G;

确保Slave_IO_Running和Slave_SQL_Running都显示为Yes,并且没有错误。

5. 验证配置

在主服务器上创建一个新的数据库或表,并插入一些数据。然后检查两个从服务器上是否同步了这些更改。

-- 在主服务器上

CREATE DATABASE test_db;

USE test_db;CREATE TABLE test_table (id INT PRIMARY KEY, value VARCHAR(100));INSERT INTO test_table (id, value) VALUES (1, 'Hello, world!');

-- 在从服务器1和从服务器2上

SHOW DATABASES;

USE test_db;SELECT * FROM test_table;

如果在从服务器上能看到主服务器上的更改,说明GTID主从复制配置成功。

总结

以上步骤详细介绍了如何配置MySQL基于GTID的一主两从复制。通过这种配置,可以确保数据在主从服务器之间的一致性和高可用性。记得在实际生产环境中,根据需要调整配置和进行安全性设置。

MySQL基于GTID配置一主一从详解

 IP为

master 192.168.28.145

slave1 192.168.28.144

配置MySQL基于GTID(全局事务标识符)的主从复制是一项重要的任务,可以确保数据在多个服务器之间的一致性和高可用性。下面是一个详细的配置步骤和示例,

假设主服务器IP为192.168.28.145, 从服务器IP为192.168.28.144。

1. 准备工作

确保在两台服务器上都已经安装了MySQL,并且版本支持GTID(MySQL 5.6及以上)。

2. 配置主服务器(192.168.28.145)

编辑MySQL配置文件(通常是/etc/myf或/etc/mysql/myf),添加以下配置:

[mysqld]

server-id = 1

log-bin = mysql-binbinlog-format = ROWgtid-mode = ONenforce-gtid-consistency = ON

重启MySQL服务以应用配置更改:

sudo systemctl restart mysqld

创建一个用于复制的用户,并授予必要的权限:

CREATE USER 'repl'@'192.168.28.144' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.28.144';

FLUSH PRIVILEGES;

锁定数据库以进行快照(可选,但推荐):

FLUSH TABLES WITH READ LOCK;

获取主服务器的二进制日志文件名和位置:

SHOW MASTER STATUS;

记下File和Position的值。

备份数据库: /path/to/backup.sql  要改成你自己的路径比如/opt/backup-gid.sql 

mysqldump -u root -p --all-databases --master-data > /path/to/backup.sql

解锁数据库:

UNLOCK TABLES;

3. 配置从服务器(192.168.28.144)

编辑MySQL配置文件(通常是/etc/myf或/etc/mysql/myf),添加以下配置:

[mysqld]

server-id = 2

gtid-mode = ON

enforce-gtid-consistency = ON

重启MySQL服务以应用配置更改:

sudo systemctl restart mysqld

导入主服务器的数据库备份: /path/to/backup.sql  要改成你自己的路径比如/opt/backup-gid.sql 

mysql -u root -p < /path/to/backup.sql 

配置从服务器与主服务器进行复制:

CHANGE MASTER TO

    MASTER_HOST='192.168.28.145',

    MASTER_USER='repl',

    MASTER_PASSWORD='password',

    MASTER_AUTO_POSITION=1;

启动复制进程:

START SLAVE;

检查复制状态:

SHOW SLAVE STATUS\G;

确保Slave_IO_Running和Slave_SQL_Running都显示为Yes,并且没有错误。

4. 验证配置

在主服务器上创建一个新的数据库或表,并插入一些数据。然后检查从服务器上是否同步了这些更改。

-- 在主服务器上CREATE DATABASE test_db;

USE test_db;CREATE TABLE test_table (id INT PRIMARY KEY, value VARCHAR(100));INSERT INTO test_table (id, value) VALUES (1, 'Hello, world!');

-- 在从服务器上SHOW DATABASES;

USE test_db;SELECT * FROM test_table;

如果在从服务器上能看到主服务器上的更改,说明GTID主从复制配置成功。

总结

以上步骤详细介绍了如何配置MySQL基于GTID的一主一从复制。通过这种配置,可以确保数据在主从服务器之间的一致性和高可用性。记得在实际生产环境中,根据需要调整配置和进行安全性设置。

本文标签: 主从集群全站虚拟机已上