데이터 베이스 MySQL 튜토리얼 分布式架构高可用架构篇_07_MySQL主从复制的配置(CentOS-6.7+MySQL-5.6)_MySQL

分布式架构高可用架构篇_07_MySQL主从复制的配置(CentOS-6.7+MySQL-5.6)_MySQL

May 27, 2016 pm 01:45 PM
분산 건축학

环境

操作系统:CentOS-6.6-x86_64-bin-DVD1.iso

MySQL版本:mysql-5.6.22.tar.gz

主节点IP:192.168.1.205 主机名:edu-mysql-01

从节点IP:192.168.1.206 主机名:edu-mysql-02

MySQL主从复制官方文档

http://dev.mysql.com/doc/refman/5.6/en/replication.html

MySQL主从复制的方式

MySQL5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(全局事务标示符)。本文主要讲基于日志(binlog)的复制。

MySQL主从复制(也称A/B复制)的原理

(1)Master将数据改变记录到二进制日志(binarylog)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binarylogevents);

(2)Slave通过I/O线程读取Master中的binarylogevents并写入到它的中继日志(relaylog);

(3)Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)。

\

主从配置需要注意的点

(1)主从服务器操作系统版本和位数一致;

(2)Master和Slave数据库的版本要一致;

(3)Master和Slave数据库中的数据要一致;

(4)Master开启二进制日志,Master和Slave的server_id在局域网内必须唯一;

主从配置的简要步骤

1、Master上的配置

(1)安装数据库;

(2)修改数据库配置文件,指明server_id,开启二进制日志(log-bin);

(3)启动数据库,查看当前是哪个日志,position号是多少;

(4)登录数据库,授权数据复制用户(IP地址为从机IP地址,如果是双向主从,这里的还需要授权本机的IP地址,此时自己的IP地址就是从IP地址);

(5)备份数据库(记得加锁和解锁);

(6)传送备份数据到Slave上;

(7)启动数据库;

以下步骤,为单向主从搭建成功,想搭建双向主从需要的步骤:

(1)登录数据库,指定Master的地址、用户、密码等信息(此步仅双向主从时需要);

(2)开启同步,查看状态;

2、Slave上的配置

(1)安装数据库;

(2)修改数据库配置文件,指明server_id(如果是搭建双向主从的话,也要开启二进制日志log-bin);

(3)启动数据库,还原备份;

(4)查看当前是哪个日志,position号是多少(单向主从此步不需要,双向主从需要);

(5)指定Master的地址、用户、密码等信息;

(6)开启同步,查看状态。

单向主从环境(也称MySQLA/B复制)的搭建

1、Master(192.168.1.205)和Slave(192.168.1.206)上都安装了相同版本的数据库(mysql-5.6.22.tar.gz),参考《高可用架构篇--第13节--MySQL源码编译安装(CentOS6.6+MySQL5.6)》。

注意:两台数据库服务器的的selinux都要disable(永久关闭selinux,请修改/etc/selinux/config,将SELINUX改为disabled)

2、修改Master的配置文件/etc/my.cnf[root@edu-mysql-01~]#vi/etc/my.cnf

#在[mysqld]中增加以下配置项

#设置server_id,一般设置为IP

server_id=205

#复制过滤:需要备份的数据库,输出binlog

#binlog-do-db=yixiaoqun

#复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)

binlog-ignore-db=mysql

#开启二进制日志功能,可以随便取,最好有含义

log-bin=edu-mysql-bin

##为每个session分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

##主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

 

#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

(如想了解以上参数的更多详细解析,大家可以直接百度参数名)

2.1复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:

(1)在Master上过滤二进制日志中的事件;

(2)在Slave上过滤中继日志中的事件。如下:

\

 

2.2MySQL对于二进制日志(binlog)的复制类型

(1)基于语句的复制:在Master上执行的SQL语句,在Slave上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。

(2)基于行的复制:把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。从MySQL5.0开始支持。

(3)混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

3、启动/重启Master数据库服务,登录数据库,创建数据同步用户,并授予相应的权限

[root@edu-mysql-01~]#servicemysqlrestart

ShuttingdownMySQL..[OK]

StartingMySQL..[OK]

[root@edu-mysql-01~]#mysql-uroot-p

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.22-log Source distribution


Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


##创建数据同步用户,并授予相应的权限

mysql>grantreplicationslave,replicationclienton*.*to'repl'@'192.168.1.206'identifiedby'123456';

QueryOK,0rowsaffected(0.00sec)##刷新授权表信息

mysql>flushprivileges;

QueryOK,0rowsaffected(0.00sec)

##查看position号,记下position号(从机上需要用到这个position号和现在的日志文件)

mysql>showmasterstatus;

+----------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| edu-mysql-bin.000001 | 1312 | | mysql | |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

 


 

4、创建 edu 库、表,并写入一定量的数据,用于模拟现有的业务系统数据库

 

 

createdatabaseifnotexistsedudefaultcharsetutf8collateutf8_general_ci;

useedu;

DROPTABLEIFEXISTS`edu_user`;CREATETABLE`edu_user`(

`Id`int(11)NOTNULLAUTO_INCREMENT,

`userName`varchar(255)NOTNULLDEFAULT''COMMENT'用户名',`pwd`varchar(255)NOTNULLDEFAULT''COMMENT'密码',

PRIMARYKEY(`Id`)

)ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8COMMENT='用户信息表';

INSERTINTO`edu_user`VALUES(1,'yixiaoqun','123456');


5、为保证Master和Slave的数据一致,我们采用主备份,从还原来实现初始数据一致

 

##先临时锁表

mysql>flushtableswithreadlock;QueryOK,0rowsaffected(0.00sec)

##这里我们实行全库备份,在实际中,我们可能只同步某一个库,那也可以只备份一个库

[root@edu-mysql-01 mysql]# mysqldump -u root -p edu > /tmp/edu.sql

Enter password:

[root@edu-mysql-01 mysql]# cd /tmp

[root@edu-mysql-01 tmp]# ll | grep edu.sql
-rw-r--r-- 1 root root 2031 Apr 25 01:18 edu.sql

 

#注意:实际生产环境中大数据量(超2G数据)的备份,建议不要使用mysqldump进行比分,因为会非常慢。此时推荐使用XtraBackup进行备份。

#解锁表

mysql>unlocktables;

QueryOK,0rowsaffected(0.00sec)

将Master上备份的数据远程传送到Slave上,以用于Slave配置时恢复数据

[root@edu-mysql-01 tmp]# scp /tmp/edu.sql root@192.168.1.206:/tmp/edu.sql
The authenticity of host '192.168.1.206 (192.168.1.206)' can't be established.
RSA key fingerprint is da:70:7b:d5:0c:16:b3:1a:53:b7:3d:9f:20:01:26:3e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.206' (RSA) to the list of known hosts.
root@192.168.1.206's password:
edu.sql 100% 2031 2.0KB/s 00:00

 

6、接下来处理Slave(192.168.1.206),配置文件只需修改一项,其余配置用命令来操作

 

[root@edu-mysql-02 ]#vi/etc/my.cnf

#在[mysqld]中增加以下配置项

#设置server_id,一般设置为IP

server_id=206

#复制过滤:需要备份的数据库,输出binlog#binlog-do-db=edu

#复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)

binlog-ignore-db=mysql

#开启二进制日志,以备Slave作为其它Slave的Master时使用

log-bin=edu-mysql-slave1-bin

##为每个session分配的内存,在事务过程中用来存储二进制日志的缓存binlog_cache_size=1M

#主从复制的格式(mixed,statement,row,默认格式是statement)binlog_format=mixed

#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。expire_logs_days=7

#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

##relay_log配置中继日志

relay_log=edu-mysql-relay-bin

##log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1

##防止改变数据(除了特殊的线程)

read_only=1

如果Slave为其它的Slave的Master时,必须设置bin_log,在这里,我开启了二进制日志,而且显式的命名(默认名称为hostname),但是如果hostname改变则会出现问题。)

relay_log配置中继日志,log_slave_updates表示slave将复制事件 写进自己的二进制日志.当设置log_slave_updates时,你可以让slave扮演其它slave的master.此时,slave把sql线程执行的事件写进自己的二进制日志(binary log)然后,它的slave可以获取这些事件并执行它。如下图所示(发送复制事件到其它的Slave):

\

 

7.保存后重启MySQL服务,还原备份数据

[root@edu-mysql-02 ~]# service mysql restart
Shutting down MySQL. SUCCESS!
Starting MySQL.. SUCCESS!

Slave上创建相同库

 

 

[root@edu-mysql-02 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.22-log Source distribution


Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> create database if not exists edu default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.02 sec)


mysql> use edu;
Database changed

6.导入数据

[root@edu-mysql-02 ~]# mysql -uroot -p edu Enter password:
[root@edu-mysql-02 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.22-log Source distribution


Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> use edu;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A


Database changed
mysql> select * from edu_user;
+----+-----------+--------+
| Id | userName | pwd |
+----+-----------+--------+
| 1 | yixiaoqun | 123456 |
+----+-----------+--------+
1 row in set (0.00 sec)

8.登录Slave数据库,添加相关参数

(Master的IP、端口、同步用户、密码、position号、读取哪个日志文件)

change master to master_host='192.168.1.205',master_user='repl',master_password='123456',master_port=3306,

master_log_file='edu-mysql-bin.000001',master_log_pos=1312,master_connect_retry=30;

\

上面执行的命令的解释:

master_host='192.168.1.205' ##Master的IP地址

master_user='repl' ##用于同步数据的用户(在Master中授权的用户)

master_password='123456' ##同步数据用户的密码

master_port=3306 ##master数据库服务的端口

master_log_file='edu-mysql-bin.000001' ##指定Slave从哪个日志文件开始读取复制文件(可在Master上使用show master status查看到日志文件名)

master_log_pos=429 ##从哪个POSITION号开始读

master_connect_retry=30 #当重新建立主从连接时,如果连接建立失败,间隔多久后重试,单位为秒,默认设置为60秒,同步延迟调优参数。

 

##查看主从同步状态

 

show slave status\G;

可看到Slave_IO_State为空,Slave_IO_Runngin和Slave_SQL_Running是No,表时Slave还是没有开始复制过程。\

#开启主从同步

mysql> start slave;

再次查看同步状态

#show slave status\G;

\

主要看以下两个参数,这两个参数如果是Yes,就表示主人同步正常

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

由截图的主从同步状态信息可以看出,我们配置的主从同步是正常的。

可查看master和slave上线程的状态,在master上,可以看到slave的I/O线程创建的连接

Master:mysql>show processlist\G;

\

1.row为处理slave的I/O线程的连接。

2.row为处理MySQL客户连接线程。

3.row为处理本地命令行的线程

Slave:mysql>show processlist\G;

\

 

1.row为处理slave的I/O线程的连接。

2.row为处理MySQL客户连接线程。

3.row为处理本地命令行的线程


9.主从数据复制同步测试

(1)在Master中的edu库上变更数据的同步测试:

Master:

mysql> insert into edu_user values(2,'test1','123456');

Slave:

mysql> start slave;

\

同步数据库

\

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Spring Data JPA의 아키텍처와 작동 원리는 무엇입니까? Spring Data JPA의 아키텍처와 작동 원리는 무엇입니까? Apr 17, 2024 pm 02:48 PM

SpringDataJPA는 JPA 아키텍처를 기반으로 하며 매핑, ORM 및 트랜잭션 관리를 통해 데이터베이스와 상호 작용합니다. 해당 리포지토리는 CRUD 작업을 제공하고 파생 쿼리는 데이터베이스 액세스를 단순화합니다. 또한 지연 로딩을 사용하여 필요한 경우에만 데이터를 검색하므로 성능이 향상됩니다.

1.3ms는 1.3ms가 걸립니다! Tsinghua의 최신 오픈 소스 모바일 신경망 아키텍처 RepViT 1.3ms는 1.3ms가 걸립니다! Tsinghua의 최신 오픈 소스 모바일 신경망 아키텍처 RepViT Mar 11, 2024 pm 12:07 PM

논문 주소: https://arxiv.org/abs/2307.09283 코드 주소: https://github.com/THU-MIG/RepViTRepViT는 모바일 ViT 아키텍처에서 잘 작동하며 상당한 이점을 보여줍니다. 다음으로, 본 연구의 기여를 살펴보겠습니다. 기사에서는 경량 ViT가 일반적으로 시각적 작업에서 경량 CNN보다 더 나은 성능을 발휘한다고 언급했는데, 그 이유는 주로 모델이 전역 표현을 학습할 수 있는 MSHA(Multi-Head Self-Attention 모듈) 때문입니다. 그러나 경량 ViT와 경량 CNN 간의 아키텍처 차이점은 완전히 연구되지 않았습니다. 본 연구에서 저자는 경량 ViT를 효과적인

golang 프레임워크 아키텍처의 학습 곡선은 얼마나 가파르나요? golang 프레임워크 아키텍처의 학습 곡선은 얼마나 가파르나요? Jun 05, 2024 pm 06:59 PM

Go 프레임워크 아키텍처의 학습 곡선은 Go 언어 및 백엔드 개발에 대한 친숙도와 선택한 프레임워크의 복잡성, 즉 Go 언어의 기본 사항에 대한 올바른 이해에 따라 달라집니다. 백엔드 개발 경험이 있으면 도움이 됩니다. 다양한 복잡성의 프레임워크는 다양한 학습 곡선으로 이어집니다.

손으로 찢기 Llama3 레이어 1: 처음부터 llama3 구현 손으로 찢기 Llama3 레이어 1: 처음부터 llama3 구현 Jun 01, 2024 pm 05:45 PM

1. Llama3의 아키텍처 이 기사 시리즈에서는 llama3을 처음부터 구현합니다. Llama3의 전체 아키텍처: Llama3의 모델 매개변수 그림: Llama3 모델에서 이러한 매개변수의 실제 값을 살펴보겠습니다. 그림 [1] 컨텍스트 윈도우(context-window) LlaMa 클래스를 인스턴스화할 때 max_seq_len 변수는 context-window를 정의한다. 클래스에는 다른 매개변수도 있지만 이 매개변수는 변환기 모델과 가장 직접적으로 관련됩니다. 여기서 max_seq_len은 8K입니다. 그림 [2] 어휘의 크기와 주의력L

분산 작업 스케줄링 및 실행을 구현하기 위해 MongoDB를 사용한 경험 공유 분산 작업 스케줄링 및 실행을 구현하기 위해 MongoDB를 사용한 경험 공유 Nov 02, 2023 am 09:39 AM

MongoDB는 고성능, 확장성 및 유연성을 갖춘 오픈 소스 NoSQL 데이터베이스입니다. 분산 시스템에서는 작업 스케줄링 및 실행이 핵심 문제입니다. MongoDB의 특성을 활용하여 분산 작업 스케줄링 및 실행 솔루션을 구현할 수 있습니다. 1. 분산 작업 스케줄링을 위한 요구 사항 분석 분산 시스템에서 작업 스케줄링은 실행을 위해 여러 노드에 작업을 할당하는 프로세스입니다. 일반적인 작업 예약 요구 사항은 다음과 같습니다. 1. 작업 요청 배포: 사용 가능한 실행 노드에 작업 요청을 보냅니다.

Redis를 사용하여 분산 데이터 동기화를 달성하는 방법 Redis를 사용하여 분산 데이터 동기화를 달성하는 방법 Nov 07, 2023 pm 03:55 PM

Redis를 사용하여 분산 데이터 동기화를 달성하는 방법 인터넷 기술의 발전과 점점 더 복잡해지는 애플리케이션 시나리오로 인해 분산 시스템의 개념이 점점 더 널리 채택되고 있습니다. 분산 시스템에서는 데이터 동기화가 중요한 문제입니다. 고성능 인메모리 데이터베이스인 Redis는 데이터를 저장하는 데 사용될 수 있을 뿐만 아니라 분산된 데이터 동기화를 달성하는 데에도 사용할 수 있습니다. 분산 데이터 동기화에는 일반적으로 게시/구독(Publish/Subscribe) 모드와 마스터-슬레이브 복제(Master-slave)의 두 가지 공통 모드가 있습니다.

Spring 프레임워크의 아키텍처와 작동 원리에 대한 심층적인 이해 Spring 프레임워크의 아키텍처와 작동 원리에 대한 심층적인 이해 Jan 24, 2024 am 09:41 AM

Spring 프레임워크의 아키텍처 및 작동 원리에 대한 심층 분석 소개: Spring은 Java 생태계에서 가장 널리 사용되는 오픈 소스 프레임워크 중 하나입니다. Spring은 강력한 컨테이너 관리 및 종속성 주입 기능 세트를 제공할 뿐만 아니라 다음과 같은 기능도 제공합니다. 트랜잭션 관리, AOP, 데이터 액세스 등과 같은 다른 많은 기능. 이 기사에서는 Spring 프레임워크의 아키텍처와 작동 원리에 대한 심층 분석을 제공하고 특정 코드 예제를 통해 관련 개념을 설명합니다. 1. Spring 프레임워크의 핵심 개념 1.1IoC(Inversion of Control) Spring의 핵심

검토! 자율주행 촉진을 위한 기본 모델의 중요한 역할을 종합적으로 요약 검토! 자율주행 촉진을 위한 기본 모델의 중요한 역할을 종합적으로 요약 Jun 11, 2024 pm 05:29 PM

위 작성 및 저자 개인 이해: 최근 딥러닝 기술의 발전과 획기적인 발전으로 대규모 기반 모델(Foundation Models)이 자연어 처리 및 컴퓨터 비전 분야에서 상당한 성과를 거두었습니다. 자율주행에 기본 모델을 적용하는 것도 시나리오에 대한 이해와 추론을 향상시킬 수 있는 큰 발전 전망을 가지고 있습니다. 풍부한 언어와 시각적 데이터에 대한 사전 학습을 통해 기본 모델은 자율주행 시나리오의 다양한 요소를 이해하고 해석하고 추론을 수행할 수 있으며, 의사 결정 및 계획을 추진하기 위한 언어 및 동작 명령을 제공합니다. 기본 모델은 일상적인 운전 및 데이터 수집 중에 발생할 가능성이 없는 롱테일 분포에서 드물게 실행 가능한 기능을 제공하기 위해 운전 시나리오에 대한 이해를 통해 데이터를 보강할 수 있습니다.

See all articles