mysql學習--binlog與gtid主從同步

基礎環境

基于centOS7-MySQL8.0.35版本

我們先準備一臺主服務器兩臺從服務器來實現我們主從同步的訴求

Master:192.168.75.142

slave1:192.168.75.143

slave:192.168.75.145

binlog主從同步

主庫配置

#我們需要在主從庫中都需要添加server_id,每個庫的server_id都不唯一
[root@localhost ~]# tail -1 /etc/my.cnf
server_id=1
#重啟mysql服務讓配置分件生效
[root@localhost ~]# systemctl restart mysqld
#備份:
[root@localhost ~]# mysqldump --opt -B -u root -p school school1> school.sql
#授權用戶:
mysql> create user rep@'192.168.75.%' identified with mysql_native_password by 'Mhn@2001';
mysql> grant replication slave on *.* to rep@'192.168.75.%';

從庫配置

[root@localhost ~]# tail -1 /etc/my.cnf
server_id=2
[root@localhost ~]# systemctl restart mysqld[root@localhost ~]# tail -1 /etc/my.cnf
server_id=3
[root@localhost ~]# systemctl restart mysqld#還原主庫備份,到從服務器家目錄下:
scp db.sql 192.168.75.143:/root/
scp db.sql 192.168.75.145:/root/#在兩臺從主機上將復制的備份文件導入數據庫
mysql -uroot -pMysql@123 < school.sql#主庫查看
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      679 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)從庫配置
change master to
master_host='192.168.75.42',
master_user='rep',
master_password='Mhn@2001',
master_log_file='mysql-bin.000001',
master_log_pos=679,
get_master_public_key=1;
mysql> show slave status \G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.75.142Master_User: repMaster_Port: 3306Connect_Retry: 60Master_Log_File: binlog.000002Read_Master_Log_Pos: 694Relay_Log_File: localhost-relay-bin.000002Relay_Log_Pos: 323Relay_Master_Log_File: binlog.000002Slave_IO_Running: YesSlave_SQL_Running: Yes

從這里可以查看到狀態沒有問題可以進行主從同步

其他可選配置

#[可選] 0(默認)表示讀寫(主機),1表示只讀(從機)
read-only=0
#設置日志文件保留的時長,單位是秒
binlog_expire_logs_seconds=6000
#控制單個二進制日志大小。此參數的最大和默認值是1GB
max_binlog_size=200M
#[可選]設置不要復制的數據庫
binlog-ignore-db=test
#[可選]設置需要復制的數據庫,默認全部記錄。
binlog-do-db=需要復制的主數據庫名字
#[可選]設置binlog格式
binlog_format=STATEMENT

素材

數據庫備份,數據庫為school,素材如下1.創建student和score表CREATE  TABLE  student (
id  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  ,
name  VARCHAR(20)  NOT NULL ,
sex  VARCHAR(4)  ,
birth  YEAR,
department  VARCHAR(20) ,
address  VARCHAR(50) 
);創建score表。SQL代碼如下:CREATE  TABLE  score (
id  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  AUTO_INCREMENT ,
stu_id  INT(10)  NOT NULL ,
c_name  VARCHAR(20) ,
grade  INT(10)
);2.為student表和score表增加記錄向student表插入記錄的INSERT語句如下:INSERT INTO student VALUES( 901,'張老大', '男',1985,'計算機系', '北京市海淀區');
INSERT INTO student VALUES( 902,'張老二', '男',1986,'中文系', '北京市昌平區');
INSERT INTO student VALUES( 903,'張三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英語系', '遼寧省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英語系', '福建省廈門市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'計算機系', '湖南省衡陽市');向score表插入記錄的INSERT語句如下:
INSERT INTO score VALUES(NULL,901, '計算機',98);
INSERT INTO score VALUES(NULL,901, '英語', 80);
INSERT INTO score VALUES(NULL,902, '計算機',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '計算機',70);
INSERT INTO score VALUES(NULL,904, '英語',92);
INSERT INTO score VALUES(NULL,905, '英語',94);
INSERT INTO score VALUES(NULL,906, '計算機',90);
INSERT INTO score VALUES(NULL,906, '英語',85);
create database school;
use school;
CREATE TABLE `Student` (`Sno` int(10) NOT NULL COMMENT '學號',  `Sname` varchar(16) NOT NULL COMMENT '姓名',`Ssex` char(2) NOT NULL COMMENT '性別',  `Sage` tinyint(2) NOT NULL DEFAULT '0' COMMENT '學生年齡',`Sdept` varchar(16) DEFAULT 'NULL' COMMENT '學生所在系別',  PRIMARY KEY (`Sno`)) ;
INSERT INTO `Student` VALUES (1, '陸亞', '男', 24, '計算機網絡'),(2, 'tom', '男', 26, '英語'),(3, '張陽', '男', 21, '物流管理'), (4, 'alex', '女', 22, '電子商務');

gtid主從同步

GTID的工作原理:


1.當一個事務在主庫端執行并提交時,產生GTID,一同記錄到binlog日志中。

2.binlog傳輸到slave,并存儲到salve的relaylog后,讀取這個GTID的這個值設置GTID——next變量,即告訴slave,下一個要執行的GTID值。

3.sql線程從relaylog中獲取GTID,然后對比slave端的binlog是否有該GTID。

4.如果有記錄說明該GTID的事務已經執行,slave會忽略。

5.如果沒有記錄,slave會執行該GTID事務,并記錄到該GTID到自身的binlog,在讀取該事務前會檢查其他session持有該GTID,確保不被重復執行。

6.在解析過程中會判斷是否有主鍵,如果沒有就用二級索引,如果有就用全部掃描。

主庫配置

主庫配置
[root@localhost ~]# vim /etc/my.cnf
server_id=1  
gtid_mode=ON   #開啟gtid模式
enforce-gtid-consistency=ON   #強制gtid一致性,開啟后對特定的create table不支持
log-bin=mysql-bin    #開啟二進制日志
log-slave-updates=1    #從庫binlog記錄主庫同步的操作日志
skip-slave-start=1   #跳過slave復制線程#重啟服務
[root@localhost ~]# systemctl restart mysqld
#查看服務狀態
[root@localhost ~]# systemctl status mysqld
● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since 四 2024-02-29 11:04:01 CST; 37min agoDocs: man:mysqld(8)http://dev.mysql.com/doc/refman/en/using-systemd.htmlProcess: 3740 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)Main PID: 3770 (mysqld)Status: "Server is operational"Tasks: 40CGroup: /system.slice/mysqld.service└─3770 /usr/sbin/mysqld[root@localhost ~]# mysql -uroot -pMysql@123
mysql> show variables like '%gtid%';
+----------------------------------+------------------------------------------+
| Variable_name                    | Value                                    |
+----------------------------------+------------------------------------------+
| binlog_gtid_simple_recovery      | ON                                       |
| enforce_gtid_consistency         | ON                                       |
| gtid_executed                    | ff800e4d-d478-11ee-83a4-000c29b35fbd:1-8 |
| gtid_executed_compression_period | 0                                        |
| gtid_mode                        | ON                                       |
| gtid_next                        | AUTOMATIC                                |
| gtid_owned                       |                                          |
| gtid_purged                      |                                          |
| session_track_gtids              | OFF                                      |
+----------------------------------+------------------------------------------+
9 rows in set (0.01 sec)

從庫配置

#slave1
server_id=2
gtid_mode=ON
enforce-gtid-consistency=ON
log-bin=mysql-bin
log-slave-updates=1
skip-slave-start=1
mysql> show variables like '%gtid%';
+----------------------------------+------------------------------------------+
| Variable_name                    | Value                                    |
+----------------------------------+------------------------------------------+
| binlog_gtid_simple_recovery      | ON                                       |
| enforce_gtid_consistency         | ON                                       |
| gtid_executed                    | ff800e4d-d478-11ee-83a4-000c29b35fbd:1-8 |
| 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)#slave2
server_id=3
gtid_mode=ON
enforce-gtid-consistency=ON
log-bin=mysql-bin
log-slave-updates=1
skip-slave-start=1
mysql> show variables like '%gtid%';
+----------------------------------+------------------------------------------+
| Variable_name                    | Value                                    |
+----------------------------------+------------------------------------------+
| binlog_gtid_simple_recovery      | ON                                       |
| enforce_gtid_consistency         | ON                                       |
| gtid_executed                    | ff800e4d-d478-11ee-83a4-000c29b35fbd:1-8 |
| 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> stop slave;
Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql>  create user rep@'192.168.75.%' identified with mysql_native_password by 'Mhn@2001';
Query OK, 0 rows affected (0.04 sec)mysql> grant replication slave on *.* to rep@'192.168.75.%';
Query OK, 0 rows affected (0.00 sec)
#從庫,兩個都一樣
mysql> CHANGE MASTER TO-> MASTER_HOST = '192.168.75.142',-> MASTER_USER = 'rep',-> MASTER_PASSWORD = 'Mhn@2001',-> MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 7 warnings (0.01 sec)
#主庫建立數據庫
mysql> create database book;
Query OK, 1 row affected (0.00 sec)mysql> use book;
Database changed
mysql> CREATE TABLE books (name char(66),price int,pages int);
'80','666');
INSERT INTO books(name,price,pages) VALUES('Artificial Intelligence','166','666');Query OK, 0 rows affected (0.02 sec)mysql> INSERT INTO books(name,price,pages) VALUES('Linux','30','666');
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO books(name,price,pages) VALUES('Cloud Computing','60','666');
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO books(name,price,pages) VALUES('Operation System','80','666');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO books(name,price,pages) VALUES('Artificial Intelligence','166','666');
Query OK, 1 row affected (0.00 sec)mysql> select * from books;
+-------------------------+-------+-------+
| name                    | price | pages |
+-------------------------+-------+-------+
| Linux                   |    30 |   666 |
| Cloud Computing         |    60 |   666 |
| Operation System        |    80 |   666 |
| Artificial Intelligence |   166 |   666 |
+-------------------------+-------+-------+
4 rows in set (0.00 sec)
#從庫的狀態查看
#slave1
mysql> show slave status \G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.75.142Master_User: repMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 680Relay_Log_File: localhost-relay-bin.000002Relay_Log_Pos: 896Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes
#slave2
mysql> show slave status \G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.75.142Master_User: repMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 680Relay_Log_File: localhost-relay-bin.000002Relay_Log_Pos: 896Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes
#從庫查看
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| book               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)mysql> use book;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+----------------+
| Tables_in_book |
+----------------+
| books          |
+----------------+
1 row in set (0.00 sec)mysql> select * from book.books;
+-------------------------+-------+-------+
| name                    | price | pages |
+-------------------------+-------+-------+
| Linux                   |    30 |   666 |
| Cloud Computing         |    60 |   666 |
| Operation System        |    80 |   666 |
| Artificial Intelligence |   166 |   666 |
+-------------------------+-------+-------+
4 rows in set (0.00 sec)

主庫

從庫1

從庫2

可以看到最后的gtid值都一樣這就說明我們配置完成。

解決問題

在gtid配置中如果出現?Last_IO_Error: Error connecting to source 'root@192.168.75.142:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Host '192.168.75.143' is not allowed to connect to this MySQL server

可以嘗試更改一下主庫的mysql> ?create user rep@'192.168.75.%' identified with mysql_native_password by 'Mhn@2001';
Query OK, 0 rows affected (0.04 sec)

首先我們需要將所有的庫進行stop slave;操作,然后進行操作,修改完成后再次開啟就可以使用。

在遇到問題可以使用翻譯和查詢日志來進行查看

如果我們是使用一段時間mysql后才配置的gtid主從同步需要注意gtid值需要開始的位置,不能從1開始

需要注入空事務,從而解決起始位置相同

stop slave;
set gtid_next='gtid值:開始位置';
begin;commit;
set gtid_next='AUTOMATIC';

初始化mysql

學習過程中因為gtid數據不同步可以進行初始化mysql

在初始化之前必須要將mysql數據目錄所有內容全部清空

systemctl stop mysqld

mysql --initialize --uesr=mysql

然后重新啟動mysql

systemctl restart mysqld

進入mysql,進入后需要刷新權限表

FLUSH PRIVILEGES;

最后再修改密碼

alter user root@localhost identified by 'Mysql@123';

最后需要在配置文件中刪除--skip-grant-tables

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713761.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大龍談智能內容開通視頻號啦

大家好&#xff0c;大龍談只能內容開通視頻號了&#xff0c;歡迎大家掃碼關注&#xff1a;

RISC-V特權架構 - 中斷與異常概述

RISC-V特權架構 - 中斷與異常概述 1 中斷概述2 異常概述3 廣義上的異常3.1 同步異常3.2 異步異常3.3 常見同步異常和異步異常 本文屬于《 RISC-V指令集基礎系列教程》之一&#xff0c;歡迎查看其它文章。 1 中斷概述 中斷&#xff08;Interrupt&#xff09;機制&#xff0c;即…

RocketMQ安裝

mq服務端安裝配置啟動把windows做成服務 mq管理界面安裝配置啟動 mq服務端 安裝 RocketMQ下載地址 配置 ROCKETMQ_HOME D:\google-d\rocketmq-all-5.2.0-bin-release啟動 # bin目錄cmd輸入 start mqnamesrv.cmd把windows做成服務 http://t.csdnimg.cn/qd2RD mq管理界面 …

ubuntu22.04安裝mysql8.0

官網下載mysql&#xff1a;MySQL :: Download MySQL Community Server 將mysql-server_8.0.20-2ubuntu20.04_amd64.deb-bundle.tar上傳到/usr/local/src #解壓壓縮文件 tar -xvf mysql-server_8.0.20-2ubuntu20.04_amd64.deb-bundle.tar解壓依賴包依次輸入命令 sudo dpkg -i m…

編程筆記 Golang基礎 045 math包

編程筆記 Golang基礎 045 math包 一、math包主要功能常量&#xff1a;函數&#xff1a;數值運算&#xff1a;三角函數&#xff1a;對數函數&#xff1a;隨機數相關&#xff1a; 二、示例代碼一三、示例代碼二小結 Go 語言的標準庫 math 提供了一系列基礎數學函數和常量&#xf…

EasyRecovery數據恢復軟件2024最新版包括Windows和Mac

EasyRecovery數據恢復軟件適用于多種環境和使用場景。首先&#xff0c;它適用于各種操作系統&#xff0c;包括Windows和Mac。無論用戶使用的是哪種操作系統&#xff0c;都可以使用該軟件進行數據恢復。 其次&#xff0c;EasyRecovery支持從各種存儲設備和媒介中恢復數據&#…

自定義BeanNameGenerator生成規則

通過點進ComponentScan注解進入源碼可以看到 追隨BeanNameGenerator進入源碼可以看到該類是個借口且只有一個方法 點擊上面黑色箭頭出現兩個實現方法 點擊第一個方法 進入determineBeanNameFromAnnotation方法中 通過上訴自定義一個生成beanName方法 先創建一個CustomeBeanN…

使用結構體和類在Unity中管理IMU數據

使用結構體和類在Unity中管理IMU數據 IMU數據簡介使用結構體管理IMU數據結構體的優點結構體的使用場景 使用類管理IMU數據類的優點類的使用場景 結構體(struct) vs 類(class)為什么考慮使用結構體 結論 在Unity開發中&#xff0c;合理地選擇數據結構對于確保游戲和應用的性能和…

60 個 CSS 選擇器,一網打盡!

CSS 選擇器用于選擇 HTML 元素并將樣式應用于它們。使用這些選擇器&#xff0c;可以定義特定條件下應用哪些樣式。除了普通的選擇器外&#xff0c;還有偽類和偽元素&#xff0c;用于選擇具有特定狀態或特定部分的元素&#xff0c;并將樣式應用于它們。本文將通過圖文并茂的方式…

Windows11家庭版安裝Docker

文章目錄 安裝Docker安裝hyper-v繼續解決報錯完成效果圖進一步測試是否完成安裝 安裝Docker windows如何安裝docker 裝好之后&#xff0c;我打開報錯。 安裝hyper-v 按這個視頻操作&#xff1a;Windows 11 家庭版安裝 Hyper-V bat文件里的代碼是&#xff1a; pushd "…

【Educoder數據挖掘實訓】異常值檢測-3σ法

【Educoder數據挖掘實訓】異常值檢測-3σ法 開挖&#xff01; 這個異常值檢測基于的是兩點&#xff1a; 數據往往遵循正態分布在正態分布中&#xff0c; [ μ ? 3 σ , μ 3 σ ] [\mu - 3\sigma, \mu 3\sigma] [μ?3σ,μ3σ]包含了正態分布中 99.74 % 99.74\% 99.74%的數…

【投稿優惠|快速見刊】2024年圖像,機器學習和人工智能國際會議(ICIMLAI 2024)

【投稿優惠|快速見刊】2024年圖像&#xff0c;機器學習和人工智能國際會議&#xff08;ICIMLAI 2024&#xff09; 重要信息 會議官網&#xff1a;http://www.icimlai.com會議地址&#xff1a;深圳召開日期&#xff1a;2024.03.30截稿日期&#xff1a;2024.03.20 &#xff08;先…

2024全國水科技大會暨高氨氮廢水厭氧氨氧化處理技術論壇(四)

一、會議背景 為積極應對“十四五”期間我國生態環境治理面臨的挑戰&#xff0c;加快生態環境科技創新&#xff0c;構建綠色技術創新體系&#xff0c;全面落實科學技術部、生態環境部等部委編制的《“十四五”生態環境領域科技創新專項規劃》&#xff0c;積極落實省校合作&…

pip下載paddle、sklearn、cv2問題

ModuleNotFoundError: No module named ‘paddle‘ ModuleNotFoundError: No module named sklearn No matching distribution found for cv2 Could not build wheels for opencv-python, which is required to install pyproj

什么是BGP網絡 (邊界網關協議)

BGP&#xff08;邊界網關協議&#xff09;是一種用于在互聯網中交換路由信息的協議。作為網關或路由器之間的協議&#xff0c;BGP主要用于幫助確定數據包在網絡中的路徑。它通過在不同自治系統&#xff08;AS&#xff09;之間交換路徑信息&#xff0c;實現了全球互聯網網絡的連…

MySQL進階之(三)InnoDB數據存儲結構之數據頁結構

三、InnoDB數據存儲結構之數據頁結構 3.1 數據庫的存儲結構3.1.1 MySQL 數據存儲目錄3.1.2 頁的引入3.1.3 頁的概述3.1.4 頁的上層結構 3.2 數據頁結構3.2.1 文件頭和文件尾01、File Header&#xff08;文件頭部&#xff09;02、File Trailer&#xff08;文件尾部&#xff09; …

【JavaEE】_Spring Web MVC簡介

目錄 1. Spring Web MVC簡介 2. MVC簡介 3. Spring MVC 1. Spring Web MVC簡介 官網對于Spring Web MVC的介紹如下&#xff1a; 鏈接如下&#xff1a; https://docs.spring.io/spring-framework/reference/web/webmvc.html#https://docs.spring.io/spring-framework/refer…

將SU模型導入ARCGIS,并獲取高度信息,多面體轉SHP文件(ARCMAP)

問題:將Sketchup中導出的su模型,導入arcgis并得到面shp文件,進而獲取各建筑的高度、面積等信息。 思路: (1)導入arcgis得到多面體 (2)轉為面shp文件 (3)計算高度/面積等 1、【3D Analyst工具】【轉換】【由文件轉出】【導入3D文件】(在此步驟之間,建議先建立一個…

棧和隊列OJ題

文章目錄 一、雙隊列實現棧二、雙棧實現隊列 一、雙隊列實現棧 題目鏈接&#xff1a; https://leetcode.cn/problems/implement-stack-using-queues/description/ 題目分析&#xff1a; 棧的結構是后進先出&#xff0c;而隊列的結構是先進先出&#xff0c;我們利用這個性質&a…

AI Word Helper (Chorme Extentions) AI單詞助手(谷歌瀏覽器插件)

AI Word Helper (Chorme Extentions) AI單詞助手&#xff08;谷歌瀏覽器插件&#xff09; 英文網站&#xff0c;劃詞查單詞&#xff0c;還是看不懂&#xff1f;因為單詞意思那么多&#xff0c;詞性搞不清&#xff0c;上下文搞不清&#xff0c;出來的意思就沒法用&#xff0c;G…