mysql主从复制、主主复制与半同步复制的实现

1.主从复制

实验环境:2台装有mariadb的centos6,ip地址分别为192.168.198.203(master ),192.168.194.90(slave)

测试:在master上新建一个数据库,查看slave中是否同步

#####################################################

master上的配置:

a. 启动二进制日志;在mariadb的配置文件/etc/my.cnf中添加

[mysqld]

log_bin=mysql-bin #开启二进制日志功能,并将二进制命名为mysql-bin

b. 为当前节点设置一个全局惟的ID号;

[mysqld]

server_id=1                              #服务器号,要全局唯一

c. 创建有复制权限的用户账号;

REPLICATION SLAVE, REPLICATION CLIENT

mariadb>  grant replication slave,replication client on *.* to ‘repluser‘@‘192.168.194.90‘ identified by ‘huanghu‘;

####################################################################

slave上的配置:

(1) 启动中继日志;

[mysqld]

relay_log=relay-log

relay_log_index=relay-log.index

(2) 为当前节点设置一个全局惟的ID号;

[mysqld]

server_id=2

(3) 使用有复制权限的用户账号连接至主数据库,并启动复制线程;

change master to master_host=‘192.168.198.203‘,master_user=‘repluser‘,master_password=‘huanghu‘,master_log_file=‘master-bin.000003‘, master_log_pos=7828;

## #master_log_file与master_log_pos的值根据在master中运行show master status的结果来确定;

(4)查看salve是否已经连接上master

show slave status

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.198.203

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master-bin.000003

Read_Master_Log_Pos: 8820

Relay_Log_File: relay-log.000003

Relay_Log_Pos: 530

Relay_Master_Log_File: master-bin.000003

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

slave与master已经建立连接

#########################################################

主主复制:

两台mariadb服务器互为主从,这样可以用来实现数据的读负载均衡,但是写请求在两台服务器上都得直接或间接执行;另外主主模型,不可避免的将会存在时间的延迟与及数据的不一致

实验环境:2台装有mariadb的centos6,ip地址分别为192.168.198.203(A ),192.168.194.90(B)

配置如下:

1.设置A为slave,B为master

a.在/etc/my.cnf中添加以下内容

[mariadb]

server_id=1

relay_log=relay-log ###开启中继日志功能,并将其命名为relay-log

skip_name_resolv=1####关闭主机名解析

在B的配置文件中添加以下内容:

[mariadb]

server_id=2

log_bin=master-bin

skip-name-resolv=1

#################

b.连接进入mariadb服务器,创建有复制功能的用户账号,并开启复制线程

1.在B上查看二进制日志的相应信息

MariaDB [hellodb]> show master status;

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

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| master-bin.000001 |      653 |              |                  |

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

1 row in set (0.00 sec)

2.在B上授权一个有复制功能的用户:

MariaDB [hellodb]> grant replication slave,replication client on *.* to ‘repluser‘@‘192.168.198.203‘ identified by ‘huanghu‘;

3.在B上设置当A 做为salve时的master服务器

grant master to master_host=‘192.168.194.90‘, master_user=‘repluser‘,master_password=‘huanghu‘,master_log_file=‘master-bin.000001‘,master_log_pos=653;

4.在A上查看连接master服务器的信息

MariaDB [hellodb]> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.194.90

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master-bin.000001

Read_Master_Log_Pos: 653

Relay_Log_File: relay-log.000002

Relay_Log_Pos: 758

Relay_Master_Log_File: master-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

设置A为slave,B为master完成

2、对A 设置master ,B设置slave

1.在A 的配置文件/etc/my.cnf中添加以下内容

[mariadb]

log_bin=master-bin

2.在B的配置文件中添加以下内容

[mariadb]

relay_log=relay-log

3.在A中设置具有复制权限的用户

mysql>  grant replication slave,replication client on *.* to ‘repluser‘@‘192.168.194.90‘ identified by ‘huanghu‘;

4.查看A主机当前的二进制日志信息

MariaDB [hellodb]> show master status;

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

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| master-bin.000004 |      473 |              |                  |

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

1 row in set (0.00 sec)

5.在B上设置其对应的master服务器

MariaDB [hellodb]> change master to master_host=‘192.168.198.203‘,master_user=‘repluser‘,master_password=‘huanghu‘ master_log_file=‘master-bin.000004‘ master_log_pos=473;

启动I/O THREAD与SQL THREAD线程

start slave

6.查看B设置是否 成功

MariaDB [hellodb]> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.198.203

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master-bin.000004

Read_Master_Log_Pos: 473

Relay_Log_File: relay-log.000007

Relay_Log_Pos: 758

Relay_Master_Log_File: master-bin.000004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

B主机为slave,A为master也设置成功了

#########################################################

3.半同步复制

主从复制除了具有读数据负载均衡的作用外,还可以用来做主服务器的数据备份;而为了能使从数据库上的数据是主数据库的完整备份,引入了半同步复制;

半同步复制的原理:半同步是在简单的主从复制的结构上发展而来的,当主数据库上执行对数据的修改(增、删、改)时,不再直接的返回客户端,而是在从数据库上至少已经有一台已经同步了数据后才返回;

在主从复制已可以正常工作的前提下配置半同步复制:

1.在master服务器上安装 semisync_master.so模块

a.查看mariadb安装时是否带有该模块

rpm -ql MariaDB-server

/usr/lib64/mysql/plugin/ha_tokudb.so

/usr/lib64/mysql/plugin/handlersocket.so

/usr/lib64/mysql/plugin/query_cache_info.so

/usr/lib64/mysql/plugin/semisync_master.so

/usr/lib64/mysql/plugin/semisync_slave.so

/usr/lib64/mysql/plugin/server_audit.so

/usr/lib64/mysql/plugin/sphinx.so

/usr/lib64/mysql/plugin/sql_errlog.so

b.行装载操作

A:    MariaDB [hellodb]> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;

##plugin:后接插件名 soname:后接模块名

B:    MariaDB [hellodb]> install plugin rpl_semi_sync_master soname ‘semisync_slave.so‘;

2.查看与rpl_semi_sync_master插件相关的信息

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

| Variable_name                      | Value |

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

| rpl_semi_sync_master_enabled       | OFF   |

| rpl_semi_sync_master_timeout       | 10000 |

| rpl_semi_sync_master_trace_level   | 32    |

| rpl_semi_sync_master_wait_no_slave | ON    |

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

4 rows in set (0.00 sec)

可以看到,插件装载后并不会自动启动生效,还需要手动开启

3.开启A与B上的插件功能

A:   MariaDB [hellodb]> set global rpl_semi_sync_master_enabled=1;

B:   MariaDB [hellodb]> set global rpl_semi_sync_slave_enabled=1;

4.查看插件相关参数

MariaDB [hellodb]> show global status like ‘%semi%‘;

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

| Variable_name                              | Value |

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

| Rpl_semi_sync_master_clients               | 1     |

| Rpl_semi_sync_master_net_avg_wait_time     | 14467 |

| Rpl_semi_sync_master_net_wait_time         | 28935 |

| Rpl_semi_sync_master_net_waits             | 2     |

| Rpl_semi_sync_master_no_times              | 1     |

| Rpl_semi_sync_master_no_tx                 | 0     |

| Rpl_semi_sync_master_status                | OFF   |

| Rpl_semi_sync_master_timefunc_failures     | 0     |

| Rpl_semi_sync_master_tx_avg_wait_time      | 2507  |

| Rpl_semi_sync_master_tx_wait_time          | 5014  |

| Rpl_semi_sync_master_tx_waits              | 2     |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

| Rpl_semi_sync_master_wait_sessions         | 0     |

| Rpl_semi_sync_master_yes_tx                | 2     |

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

14 rows in set (0.00 sec)

半同步复制完成

时间: 2024-10-07 20:51:01

mysql主从复制、主主复制与半同步复制的实现的相关文章

MySQL 主从复制、主主复制、半同步复制

MySQL 复制 =============================================================================== 概述: =============================================================================== MySQL Replication:   1.主从复制的目的和架构 ★Master/Slave(主/从) Master: write/read Slave

Mysql实现数据库主从复制、主主复制、半同步复制

--------------Mysql实现数据库主从复制架构---------------- 一.环境准备: centos系统服务器2台.一台用户做Mysql主服务器,一台用于做Mysql从服务器,配置好yum源.防火墙关闭.各节点时钟服务同步.各节点之间可以通过主机名互相通信 192.168.41.145   master 192.168.41.137  slave 二.准备步骤: 1.iptables -F && setenforce 清空防火墙策略,关闭selinux 2.①vim

主主复制,半同步复制

MYSQL主主复制:互为主从 容易产生的问题:数据不一致 主机 IP Master1 192.168.37.7 Master2 192.168.37.17 Master1设置 [[email protected] ~]#vim /etc/my.cnf [mysqld] log_bin server_id=7 auto_increment_offset=1 auto_increment_increment=2 创建复制帐号 MariaDB [(none)]> grant replication s

InnoSQL HA Suite的实现原理与配置说明 InnoSQL的VSR功能Virtual Sync Replication MySQL 5.5版本引入了半同步复制(semi-sync replicaiton)的功能 MySQL 5.6支持了crash safe功能

InnoSQL HA Suite的实现原理与配置说明  InnoSQL的VSR功能Virtual Sync Replication MySQL 5.5版本引入了半同步复制(semi-sync replicaiton)的功能 MySQL 5.6支持了crash safe功能 http://www.innomysql.net/article/7403.html Virtual Sync Replication 搭建一个MySQL数据库的复制(replication)环境是相当简单的,这点是MySQL

详解mysql复制机制--异步复制,半同步复制和并行复制

详解MySQL复制机制--异步复制,半同步复制和并行复制 **# 异步复制 异步复制是MySQL自带的最原始的复制方式,主库和备库成功建立复制关系后,在备库上会有一个IO线程去主库拉取binlog,并将binlogx到本地,就是下图中Relaylog,然后备库会开启另外一个SQL线程取回放Relay log,通过这种方式达到Master-Slave数据同步的目的. 通常情况下,slave是只读的,可以承担一部分读流量,而且可以根据实际需要,添加一个或者多个slave,这样在一定程度上可以缓解主库

MariaDB数据库主从复制、双主复制、半同步复制、基于SSL的安全复制实现及其功能特性介绍

一.复制概述 MariaDB/MySQL内建的复制功能是构建大型,高性能应用程序的基础.将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将MySQL的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位

MySQL5.6一主多从的半同步复制实例

半同步简介: 在默认情况下,MySQL的复制是异步的,这意味着主服务器及其从服务器是独立的.异步复制可以提供最佳的性能,因为主服务器在将更新的数据写入它的二进制日志(Binlog)文件中后,无需等待验证更新数据是否已经复制到从服务器中,就可以自由处理其它进入的事务处理请求.但这也同时带来了很高的风险,如果在主服务器或从服务器端发生故障,会造成主从数据的不一致,甚至在恢复时造成数据丢失. 从MySQL5.5开始引入了一种半同步复制功能,该功能可以确保主服务器和访问链中至少一台从服务器之间的数据一致

mysql主从复制--mysql-5.5异步、半同步配置

背景介绍 mysql5.5之前版本,mysql主从复制比较简单 mysql5.6:gtid,multi-thread replication master 1 启用二进制日志 log-bin = master-bin log-bin-index = master-bin.index 2 选择一个唯一的server id server-id = [0~2^32] 3 创建具有复制权限的用户 replication slave,复制的从节点 replication client,联系master,获

MySQL主从复制--MySQL5.5异步、半同步配置

大纲 一.主从复制复制原理 二.主从复制的作用及复制类型 三.MySQL5.5异步复制的实现 四.MySQL5.5半同步复制的实现 一.主从复制原理 工作原理 1.当Master接收到了一个写请求,处理写请求,将结果保存至磁盘中,并且会将此操作记录到二进制日志文件中 2.Slave会从Master的二进制日志中读取其中的事件保存至本地的中继日志中 3.Slave会启动一个线程来逐条读取中继日志中的事件并应用于本地的 二.主从复制的作用及复制类型 复制的作用 辅助实现备份 提供类似高可用的机制 异