返回顶部
首页 > 资讯 > 数据库 >mysql5.5中怎么实现半同步复制
  • 843
分享到

mysql5.5中怎么实现半同步复制

2024-04-02 19:04:59 843人浏览 独家记忆
摘要

本篇文章为大家展示了Mysql5.5中怎么实现半同步复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。master:192.168.70.101slave:192.

本篇文章为大家展示了Mysql5.5中怎么实现半同步复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

master:192.168.70.101

slave:192.168.70.100

在master上创建用户repl(只需要在master上创建repl用户);

mysql>grant replication slave on *.* to 'repl'@'192.168.70.100' identified by 'repl';

在master上my.cnf配置如下:

[mysqld]
datadir=/data/dbdata
user=mysql
port=3306
innodb_data_home_dir = /data/dbdata
Socket          = /usr/local/mysql/tmp/mysql.sock
server-id=2
log-bin=master-bin
log-bin-index=master-bin.index
sync_binlog = 1
binlog_fORMat = row
character-set-server=utf8

在slave的my.cnf中配置如下:

[mysqld]
innodb_data_home_dir = /data/dbdata
socket = /usr/local/mysql/tmp/mysql.sockport=3306
user=mysql
default-storage-engine=innodb
server-id=3
read_only=on
log-bin=slave-bin
relay_log=slave-relay-bin
relay-log-index=slave-relay-bin.index
binlog_format = row
default-storage-engine=InnoDB
character-set-server=utf8

在master上产看,

mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 |      106 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

在slave上使用change master to命令将slave指向master。然后使用start slave命令启动复制。

 mysql> change master to       

  ->master_host='192.168.70.101',

  ->master_port=3306,

  ->master_user='repl',

  ->master_passWord='repl',

  ->master_log_file='master-bin.000003',

  ->master_log_pos=106;

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.70.101
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000003
          Read_Master_Log_Pos: 106
               Relay_Log_File: slave-relay-bin.000003
                Relay_Log_Pos: 252
        Relay_Master_Log_File: master-bin.000003
             Slave_IO_Running: Yes     ---成功
            Slave_SQL_Running: Yes    ---成功

flush logs命令强制轮换二进制日志,从而可以得到完整的二进制日志文件。

使用show binlog events in 'master-bin.000004(二进制日志)'\G;

检查二进制日志里有哪些事件

mysql> show binlog events in 'master-bin.000004'\G;
*************************** 1. row ***************************
   Log_name: master-bin.000004
        Pos: 4
 Event_type: Format_desc
  Server_id: 2
End_log_pos: 106
       Info: Server ver: 5.1.56-commUnity-log, Binlog ver: 4
*************************** 2. row ***************************
   Log_name: master-bin.000004
        Pos: 106
 Event_type: Query
  Server_id: 2
End_log_pos: 200
       Info: use `test`; create table tb1(text char(10))
*************************** 3. row ***************************
   Log_name: master-bin.000004
        Pos: 200
 Event_type: Rotate
  Server_id: 2
End_log_pos: 244
       Info: master-bin.000005;pos=4
3 rows in set (0.00 sec)

//克隆MASTER

[root@server picture]# mysqldump -uroot -pmysql --host=192.168.70.101 --all-databases --master-data=1 > backup-source.sql

--master-data=1选项mysqldump写change master to 语句,且参数为二进制日志文件及其位置。

然后在slave上恢复备份:

[root@server picture]#mysql -uroot -pmysql --host=192.168.70.100 < backup-source.sql

//克隆SLAVE

//清除Binlog日志

服务器自动清理旧的binlog文件,需设置expire-logs-days选项,这个选项可以作为服务器变量。如果服务重启后,不受影响,需要在my.cnf设置。

使用purge binary log命令手工清除binlog文件。格式如下:

1,purge binary log before datatime

将清除在给定时间之前的所有文件。

2,purge binary logs to 'filename'

将清除在给定文件之前的所有文件。

//默认情况下,由slave执行的事件没有被记录到二进制日志中,如果这个slave是master的一个备份,这时会出现问题。

在my.cnf添加log-slave-updates,以确保来自于master并被执行的语句会被写入slave的二进制日志中。

切换基本思路:为了让slave赶上备份服务器,并在正确的位置停止,使用start slave until命令。

slave>start slave until master_log_file='master-bin-000006',master_log_pos=700;

slave>select master_pos_wait('master-bin-000006',700);

//在主从服务器上配置支持半同步复制

[MASTER]
mysql>install plugin rpl_semi_sync_master soname &lsquo;semisync_master.so&rsquo;;

mysql> SELECT * FROM information_schema.PLUGINS WHERE PLUGIN_NAME='rpl_semi_sync_master'\G;
*************************** 1. row ***************************
           PLUGIN_NAME: rpl_semi_sync_master
        PLUGIN_VERSION: 1.0
         PLUGIN_STATUS: ACTIVE
           PLUGIN_TYPE: REPLICATION
   PLUGIN_TYPE_VERSION: 1.0
        PLUGIN_LIBRARY: semisync_master.so
PLUGIN_LIBRARY_VERSION: 1.3
         PLUGIN_AUTHOR: He Zhenxing
    PLUGIN_DESCRIPTION: Semi-synchronous replication master
        PLUGIN_LICENSE: GPL
           LOAD_OPTION: ON
1 row in set (0.00 sec)

mysql> show variables like 'rpl_semi_sync%';
+------------------------------------+-------+
| 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    |
+------------------------------------+-------+

修改rpl_semi_sync_master_enabled=ON,rpl_semi_sync_master_timeout单位时间为毫秒。

mysql> set global rpl_semi_sync_master_enabled = on;    
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'rpl_semi_sync%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | ON    |
| 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)

mysql> show global status like 'Rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 0     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 0     |
| Rpl_semi_sync_master_no_times              | 0     |
| 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      | 0     |
| Rpl_semi_sync_master_tx_wait_time          | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 0     |
+--------------------------------------------+-------+
下面的变量仅仅在主服务的半复制插件初始化后才有效,参数解释如下:
Rpl_semi_sync_master_clients:表示半复制从服务器的数量。
Rpl_semi_sync_master_net_avg_wait_time:主服务器等候从服务器的平均毫秒时间。(单位为毫秒)
Rpl_semi_sync_master_net_waits:主服务器等候从服务器的总毫秒时间。(单位为毫秒)
Rpl_semi_sync_master_no_times:主服务器关闭半复制的次数。
Rpl_semi_sync_master_no_tx:从服务器提交事物后没有收到ack确认成功的次数。
Rpl_semi_sync_master_status:决定半服务器是否可以在主服务器上操作,设置为ON表示开启,OFF表示关闭,为异步模式。
Rpl_semi_sync_master_timefunc_failures:主服务器调用时间函数失败的次数,例如gettimeofday()。
Rpl_semi_sync_master_tx_avg_wait_time:主服务器等候每个事物的平均时间(毫秒)。
Rpl_semi_sync_master_tx_waits:主服务器等候事物的总次数。
Rpl_semi_sync_master_wait_pos_backtraverse:
Rpl_semi_sync_master_wait_sessions:正在等候从服务器回复的会话数。
Rpl_semi_sync_master_yes_tx:从服务器成功得到答应的提交事物次数。

[SLAVE]
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

Rpl_semi_sync_slave_status:
rpl_semi_sync_slave_enabled:
rpl_semi_sync_slave_trace_level:

mysql> show global variables like 'rpl_semi_sync%';
+------------------------------------+-------+
| 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    |
| rpl_semi_sync_slave_enabled        | OFF   |
| rpl_semi_sync_slave_trace_level    | 32    |
+------------------------------------+-------+
6 rows in set (0.00 sec)

mysql> set global rpl_semi_sync_master_enabled = on;
Query OK, 0 rows affected (0.00 sec)

mysql> set global rpl_semi_sync_slave_enabled  = on;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'rpl_semi_sync%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | ON    |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
| rpl_semi_sync_slave_enabled        | ON    |
| rpl_semi_sync_slave_trace_level    | 32    |
+------------------------------------+-------+
6 rows in set (0.00 sec)

//rpl_semi_sync_master_enabled = on :启动master 支持半同步复制
//rpl_semi_sync_slave_enabled :启动slave支持半同步复制

当在从服务运行时调整支持半同步复制,必须重启I/O线程
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

在my.cnf配置文件如下:
在主服务器上:
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second

在每个从服务器上:
[mysqld]
rpl_semi_sync_slave_enabled=1

//关于mysql5.5存储引擎后台打印
mysql> show engine innodb status\G;
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
120330 14:37:49 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 3 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 367 1_second, 367 sleeps, 35 10_second, 19 background, 19 flush
srv_master_thread log flush and writes: 367
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 32, signal count 32
Mutex spin waits 14, rounds 420, OS waits 0
RW-shared spins 32, rounds 960, OS waits 32
RW-excl spins 0, rounds 0, OS waits 0
Spin rounds per wait: 30.00 mutex, 30.00 RW-shared, 0.00 RW-excl
------------
TRANSACTIONS
------------
Trx id counter 853
Purge done for trx's n:o < 77E undo n:o < 0
History list length 63
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
MySQL thread id 29, OS thread handle 0x49499940, query id 5743 localhost root
show engine innodb status
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (write thread)
I/O thread 7 state: waiting for i/o request (write thread)
I/O thread 8 state: waiting for i/o request (write thread)
I/O thread 9 state: waiting for i/o request (write thread)
Pending normal aio reads: 0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] ,
 ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0
379 OS file reads, 816 OS file writes, 358 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
 insert 0, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 276671, node heap has 2 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s
---
LOG
---
Log sequence number 3292715
Log flushed up to   3292715
Last checkpoint at  3292715
0 pending log writes, 0 pending chkp writes
313 log i/o's done, 0.00 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 137363456; in additional pool allocated 0
Dictionary memory allocated 1809452
Buffer pool size   8191
Free buffers       7328
Database pages     861
Old database pages 297
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 368, created 493, written 1315
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 861, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
1 read views open inside InnoDB
Main thread process no. 3289, id 1228495168, state: waiting for server activity
Number of rows inserted 0, updated 0, deleted 0, read 0
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================

上述内容就是mysql5.5中怎么实现半同步复制,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: mysql5.5中怎么实现半同步复制

本文链接: https://lsjlt.com/news/58483.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql5.5中怎么实现半同步复制
    本篇文章为大家展示了mysql5.5中怎么实现半同步复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。master:192.168.70.101slave:192....
    99+
    2024-04-02
  • mysql5.5以上实现半同步复制方法
    下文给大家带来关于mysql5.5以上实现半同步复制方法,感兴趣的话就一起来看看这篇文章吧,相信看完mysql5.5以上实现半同步复制方法对大家多少有点帮助吧。1.半同步半同步复制是主库将binlog日志发...
    99+
    2024-04-02
  • Mysql5.7中怎么实现半同步复制
    这篇文章将为大家详细讲解有关Mysql5.7中怎么实现半同步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。0.系统版本mysql> se...
    99+
    2024-04-02
  • MySQL中怎么实现半同步复制
    MySQL中怎么实现半同步复制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。半同步复制:什么是半同步复制我们知道在默认情况下,...
    99+
    2024-04-02
  • 怎么实现MySQL中的半同步复制
    这篇文章给大家介绍怎么实现MySQL中的半同步复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 关于MySQL的复制架构,大体有下面三种方式,异步,全同步复制,半同步复制。三种复制...
    99+
    2024-04-02
  • MySQL异步复制和半同步复制怎么实现
    这篇文章主要介绍“MySQL异步复制和半同步复制怎么实现”,在日常操作中,相信很多人在MySQL异步复制和半同步复制怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”My...
    99+
    2024-04-02
  • MySQL中怎么实现主从复制和半同步复制
    这篇文章将为大家详细讲解有关MySQL中怎么实现主从复制和半同步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、复制的介绍MySQL支持单向、异步复制...
    99+
    2024-04-02
  • Mysql中如何实现半同步复制
    本篇文章为大家展示了Mysql中如何实现半同步复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、环境准备:centos系统服务器2台、一台用户做Mysql主服务...
    99+
    2024-04-02
  • 【MySQL】半同步与增强半同步复制
    首先要明白事务提交的三个阶段,这里不再赘述。     半同步复制:主上已经提交了,但是日志还没来得及传到备库,这时候宕机了,在半同步看来,主库其...
    99+
    2024-04-02
  • mysql中怎么设置半同步复制
    mysql中怎么设置半同步复制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在主、从上安装和开启半同步插件mysql> install ...
    99+
    2024-04-02
  • mysql中怎么配置半同步复制
    这篇文章给大家介绍mysql中怎么配置半同步复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.准备主备库配置文件,创建复制用户主库server_id = 1 备库  se...
    99+
    2024-04-02
  • MySQL半同步复制中after_rollback怎么用
    这篇文章给大家分享的是有关MySQL半同步复制中after_rollback怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。调用流程 ha_rollback_low->...
    99+
    2024-04-02
  • mysql 半同步复制
    一.半同步复制 半同步复制特点 1. 与传统的异步复制相比,半同步复制在多个Slave节点中会选取一个节点进行半同步复制。也就是说,当Master提交一个事务的时候,在这个半同步复制的Slave端返回一...
    99+
    2024-04-02
  • 怎么在MySQL中配置半同步复制
    今天就跟大家聊聊有关怎么在MySQL中配置半同步复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL安装通过APT的方式安装,官方指导文档地...
    99+
    2024-04-02
  • Mysql异步复制、同步复制、半同步复制的区别
    这篇文章主要介绍“Mysql异步复制、同步复制、半同步复制的区别”,在日常操作中,相信很多人在Mysql异步复制、同步复制、半同步复制的区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • 半同步复制简介
    半同步复制简介:默认情况下,MySQL 5.5/5.6/5.7和MariaDB 10.0/10.1的复制功能是异步的,异步复制可以提供最佳的性能,主库把Binlog日志发送给从库,这一动作就结束了,并不会验...
    99+
    2024-04-02
  • msyql 的半同步复制
    mysql的半同步复制: mysql的异步复制:mysql默认使用异步方式进行同步,master在执行客户端提交的事务后会将结果返回给客户端,表示客户端的操作已经生效,同时会将该操作的binlog...
    99+
    2024-04-02
  • MySQL的半同步复制
    MySQL5.5 除了支持内置的异步复制机制,还提供了接口支持半同步复制的机制。 异步复制的缺点: MySQL复制默认是异步复制,Master将事件写入binlog,但并不知道Slave是否...
    99+
    2024-04-02
  • MySQL主从半同步复制
    目录一、半同步复制1.半同步复制概念2.配置半同步1)主库操作2)从库操作3)额外参数 一、半同步复制 1.半同步复制概念 从MYSQL5.5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronou...
    99+
    2022-01-18
    MySQL主从半同步复制 数据库入门 数据库基础教程 数据库 mysql
  • 半同步复制(Semi-synchronous Replication)
    MySQL5.5之前,MySQL的复制是异步操作,主库和从库的数据之间存在一定的延迟。这样存在一定的隐患:当主库上写入一个事务并        交成功,而从库尚未得到...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作