Heim  >  Artikel  >  Datenbank  >  Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?

WBOY
WBOYOriginal
2022-03-28 16:00:349501Durchsuche

In MySQL können Sie „MySQL-Proxy“ verwenden, um eine Lese-/Schreibtrennung zu erreichen. „MySQL-Proxy“ ist eine von MySQL offiziell bereitgestellte Software zur Implementierung einer Lese-/Schreibtrennung, die auch als Middleware bezeichnet wird und die Verarbeitung durch die Hauptdatenbank ermöglicht Bei der Verarbeitung von Abfragen aus der Datenbank wird die Datenbankkonsistenz durch Master-Slave-Replikation erreicht.

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?

Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?

Zu den Plug-Ins in MySQL, die die Lese- und Schreibtrennung realisieren können, gehört MySQL-Proxy / Mycat / Amoeba Dieses Experiment wird hauptsächlich verwendet, um dies zu erreichen. MySQL-Proxy ist eine Software, die „Lese-/Schreibsplitting“ implementiert (offiziell von MySQL bereitgestellt, auch Middleware genannt). Die Datenbank verarbeitet Schreibvorgänge (Einfügen, Aktualisieren, Löschen) und verarbeitet gleichzeitig den Abfragevorgang (Auswählen) aus der Datenbank. Die Konsistenz der Datenbank wird durch Master-Slave-Replikation erreicht.

MySQL-Proxy kann die Unterscheidung zwischen Lese- und Schreibanweisungen hauptsächlich mithilfe eines internen Lua-Skripts realisieren (das die Beurteilung von Lese- und Schreibanweisungen realisieren kann)

Wenn ja Nur auf dem Hauptserver (Schreibvorgang ist auf dem Server abgeschlossen. Zu diesem Zeitpunkt wird der Schreibvorgang nicht auf dem Slave-Server ausgeführt. Zu diesem Zeitpunkt muss keine andere Technologie verwendet werden.) Um Datenkonsistenz zwischen Master- und Slave-Servern zu erreichen, ist die Master-Slave-Replikation die Grundlage der Lese-Schreib-Trennung (MySQL-Proxy). Der Master übernimmt den Schreibvorgang und lässt den Slave den Lesevorgang übernehmen. Dies eignet sich sehr gut für Szenarien mit relativ vielen Lesevorgängen und kann die Arbeitsbelastung des Masters reduzieren.

Verwenden Sie MySQL-Proxy, um die Lese-/Schreib-Trennung von MySQL zu realisieren MySQL-Proxy fungiert tatsächlich als Proxy für den Back-End-MySQL-Master-Slave-Server. Er nimmt die Anfrage des Clients direkt an, analysiert die SQL-Anweisung und bestimmt, ob es sich um eine Leseoperation oder eine Schreiboperation handelt zum entsprechenden MySQL-Server

Da der Schreibvorgang der Datenbank zeitaufwändiger ist als der Lesevorgang, löst die Trennung von Lesen und Schreiben der Datenbank das Problem des Schreibens in die Datenbank, was sich auf die Effizienz der Abfrage auswirkt

In Server1 konfigurieren Sie zuerst die GTID-Master-Slave-Replikation mit Server2.

GTID-Master-Slave-Replikation wurde im vorherigen Blog erklärt, daher werde ich hier nicht auf Details eingehen, sondern nur den endgültigen Effekt zeigen.

Sie können sehen, dass es sich um eine Westos-Datenbank handelt wird auf Server1 eingerichtet und der entsprechende Server2 wird synchronisiert.

(1) Besorgen Sie sich die MySQL-Proxy-Installation von der physischen Maschine. Paket an Server3

(2) Konfigurieren Sie auf Server3

[root@server3 ~]# systemctl status mysqld	##查看mysqld服务状态
[root@server3 ~]# systemctl stop mysqld	##关闭mysqld服务,因为代理服务器要用3306端口
[root@server3 ~]# tar zxf mysql-proxy-0.8.5-linux-glibc2-x86-64bit.tar.gz -C /usr/local/	##解压到/usr/local/目录下


Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung? Stellen Sie eine Soft-Verbindung für die Verwaltung her
ln -s mysql-proxy-0.8.5-linux-glibc2-x86-64bit mysql-proxy
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?

Es gibt keine Konfigurationsdatei im MySQL-Proxy-Verzeichnis, daher müssen Sie selbst eine Konfigurationsdatei erstellen. Verzeichnis, erstellen Sie die Konfigurationsdatei Um die Berechtigungen der Konfigurationsdatei auf 660 zu ändern, müssen Sie ein Protokollverzeichnis erstellen



Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
Ändern Sie die maximale und minimale Anzahl von Verbindungen, wenn in der Datenbank eine Lese-/Schreibtrennung auftritt

[root@server3 bin]# ./mysql-proxy --help
[root@server3 bin]# ./mysql-proxy --help-proxy
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
(3) Starten Sie mysql-proxy

[mysql-proxy]	##指定语句块
proxy-address=0.0.0.0:3306	##指定proxy访问的主机和端口,3306是一个对外的通用端口
proxy-read-only-backend-addresses=172.25.254.2:3306	##读主机的ip和端口
proxy-backend-addresses=172.25.254.1:3306	##执行写主机的ip和端口
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua	##指定读写分离操作使用的lua文件路径
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid	##pid存放路径
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log	##日志存放路径
plugins=proxy	##指定使用的插件
log-level=debug	##日志的等级
keepalive=true	##开启守护进程
daemon=true	##使用后台方式运行

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
Lese-Schreib-Trennung testen

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung? (1) Erstellen Sie einen neuen Server auf Server1 Benutzer und autorisiert

mysql> grant insert,update,select on *.* to kkxili@'%' identified by 'Red1hat*';
mysql> FLUSH PRIVILEGES;	##刷新授权表
mysql> USE westos;
Database changed
mysql> CREATE TABLE linux (
    -> username varchar(10) not null,
    -> password varchar(15) not null);
mysql>DESC linux;

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
(2)server3安装lsof
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
(3)在用户端虚拟机server4上第一次连接数据库代理server3
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
在server3上面:lsof -i:3306
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
(4)在用户端虚拟机server4上第二次连接数据库代理server3
在server3上面:lsof -i:3306
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
(5)在用户端虚拟机server4上第三次连接数据库代理server3
在server3上面:lsof -i:3306
开始读写分离

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?上面是读写分离的读访问测试
写测试
在用户端插入数据

use westos;
insert into linux values('user1','123');

Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
server1和server2都可以看到插入的数据
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
在server2中关闭主从复制
用户端再次写入数据,看不到刚刚写的数据
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
写在server1上,可以查看到数据
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
在server2上实现了读写分离
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
server2重新开启主从复制可以看到数据
Was ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?
客户端读的是server2,server2只能读,不能写,因此看不到刚才写进去的东西,server1可以看到
实现了客户端(虚拟机)对server1的写,对server2的读

当访问数据库的用户数量很多时,数据库的代理就把后端的数据库实现读写分离
server1是写的数据库、server2是读的数据库
当server1和server2满足gtid的主从复制时,用户往数据库写入的数据其实是写入了server1,并没有写入server2,server2上面的数据是复制过去的,因此server1、server2、客户机上面都能查到刚刚写进去的数据,其实客户机查的是server2(读)
当关闭server1和server2的异步复制时,客户机往数据库写入的数据只写进了server1,没有写进去server2,server2也没有复制一份
因此server1可以查看到,server2和客户机上面都查不到刚刚写进去的数据,此时的客户机读的是server2

推荐学习:mysql视频教程

Das obige ist der detaillierte Inhalt vonWas ist die Implementierungsmethode der MySQL-Lese- und Schreibtrennung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn