Mysql高可用复制原理及主从实例测试解析

一、Mysql复制简介

使用mysql复制功能可以将主数据的数据复制到多台从服务器上。默认情况下,采用异步传输方式,数据复制可以在各种不同的网路环境中进行。主从复制技术在企业生产中得到了广泛应用,它避免了数据库的单点故障,当一台服务器宕机,其他服务器一样可以提供稳定可靠的数据服务。

1 mysql 复制原理

Mysql复制功能是将数据分布在多个系统上,这种机制是通过将Mysql的某一台服务器(master)的数据复制到其它服务器(slaves)上来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,从服务器接收到这些更新的日志内容,就按照日志内容在本机执行一遍,由此实现主从数据复制。主服务器写入日志时也维护着文件的一个索引以跟踪日志循环,当一个从服务器连接主服务器时,它通知主从服务器在日志中读取的最后一次成功更新的位置,从服务器接收那个时间点起发生的任何更新,然后封锁并等待主服务器通知新的更新。

2 mysql 复制优点

高性能:通过将请求分配给多台不同的从服务器,提高性能及速度,在此种环境中,所有写操作必须在主服务器进行,读操作可以平均分配给多台从服务器。

数据安全:数据通过主从复制,把主服务器的数据复制的一份或者多份,即实现了数据的安全备份

数据分享:对于大型企业,各个地区的分公司也需要共享总部的数据资源,只需要用主从复制即可实现数据的共享,而且可以仅仅在需要时进行复制。

3 mysql 复制格式

基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。

基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

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

4 mysql 复制步骤

整体上来说,复制有3个步骤:

(1)  master将改变记录到二进制日志(binary log)中(二进制日志事件,binary log events);

(2)  slave将master的binary log events拷贝到它的中继日志(relay log);

(3)  slave重做中继日志中的事件,将改变反映它自己的数据。

5 主从复制形式

一主一从

主主复制

一主多从---扩展系统读取的性能,因为读是在从库读取的;

多主一从---5.7开始支持

联级复制---

6 半同步复制

5.5版本集成到mysql,以插件的形式存在,需要单独安装

确保事务提交后binlog至少传输到一个从库

不保证从库应用完这个事务的binlog

性能有一定的降低,响应时间会更长

网络异常或从库宕机,卡主主库,直到超时或从库恢复

半同步原理图:

二、Mysql主从复制实例解析


首先了解数据库的主从复制部署注意要点

>>在主服务器上开启二进制日志,并设置唯一的服务器ID编号,设置后重启mysql生效。

>>在所有从服务器上设置唯一服务器ID编号,重启后生效。

>>在主服务器上创建让从服务器读取日志文件的账号,或者使用统一账户。

>>在进行数据复制前,需要记录主服务器上二进制日志的位置标记。

下面对整个主从复制过程详细解析

1 主服务器设置数据复制环境

在已安装或者使用过的数据库上创建数据库和数据表,演示如何对已经存在的数据进行数据同步备份

[[email protected] ~]# mysql -u root -p

mysql> create database hr;

mysql> use hr;

mysql> create table employees(

-> employee_id INT NOT NULL AUTO_INCREMENT,

-> name char(20) NOT NULL,

-> e_mail varchar(50),

-> PRIMARY KEY(employee_id));

mysql> INSERT INTO employees values

->(1,‘TOM‘,‘[email protected]‘),

->(2,‘Jerry‘,‘[email protected]‘);

mysql> exit

在主服务器上开启二进制日志并设置服务器编号,服务器唯一编号必须是1至232-1之间的整数,根据自己的实际情况进行设置。进行这些设置需要关闭MySQL数据库并编辑my.cnf或my.ini文件,并在[mysqld]设置段添加相应的配置选项。

[[email protected] ~]# vim /etc/my.cnf

[mysqld]

log-bin=Jacob-bin        #启用二进制日志,并设置二进制日志文件前缀

server-id=25           #设置服务器编号

[[email protected] ~]# service mysqld restart

[[email protected] ~]# service iptables stop

2 从服务器设置数据复制环境

在已安装或者使用过的数据库机器上设置,服务器ID必须设置为集群中唯一编号。对于从服务器而言,二进制日志功能无需开启,当然,根据业务需要也可以开启,比如主主复制中互为主从时需要都开启。

[[email protected] ~]# vim /etc/my.cnf

[mysqld]

server-id=24

[[email protected] ~]# service mysqld restart

[[email protected] ~]# service iptables stop

3 创建数据复制账号

主服务器上必须至少有一个账户供从服务器连接使用。这个账户必须具有REPLICATION SLAVE权限,你可以为不同的从服务器创建不同的账户与密码,也可以使用统一的账户与密码。使用CREATE USER语句创建用户,使用GRANT语句为账户赋权。

[[email protected] ~]# mysql -u root -p

mysql> CREATE USER ‘slave‘@‘%‘ IDENTIFIED BY ‘123456‘;

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave‘@‘%‘;

mysql> exit

4 读取主服务器二进制日志信息

在进行主从数据复制之前首先查看主服务器的二进制日志文件的基本信息,主服务器二进制文件名称及当前日志记录位置在对从服务器的设置中需要用到。

[[email protected] ~]# mysql -u root -p

mysql> FLUSH TABLES WITH READ LOCK;

mysql> SHOW MASTER STATUS;

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

| File|Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| jacob-log.000001|1226        |                                |                                |

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

mysql> UNLOCK TABLES;

5 对现有数据库备份并导入从服务器

如果在使用数据复制以前,数据库系统中已经存在数据资源,使用mysqldump工具对这些资料进行数据备份,在主服务器上使用该工具对数据备份后即可在从服务器上进行数据还原操作。当数据达到主从一致后,就可以使用数据复制功能进行自动从此同步操作。

[[email protected] ~]# mysqldump --all-databases --lock-all-tables > /tmp/dbdump.sql

[[email protected] ~]# scp /tmp/dbdump.sql 192.168.1.8:/tmp/

[[email protected] ~]# mysql -u root -p < dbdump.sql

6 配置从服务器连接主服务器进行数据复制

数据复制的关键操作是配置从服务器去连接主服务器进行数据复制,需要配置从服务器建立网络连接所有必要的信息。使用CHANGE MASTER TO语句即可完成该项工作,MASTER_HOST指定主服务器主机名或IP地址,MASTER_USER为主服务器上创建的拥有复制权限的账户名称,ASTER_PASSWORD为该账户的密码,MASTER_LOG_FILE指定主服务器二进制日志文件名称,MASTER_LOG_POS为主服务器二进制日志当前记录的位置。START SLAVE开启从服务器功能进行主从连接,SHOW SLAVE STATUS查看从服务器状态。

[[email protected] ~]# mysql -u root -p

mysql> CHANGE MASTER TO

-> MASTER_HOST=‘192.168.1.7‘,

-> MASTER_USER=‘slave‘,

-> MASTER_PASSWORD=‘123456‘,

-> MASTER_LOG_FILE=‘jacob-log.000001‘,

-> MASTER_LOG_POS=1226;

mysql> START SLAVE;

mysql> SHOW SLAVE STATUS\G;

7 数据同步测试验证

在主数据库上创建数据库及表,然后去从服务器查看是否同步。

[[email protected] ~]# mysql -u root -p

mysql> create database test2;

mysql> use test2;

mysql> create table t_table(

->name char(20),

-> age int,

-> note varchar(50));

mysql> INSERT INTO t_table values

-> (‘linda‘,23, ‘Beijing‘),

-> (‘jerry‘,33, ‘shanghai‘),;

mysql> exit

[[email protected] ~]# mysql -u root -p

mysql> select * from test2.t_table;

mysql> exit

三、主从复制存在的问题及解决方法

mysql主从复制存在的问题:

主库宕机后,数据可能丢失

从库只有一个sql Thread,主库写压力大,复制很可能延时

解决方法:

半同步复制---解决数据丢失的问题

并行复制----解决从库复制延迟的问题

复制出错处理:

常见:1062(主键冲突),1032(记录不存在)

解决方法:

手动处理

跳过复制错误设置:set global sql_slave_skip_counter=1

时间: 2024-10-06 03:11:02

Mysql高可用复制原理及主从实例测试解析的相关文章

MySQL高可用之——keepalivd+互为主从

目标:配置一个keepalived双机热备架构,并配置主从复制 规划: master1     zlm177     192.168.17.177 master2     zlm188     192.168.17.188 vip                             192.168.17.166 环境: Red Hat Enterprise Linux 6.4 Percona Server 5.6.15 一.软件安装 可以去官网http://www.keepalived.or

MySQL高可用复制管理工具 —— Orchestrator介绍

背景 在MySQL高可用架构中,目前使用比较多的是Percona的PXC,Galera以及MySQL 5.7之后的MGR等,其他的还有的MHA,今天介绍另一个比较好用的MySQL高可用复制管理工具:Orchestrator(orch). Orchestrator(orch):go编写的MySQL高可用性和复制拓扑管理工具,支持复制拓扑结构的调整,自动故障转移和手动主从切换等.后端数据库用MySQL或SQLite存储元数据,并提供Web界面展示MySQL复制的拓扑关系及状态,通过Web可更改MyS

MySQL高可用方案MHA自动Failover与手动Failover的实践及原理

集群信息 角色                             IP地址                 ServerID      类型 Master                         192.168.244.10   1                 写入 Candicate master          192.168.244.20   2                 读 Slave                           192.168.244.

mysql高可用架构谁能提供具体实践实例!!!

mysql高可用架构目前只查到4中解决方案,如下所示,但是没有具体实践,看到本博客的大神们,能不能给我提供一些实践的实例,谢谢!!!!! 1  Lvs+keeplived+mysql 的方案 单点写入读负载均衡主主同步高可用方案 2 Heartbeat 高可用MySQL 主主同步方案 3 Heartbeat+DRBD+mysql 高可用方案 4 MMM 高可用 mysql 方案

MySQL高可用基础之keepalived+双主复制【转】

环境:MySQL-VIP:192.168.1.3MySQL-master1:192.168.1.1MySQL-master2:192.168.1.2 OS版本:CentOS release 6.4 (Final) Linux 2.6.32-358.el6.x86_64MySQL版本:5.6.14Keepalived版本:1.2.13 一.MySQL master-master配置 1.修改MySQL配置文件/etc/my.cnf   # Server1配置[mysqld]basedir = /u

优酷土豆资深工程师:MySQL高可用之MaxScale与MHA

本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL  Failover的方案 常见的Failover方案 MMM MMM缺点: Monitor节点是单点,可以结合Keepalived实现高可用目前MySQL Failover 的方案 Keepalived会有脑裂的风险 在读写繁忙的业务中可能丢数据 MHA + ssh -o 测试心跳 + masterM

keepalived + mysqlroute +mysql实现mysql高可用

一.环境介绍: 1.1服务器角色配置: mysql-master 10.0.0.101(外) 172.168.1.101(内) mysql-slave 10.0.0.103 (外) 172.168.1.103(内) mysql-router01 10.0.0.102 (外) 172.168.1.102(内) mysql-router02 10.0.0.104 (外) 172.168.1.104(内) jumpserver 10.0.0.128 (外) 172.168.1.128(内) 1.2配置

MySQL高可用——PXC简介

PXC简介: galera产品是以galera cluster方式为mysql提高高可用集群解决方案的.galera cluster就是集成了galera插件的mysql集群.galera replication是codership提供的mysql数据同步方案,具有高可用性,方便扩展,并且可以实现多个mysql节点间的数据同步复制与读写,可保障数据库的服务高可用及数据强一致性. PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+kee

MySQL 高可用之MHA

目录 MySQL高可用之MHA MHA简介 MHA工作流程 HMA架构 MHA工具介绍 部署MHA MySQL环境准备 配置GTID主从复制 配置关闭relaylog自动删除 安装MHA Node 安装MHA Manager 测试故障切换 修复主从和MHA 配置VIP漂移 配置binlog-server 故障排错 MySQL高可用之MHA MHA简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshima