suchen
HeimDatenbankMySQL-Tutorial使用Rotate Master实现MySQL 多主复制的实现方法_MySQL

bitsCN.com 当然,5.6的GUID功能的出现也带来了multi-master的无限可能,不过这个已经是题外话了。
本文主要介绍一种非实时的适用于各版本MySQL的multi-master方法。
内容简介:
最初的思路来源于一位国外DBA的blog : http://thenoyes.com/littlenoise/?p=117
基本原理就是通过SP记录当前 master-log的name和pos记录到表中,然后读取下一个master记录,执行stop slave / change master / start slave。以此循环反复。
个人对他的方法进行了改进,增加了以下功能:
1. master可以根据业务流量设置权重值
2. 各个master-slave运行情况的监控
3. 各个master可以实时退出多主的架构
具体操作过程:
1. 创建保存各个master信息的表

use mysql;
CREATE TABLE `rotate_master` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`master_host` varchar(255) DEFAULT NULL comment 'master地址',
`master_port` int(10) unsigned DEFAULT NULL comment 'master端口' ,
`master_log_file` varchar(255) DEFAULT NULL ‘上次停止时的master-log文件',
`master_log_pos` int(10) unsigned DEFAULT NULL comment '上次停止时的master-log-pos',
`IS_Slave_Running` varchar(10) DEFAULT NULL comment '上次停止时主从是否有异常',
`in_use` tinyint(1) DEFAULT '0' comment '是否是当前正在同步的数据行',
`weight` int(11) NOT NULL DEFAULT '1' comment '该master的权重,即重复执行多少个时间片',
`repeated_times` int(11) NOT NULL DEFAULT '0' comment '当前已经重复执行的时间片数',
`LastExecuteTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '上次执行的时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

新增加一个master :

insert into `rotate_master`
(`master_host`,`master_port`,`master_log_file`,`master_log_pos`,`in_use`,`weight`)
values
-- 1号master,权重=1,并设置为当前master
('192.168.0.1',3307,'mysqlbinlog.000542',4,1,1),
-- 2号master,权重=2
('192.168.0.2',3306,'mysqlbinlog.000702',64762429,0,2),
-- 3号master,权重=5
('192.168.0.3',3306,'mysqlbinlog.000646',22157422,0,5)

手工把master 调整到当前的配置项:

change master to master_host='192.168.0.1', master_port=3306,master_log_file='mysqlbinlog.000542',master_log_pos=4,master_user='repl',master_password='repl';
start slave;

创建rotate master SP:
注意:代码中用于连接master的用户名和密码是 : repl / repl ,请根据自己的情况修改。

DELIMITER $$
DROP PROCEDURE IF EXISTS `mysql`.`rotate_master`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `rotate_master`()
BEGIN
DECLARE _info text;
DECLARE _master_file varchar(255);
DECLARE _master_pos int unsigned;
DECLARE _master_host varchar(255);
DECLARE _master_port int unsigned;
DECLARE _is_slave_running varchar(10);
DECLARE _id int;
DECLARE _weight int;
DECLARE _repeated_times int;
select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Slave_running' into _is_slave_running;
STOP SLAVE;
SELECT LOAD_FILE(@@relay_log_info_file) INTO _info;
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(_info, '/n', 3), '/n', -1),
SUBSTRING_INDEX(SUBSTRING_INDEX(_info, '/n', 4), '/n', -1)
INTO _master_file, _master_pos;
UPDATE mysql.rotate_master SET `master_log_file` = _master_file, `master_log_pos` = _master_pos, id = LAST_INSERT_ID(id), `IS_Slave_Running` = _is_slave_running WHERE in_use = 1;
select weight,repeated_times into _weight,_repeated_times from mysql.rotate_master where in_use =1;
if(_weight THEN
SELECT
id,
master_host,
master_port,
master_log_file,
master_log_pos
INTO _id, _master_host, _master_port, _master_file, _master_pos
FROM rotate_master
ORDER BY id SET @sql := CONCAT(
'CHANGE MASTER TO master_host=', QUOTE(_master_host),
', master_port=', _master_port,
', master_log_file=', QUOTE(_master_file),
', master_log_pos=', _master_pos
', master_user="repl"',
', master_password="repl"'
);
PREPARE myStmt FROM @sql;
EXECUTE myStmt;
UPDATE mysql.rotate_master SET in_use = 0,repeated_times=0 WHERE in_use = 1;
UPDATE mysql.rotate_master SET in_use = 1,repeated_times=1 WHERE id = _id;
ELSE
UPDATE mysql.rotate_master SET `repeated_times`=`repeated_times`+1 WHERE in_use = 1;
END IF;
START SLAVE;
END$$
DELIMITER ;

创建Event:
每2分钟运行一次,rotate_master() ,即时间片大小是2分钟

DELIMITER $$
CREATE EVENT `rotate_master` ON SCHEDULE EVERY 120 SECOND STARTS '2011-10-13 14:09:40' ON COMPLETION NOT PRESERVE ENABLE DO CALL mysql.rotate_master()$$
DELIMITER ;

至此,多主复制已经搭建完成。
由于时间片长度是2分钟。
Master1 在执行 1*2 分钟后,stop slave,然后change master to Master2;
Master2 在执行 2*2 分钟后,stop slave,然后change master to Master3;
Master3 在执行 5*2 分钟后,stop slave,然后change master to Master2;
并以此循环往复。
如果希望把其中一个master移除多主复制,可以将他的配置项权重设置为0;
即: update rotate_master set weigh=0 where id = #ID# ;bitsCN.com

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
Reduzieren Sie die Verwendung des MySQL -Speichers im DockerReduzieren Sie die Verwendung des MySQL -Speichers im DockerMar 04, 2025 pm 03:52 PM

In diesem Artikel wird die Optimierung von MySQL -Speicherverbrauch in Docker untersucht. Es werden Überwachungstechniken (Docker -Statistiken, Leistungsschema, externe Tools) und Konfigurationsstrategien erörtert. Dazu gehören Docker -Speichergrenzen, Tausch und CGroups neben

So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnenSo lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnenMar 04, 2025 pm 04:01 PM

Dieser Artikel befasst sich mit MySQLs Fehler "Die freigegebene Bibliotheksfehler". Das Problem ergibt sich aus der Unfähigkeit von MySQL, die erforderlichen gemeinsam genutzten Bibliotheken (.SO/.dll -Dateien) zu finden. Lösungen beinhalten die Überprüfung der Bibliotheksinstallation über das Paket des Systems m

Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung?Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung?Mar 19, 2025 pm 03:51 PM

In dem Artikel werden mithilfe der Änderungstabelle von MySQL Tabellen, einschließlich Hinzufügen/Löschen von Spalten, Umbenennung von Tabellen/Spalten und Ändern der Spaltendatentypen, erläutert.

Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin)Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin)Mar 04, 2025 pm 03:54 PM

Dieser Artikel vergleicht die Installation von MySQL unter Linux direkt mit Podman -Containern mit/ohne phpmyadmin. Es beschreibt Installationsschritte für jede Methode und betont die Vorteile von Podman in Isolation, Portabilität und Reproduzierbarkeit, aber auch

Was ist SQLite? Umfassende ÜbersichtWas ist SQLite? Umfassende ÜbersichtMar 04, 2025 pm 03:55 PM

Dieser Artikel bietet einen umfassenden Überblick über SQLite, eine in sich geschlossene, serverlose relationale Datenbank. Es beschreibt die Vorteile von SQLite (Einfachheit, Portabilität, Benutzerfreundlichkeit) und Nachteile (Parallelitätsbeschränkungen, Skalierbarkeitsprobleme). C

Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-AnleitungAusführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-AnleitungMar 04, 2025 pm 03:49 PM

In diesem Handbuch wird die Installation und Verwaltung mehrerer MySQL -Versionen auf macOS mithilfe von Homebrew nachgewiesen. Es betont die Verwendung von Homebrew, um Installationen zu isolieren und Konflikte zu vermeiden. Der Artikel Details Installation, Starten/Stoppen von Diensten und Best PRA

Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen?Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen?Mar 18, 2025 pm 12:01 PM

In Artikel werden die Konfiguration der SSL/TLS -Verschlüsselung für MySQL, einschließlich der Erzeugung und Überprüfung von Zertifikaten, erläutert. Das Hauptproblem ist die Verwendung der Sicherheitsauswirkungen von selbstsignierten Zertifikaten. [Charakterzahl: 159]

Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)?Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)?Mar 21, 2025 pm 06:28 PM

In Artikel werden beliebte MySQL -GUI -Tools wie MySQL Workbench und PhpMyAdmin beschrieben, die ihre Funktionen und ihre Eignung für Anfänger und fortgeschrittene Benutzer vergleichen. [159 Charaktere]

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool