主从复制实验步骤和半同步的实现方法

实验环境:

主节点IP:172.16.2.16

从节点IP:172.16.2.17

MariaDB的版本是5.5.36,使用二进制方式安装。已安装完成。

实验目的:

了解主从复制,各个节点的工作方式。

操作步骤:

1,主服务器需要开启二进制日志记录,并且授权一个用户给从节点。

主服务器的主配置文件[mysqld]内容如下。

[mysqld]
port= 3306
socket= /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
log-bin=/mydata/binlog/mysql-bin   定义二进制日志的位置,生产环境中不应当与数据库文件在一个磁盘上。
binlog_format=mixed
server-id= 1        server-id就使用默认的1
datadir=/mydata/data
sync_binlog = 1              产生二进制日志就写入磁盘

给从节点授权一个复制使用的用户

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO [email protected]‘172.16.2.17‘ IDENTIFIED BY ‘slavepass‘;
MariaDB [(none)]> FLUSH PRIVILEGES;

从节点配置:

mysql的主配置文件[mysqld]段如下

[mysqld]
port= 3306
socket= /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
#log-bin=mysql-bin        因为节点无需二进制日志,所以把这项注释掉了
relay-log=/mydata/relaylog/relay-log       定义中继日志
binlog_format=mixed
server-id= 2           server-id定义为2
datadir=/mydata/data
read_only = 1            设定数据库为只读,但对于超级用户无效。只能针对普通用户。

在mysql中执行

CHANGE MASTER TO MASTER_HOST=‘172.16.2.15‘, MASTER_USER=‘realuser‘, MASTER_PASSWORD=‘passwd‘, MASTER_LOG_FILE=‘master_bin.000001‘, MASTER_LOG_POS=495;    
START SLAVE;

配置完成后,在主库创建数据库和表,然后到从库查看。如果有说明配置成功。

查看从节点状态的命令是:SHOW SLAVE STATUS; 其它含意解释如下。

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:                      当前从节点IO的状态                      
Master_Host: 172.16.2.16      主节点的IP  
Master_User: slave                  使用那个用户连接的主节点
Master_Port: 3306                  主节点使用的TCP端口
Connect_Retry: 60                    多长时间读取一次
Master_Log_File: mysql-bin.000005    当前主节点的二进制日志文件
Read_Master_Log_Pos: 581                      当前主节点二进制日志文件位置
Relay_Log_File: relay-log.000001        当前从节点中继日志文件
Relay_Log_Pos: 4                                当前从节点中继日志文件中记录的位置
Relay_Master_Log_File: mysql-bin.000005  正在中继主节点的日志文件是那个
Slave_IO_Running: No                            从节点的IO_THREAD线程是否启动,如果为NO表示还没有向主节点请求二进制日志文件。这个线程工作内容是把主节点的二进制日志一条一条的同步到从节点的中继日志中。
Slave_SQL_Running: No                 从节点的SQL线程是否启用,这个线程的任务是把中继日志中的SQL语句一条一条的读的MySQL中执行,以实现数据的写入。
Master_Server_Id: 0               主节点的ID

-------------------------------------------------------------------------------------------

    当数据库已经运行了一段时间后,主节点已经有大量的数据。这时如果添加一台从节点,最好把主节点做一个完整备份,恢复到从节点。然后再配置从节点到主节点复制数据,这样能快速把主从节点数据同步一致。

                

    1,先对主服务器做一个完整备份。然后把备份好的数据发送到从节点上。

# mysqldump --lock-all-tables --all-databases --master-data=2 > master.sql

# scp master.sql 172.16.2.17:/root

需要创建从节点连接主节点使用的数据库。

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO  [email protected]‘172.16.2.13‘  IDENTIFIED BY ‘passwd‘

mysql> FLUSH PRIVILEGES;

 2,定义好从节点的工作特性。然后恢复数据。

在配置文件中[mysqld]加入以下段,并且注释二进制日志,因为从节点要二进制日志没用,白白浪费空间。

relay-log  =  /mydata/relaylog/relay-log

server-id = 2             serviceID 一定不能与主节点的ID重复。

read_only = 1           设置数据库为只读模式,但对于超级用户无效。普通用户只能读,不能修改。

# mysql < /root/master.sql    把主节点备份的数据恢复到库中

 3,恢复数据时需要在备份的文件中找到,备份主节点时二进制日志文件使用到那个文件了,二进制日志文件中事件id所在的位置。大概如下:

-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000009‘, MASTER_LOG_POS=7925;

然后到数据库执行连接到主服务器。

CHANGE MASTER TO MASTER_HOST=‘172.16.2.15‘, MASTER_USER=‘realuser‘, MASTER_PASSWORD=‘passwd‘, MASTER_LOG_FILE=‘master_bin.000001‘, MASTER_LOG_POS=495;

        启动IO_THREAD线程和SQL_THREAD线程

START SLAVE;

------------------------------------------------------------------------------------------

复制总结:

1,对于master 需要启动二进制日志,有惟一的server-id

2,binlog dump : 将从服务的 io  thread 发出的读取二进制日志事件请求的数据发送给对方 。

3,slave 必须启用中继日志,关闭二进制日志(建议),有惟一的server-id。

IO thread:向master请求二进制日志并保存到本地的中继日志。

SQL thread:把本的中继日志中的sql语句一条一条的读取并执行

4,对于从服务器,一般只有一个主服务器。否则会造成中继日志混乱。

5, MariaDB 10 版本支持多源复制。从服务器支持多个主服务器,但是多个数据库。

6, 可以多级复制,但从服务器如果做为其它从服务器的主服务器,需要开启二进制日志

7, 从服务器可以有多个。

8, 因为是异步复制,从服务器的数据可能会落后于主服务器。这个问题一很难避免。

-------------------------------------------------------------------------------------------

如何启用半同步?    从mysql5.5.8后才有的功能。由google贡献给mysql的补丁,以插件式安装,默认没有安装。位于mysql的安装目录下的 lib/plugin下的 semisync_master.so 和 semisync_slave.so 一个是主节点专用,一个是从节点专用。

什么叫半同步: master至少要等待一个从节点把数据完全复制过去。

使用INSTALL 命令安装。配置文件中[mysql]下的plugin_dir= 用来指定插件文件的保存位置。如果有其它插件保存在其它位置,需要在这里定义,这样INSTALL命令可以找到。

在mysql下的安装方法 

MariaDB> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so‘;

安装过后引入几个新的服务器变量: 查看方法: SHOW GLOBAL VARIABLES LIKE ‘%semi%‘;

      | 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       如果没有从节点是否还需要等待。

需要在配置文件中的[mysql]段中写入

 rpl_semi_sync_master_enabled=1
 rpl_semi_sync_master_timeout=1000

设置好后重新启动服务就可以了。

在从节点上的设置方法

MariaDB> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;
MariaDB> SHOW GLOBAL VARIABLES LIKE ‘rpl_semi%‘;       查看安装插件后生成的服务器变量
      | rpl_semi_sync_slave_enabled      | OFF    是否开启了此插件,ON为开启。
      | rpl_semi_sync_slave_trace_level  | 32     此项需要与主节点保持一致。

在主配置文件中的[mysql] 段中写入

rpl_semi_sync_slave_enabled=1

在从节点上重启IO THREAD线程就可以了。

MariaDB> STOP SLAVE IO_THREAD;
MariaDB> START SLAVE IO_THREAD;

查看是否已经启用半同步模式,需要在MASTER上查看。

MariaDB> SHOW GLOBAL STATUS LIKE ‘%semi%‘;
     Rpl_semi_sync_master_clients    工作于半同步的客户端有几个
     Rpl_semi_sync_master_net_avg_wait_time   主节点为等待IO_THREAD平均等待的时间
     Rpl_semi_sync_master_net_wait_time     主节点为等待IO_THREAD等待的时间
     Rpl_semi_sync_master_net_waits           主节点为等待IO_THREAD等待的次数
     Rpl_semi_sync_master_tx_avg_wait_time  主节点为等待IO_THREAD等待的事务
时间: 2024-10-25 00:38:43

主从复制实验步骤和半同步的实现方法的相关文章

mysql主从复制中的半同步复制

实验mysql借助google提供的插件,完成半同步复制模型: 物理机依然是win7系统,虚拟机为centos7: 主节点:192.168.255.2 从节点:192.168.255.3 先配置为主从复制模型: 在主节点: ]# vim /etc/my.cnf 从节点: ]# vim /etc/my.cnf 启动两节点的myslq服务: ]# systemctl start mariadb.service 在主节点: 配置有复制权限的账号: > GRANT REPLICATION SLAVE,R

MySQL 5.5 主从复制异步、半同步以及注意事项详解

大纲 一.前言 二.Mysql 基础知识 三.Mysql 复制(Replication) 四.Mysql 复制(Replication)类型 五.Mysql 主从复制基本步骤 六.Mysql 主从复制(异步) 七.Mysql 主从复制(半同步) 八.Mysql 复制工具 九.Mysql 复制注意事项 十.Mysql 复制过滤 一.前言 从这一篇博客开始我们就来学习mysql的高级课程,在前面的几篇博客我们讲解了mysql基础知识.mysql日志类型.mysql配置文件.mysql备份策略,这一篇

MySQL基于SSL的主从复制、半同步复制

(一)主从复制的架构图 1.在主数据库上,每执行一个有可能引起数据库发生改变的的语句,都会记录到二进制日志文件中,并把它们保存为事件. 2.每保存一个事件,我们就通过mysql的服务器3306端口发送给另外一台服务器 3.另外一台服务器把这个事件接收下来,接收的时候先保存到本地的中继日志里面 4.然后,mysql从中继日志文件里读一个事件,然后保存到数据文件 (二)一主多从 半同步架构图 1.Master和Slave-1在同一个机房 2.Slave-2和Slave-3在其它机房 3.半同步指的是

mysql5.5半同步复制

一.实验目的: mysql在主从复制还支持半同步复制,mysql复制是异步的,因为同步性能非常差.主库分发事件以后必须等待从库复制数据结束并收到从库正常响应以后,才能进行下一步操作.异步模式导致从库落后主库时,主库无从得知.因此mysql5.5后引入google补丁半同步复制,2个插件:semisync_master.so与semisync_slave.so.半同步:一主多从架构中,主库只等待一台从库复制完成数据并返回正常响应,就认为同步完成进行下一步操作,这样即有异步的高速,又有同步的安全.一

关于Mysql5.6半同步主从复制的开启方法

介绍 先了解一下mysql的主从复制是什么回事,我们都知道,mysql主从复制是基于binlog的复制方式,而mysql默认的主从复制方式,其实是异步复制. 主库实际上并不关心从库是否把数据拉完没有,也不关心从库有没有把数据写进硬盘入库,反正数据丢过去,让从库自己慢慢跑,而实际上这也并不影响主库任何使用的情况. 细心的人就会发现,这种情况下,假如主库临时挂了,binlog还没传输完毕,即使是集群也不能保证说这挂了之后的数据一致性,因为你不能排除别人在主库是正常提交的,而从库没有数据的情况. 然后

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数据的主从复制、半同步复制和主主复制详解

一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧! MySQL数据库支持同步复制.单向.异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环

Mariadb主从复制,半同步复制,主主复制

文章内容概览 主从复制介绍 主从复制的作用 复制工作流程 复制时应该注意的问题 主从复制配置 半同步复制配置 复制过滤器方法说明和配置 双主(主主复制)配置 文章环境说明 操作系统: [[email protected] ~]# cat/etc/redhat-release CentOS release 6.6 (Final) [[email protected] ~]# uname -r 2.6.32-504.el6.x86_64 [[email protected] ~]# uname -m

L11 MariaDB主从复制(异步,半同步)

   MariaDB主从复制(异步,半同步)   复制简单架构: 复制原理图: 异步与半同步说明: 1.半同步复制       在说明半同步复制之前我们先来了解一下,什么是同步复制?同步复制:同步复制可以定义为数据在同一时刻被提交到一台或多台机器,通常这是通过众所周知的"两阶段提交"做到的.虽然这确实给你在多系统中保持一致性,但也由于增加了额外的消息交换而造成性能下降.使用MyISAM或者InnoDB存储引擎的MySQL本身并不支持同步复制,然而有些技术,例如分布式复制块设备(简称DR