MySQL主從複製

1、主從複製介紹

1)基本原理

slave會從master讀取bin-log來進行數據同步
MySQL複製過程分成三步:
1)master將改變記錄到二進制日誌(binary log)。這些記錄過程叫做二進制日誌事件,binary log events。
2)slave將master的binary log events拷貝到它的中繼日誌(relay log)。
3)slave重做中繼日誌中的事件,將改變應用到自己的數據庫中。MySQL複製是異步且串行化的。
總結一張圖(網上盜的)
在這裏插入圖片描述

2)基本原則

1、每個slave只有一個master
2、每個slave只能有一個唯一的服務器ID
3、每個master可以有多個salve

2、主從複製配置

我使用騰訊雲的雲數據庫作爲主機,自己的linux作爲從機
MySQL版本一致且後臺以服務運行,主從都配置在[mysqld]節點下,都是小寫

1)主機修改my.ini配置文件

1、確認主機服務器唯一ID
server-id=1,這裏的序號隨意,不一定要是1。
查看server_id,也可能是server-id

show variables like '%server_id%';

在這裏插入圖片描述
2、啓用二進制日誌
查看是否已經開啓

show variables like '%log_bin%';

在這裏插入圖片描述
3、read-only=0
主機,讀寫都可以
4、啓用錯誤日誌(可選)
log-err=自己本地的路徑/mysqlerr
5、根目錄(可選)
basedir=自己本地路徑
6、臨時目錄(可選)
tmpdir=自己本地路徑
7、數據目錄(可選)
datadir=自己本地路徑/Data
8、設置不需要複製的數據庫(可選)
binlog-ignore-db=mysql
如果不開啓,代表以後新創建的數據庫都要複製。
9、設置需要複製的數據庫(可選)
binlog-do-db=需要複製的主數據庫名字

2)從機修改my.cnf配置文件

1、確認從機服務器唯一ID
2、啓用二進制日誌(可選)
重啓主機和從機

3、建立主從關係

1)主機建立賬戶授權slave

grant replication slave on *.* to 'zhangsan'@'從機數據庫ip' identified by '123456';
flush privileges; 

從機數據庫ip可以是%,意思是所有ip都可以登陸。
查詢master的狀態

show master status;

表示,從機要從二進制文件mysql-bin.000005的第64162055位置開始複製。
在這裏插入圖片描述
記錄File和Position的值,接下來就不用管主機了。

2)從機配置需要複製的主機

從機執行

change master to
master_host = '主機ip',
master_port = 端口號,
master_user = 'zhangsan',
master_password = '123456',
master_log_file = '之前的File',
master_log_pos = 之前的Position值;

例如

change master to
master_host = 'cdb-6lyf7c.cd.tencentcdb.com',
master_port = 3306,
master_user = 'zhangsan',
master_password = '123456',
master_log_file = 'mysql-bin.000005',
master_log_pos = 64162055;

執行

start slave;
show slave status\G

當出現這兩個參數都是Yes,則說明主從配置成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在這裏插入圖片描述

3)常見錯誤

如果出現這種情況Slave_IO_Running: NO
在這裏插入圖片描述
不着急,先停用slave

stop slave;

查看MySQL的日誌,找到錯誤

vim /var/log/mysqld.log 

在這裏插入圖片描述
可以看到GTID_MODE主機和從機不一致。解決方法
先查看主機

show variables like '%gtid%';

在這裏插入圖片描述
可以去查看下從機的,這裏我直接通過my.cnf打開從機的這兩個選項。
vim /etc/my.cnf
添加
enforce_gtid_consistency=on
gtid_mode=on
保存,重啓從機MySQL。
再次執行,這裏需要重新查看下主機的File和Position

change master to
master_host = 'cdb-6lyf7c.cd.tencentcdb.com',
master_port = 3306,
master_user = 'zhangsan',
master_password = '123456',
master_log_file = 'mysql-bin.000005',
master_log_pos = 64162055;
start slave;
show slave status\G

可以看到一切OK了。
在這裏插入圖片描述
如果執行change master to出現這個報錯,先得把slave停用先。
在這裏插入圖片描述

4、測試

主機創建數據庫和表

create database test;
use test;
create table dog(name varchar(10));

從機查看在這裏插入圖片描述
在這裏插入圖片描述
一切OK

5、總結

最後,配置主從並不難,我這裏使用的是騰訊雲,不能打開my.conf這樣的配置文件進行修改MySQL配置,所以都是從機修改,最後也可以達到目的。
遇到問題的時候,記得打開日誌查看。

發佈了71 篇原創文章 · 獲贊 37 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章