最近有人私信我说,我两年前的文档主从配置,太长太乱,看不懂。
其实,相信也有人发现了,我的整体文章只有极小极小一部分适合新手,大部分都是作为职场新人或已经学了很多年计算机的大三,大四学生的的参考或者说思想启发教程,主要是看整体流程和思路,方便排错和调优和思路启发,以及抄袭我的思路并运用于生产环境,这才是我写文合适的阅览者。为什么呢?我已经接触计算很久了,我写博客第一目的是沉淀技术,学的太杂了所以一边写一边梳理所学尽量形成一个属于我的体系,这才是我的初衷,所以我一般写的有时候技术壁垒很高,不是那个领域的根本听不了,比如像这种:如何用sql在1分钟从1T数据中精准定位查询?Hive离线数仓 Spark分析_hive 通过sparksql查询能力-CSDN博客文章浏览阅读3.4k次,点赞66次,收藏21次。在大数据-Hadoop体系中 ,spark批处理和hive离线数仓可以说是对立并行的两个大分支技术栈,,,建议主攻其一,另一个灵活使用就行。他们是2015出现在国内,2017年之后国外各大公司纷纷采用,国内2020采用的,目前属于很前沿,并且很主流,很顶层的技术。(注:19年国内云计算开始起势,大数据的发展与云计算和人工智能等密切相关,更离不开芯片,硬件存储技术等相关支撑,它们之间相辅相成_hive 通过sparksql查询能力https://blog.csdn.net/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.net/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通 如果没有 按照以下 ,操作
前置2MySQL安装 三个都要装。
前置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.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp.aliyun.com iburst
server time1.aliyun.com iburst
server time2.aliyun.com iburst
server time3.aliyun.com iburst
server time4.aliyun.com iburst
server time5.aliyun.com iburst
server time6.aliyun.com iburst
:wq
重启服务 他只要ntpd服务运行,就会自动同步,不过自动同步之前先 关闭ntpd使用ntpdate一次性同步时间工具校准目前时间
sudo systemctl restart ntpd
一次性同步时间 ntpdate命令
[root@root ~]# systemctl stop ntpd
[root@root ~]# sudo ntpdate ntp.aliyun.com time1.aliyun.com time2.aliyun.com time3.aliyun.com time4.aliyun.com time5.aliyun.com time6.aliyun.com
执行ntpdate ntp.aliyun.com time1.aliyun.com 。。这个命令后输出如下:
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=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.com/uuid/
设置新的server-uuid
注意:uuid 不支持SET PERSIST命令
注意:获取到uuid后直接把刚刚SELECT UUID(); 生成的uuid 添加到配置文档中
yum安装的uuid在vim /var/lib/mysql/auto.cnf中
vim /var/lib/mysql/auto.cnf
//修改server-uuid
vim /etc/my.cnf 这个文档不可以添加uuid 会报错 yum安装的uuid在auto.cnf中
[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
注意:
yum安装的uuid在vim /var/lib/mysql/auto.cnf中
二进制安装的
编译安装在编译安装的 MySQL 中,auto.cnf 文件的位置取决于你配置的数据目录(通常是 /usr/local/mysql/data)
vim /var/lib/mysql/auto.cnf
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/my.cnf或/etc/mysql/my.cnf),添加以下配置:
[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/my.cnf或/etc/mysql/my.cnf),添加以下配置:
[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/my.cnf或/etc/mysql/my.cnf),添加以下配置:
[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/my.cnf或/etc/mysql/my.cnf),添加以下配置:
[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/my.cnf或/etc/mysql/my.cnf),添加以下配置:
[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的一主一从复制。通过这种配置,可以确保数据在主从服务器之间的一致性和高可用性。记得在实际生产环境中,根据需要调整配置和进行安全性设置。