Mysql主从半同步及双机热备

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

Mysql主从半同步及双机热备

Mysql主从同步配置(mysql版本5.5以上、keepalived软件实现双机热备):

基础:两台机子  主服务器:192.168.1.130 从服务器:192.168.1.131

1、修改mysql配置文件my.cnf(以下配置项,文件中有则根据下边要求修改,没有则自行添加)

主:

server-id = 1(主数据库一般都是id为1)
log-bin=mysql-bin (必须的)
binlog_format=mixed (必须的,推荐类型为mixd)
expire_logs_days=5 (为避免日志文件过大,设置过期时间为5天)
binlog-ignore-db = mysql (忽略同步的数据库,也不记入二进制日志,可列多行)
replicate-do-db = test (需要同步的数据库,记入二进制日志,可列多行)

从:

server-id = 2
log-bin=mysql-bin
binlog_format=mixed
expire_logs_days=5

注1:MySQL进行主从复制是通过二进制的日志文件来进行,所以我们必须开启MySQL的日志功能,即我们上面的log-bin,同时每一台数据库服务器都需要指定一个唯一的server-id,通常主数据库服务器我们指定为1。

注2:Mysql5.5版本以上不再支持master的用法,比如5.1中可用的(master-user = repl;master-password = repl;master-port = 3307)这样的语法已经失效了,如果你使用了,还会报错。(我在这里载了跟头,检查mysql日志/usr/local/db/mysql/ 127.0.0.1.err——您的路径也许会稍有不同——才发现错误)如果你不小心配置了这些参数,MySQL服务器将无法正常启动
错误提示为:[ERROR] /usr/local/mysql/bin/mysqld: unknownvariable ‘master-host=192.168.1.130’,正确的办法如上文所写。

配置完成之后,将主从两机的mysql服务重新启动一下。

2、Mysql主(1.130),执行:GRANT all privileges on *.* to 'test' @'192.168.1.131' IDENTIFIED BY '123456'(授予slave账号对所有数据库享有slave权限,密码为slave777);

3、查看Mysql主 的状态:执行:show master status;这时会看到master数据库所处的位置,记录下来:

show master status;

| File | Position |

| mysql-bin.000011 | 383 |

4、Mysql从:

执行:slave stop

执行:change master tomaster_host='192.168.1.130', master_port=3306, master_user=’test’,master_password=’123456’,master_log_file=’mysql-bin.000011′, master_log_pos=383;

执行:slave start;

5、查询slave的状态:mysql> show slavestatus \G;看下slave的状态:

Master_Log_File: mysql-bin.000011 (和主mysql一致)
Read_Master_Log_Pos: 383 (和主mysql一致)

Slave_IO_Running: Yes (读写)
Slave_SQL_Running: Yes (数据库状态)

还要注意状态中是否有error,如果没有的话,就差不多了。

6、测试数据库是否能够同步:略;

7、如果Slave复制失败,你可以根据错误信息进行修正,然后执行

mysql> slave stop;
mysql> slave start;
就可以把原来应该复制过来的数据都复制过来

8、几个常用的命令:

Slave start; --启动复制线程
Slave stop; --停止复制线程
Reset slave; --重置复制线程
Show slave status; --显示复制线程的状态
Show slave status\G; --显示复制线程的状态(分行显示)
Show master status\G; --显示主数据库的状态(分行显示)
Show master logs --显示主数据库日志,需在主数据库上运行
Change master to; --动态改变到主数据库的配置
Show processlist --显示有哪些线程在运行

 

由于Mysql的复制都是基于异步进行的,在特殊情况下不能保证数据的成功复制,因此在mysql 5.5之后使用了来自google补丁,可以将Mysql的复制实现半同步模式。所以需要为主服务器加载对应的插件。在Mysql的安装目录下的lib/plugin/目录中具有对应的插件semisync_master.sosemisync_slave.so

 

MasterSlavemysql命令行运行如下命令:

 

Master

mysql> install pluginrpl_semi_sync_master soname 'semisync_master.so'; 

mysql> set globalrpl_semi_sync_master_enabled = 1; 

mysql> set globalrpl_semi_sync_master_timeout = 1000; 

mysql> show variables like '%semi%';

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

| Variable_name                      | Value |

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

| rpl_semi_sync_master_enabled       | ON   |

| rpl_semi_sync_master_timeout       | 1000 |

| rpl_semi_sync_master_trace_level   | 32   |

| rpl_semi_sync_master_wait_no_slave |ON    |

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

 

Slave

mysql> install pluginrpl_semi_sync_slave soname 'semisync_slave.so'; 

mysql> set globalrpl_semi_sync_slave_enabled = 1; 

mysql> stop slave;

mysql> start slave;

mysql> show variables like '%semi%';

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

| Variable_name                   | Value |

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

| rpl_semi_sync_slave_enabled     | ON   |

| rpl_semi_sync_slave_trace_level | 32    |

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

 

检查半同步是否生效:

Master

mysql> show global status like'rpl_semi%';

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

| Variable_name                              | Value |

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

| Rpl_semi_sync_master_clients               | 1    |

|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                | ON    |

|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     |

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

说明半同步成功。

 

让半同步功能在MySQL每次启动都自动生效,在MasterSlavemy.cnf中编辑:

Master

[mysqld] 

rpl_semi_sync_master_enabled=1 

rpl_semi_sync_master_timeout=1000     #1

 

Slave

[mysqld] 

rpl_semi_sync_slave_enabled=1 

 

也可通过设置全局变量的方式来设置是否启动半同步插件:

Master

mysql> set globalrpl_semi_sync_master_enabled=1

取消加载插件

mysql> uninstall pluginrpl_semi_sync_master;

 

Slave

mysql> set globalrpl_semi_sync_slave_enabled = 1;

mysql> uninstall pluginrpl_semi_sync_slave;

 

安装keepalived软件实现双机热备

KeepalivedLinux下面实现VRRP备份路由的高可靠性运行件。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。

 

主服务器

#tar zxvf keepalived-1.2.2.tar.gz
#cd keepalived-1.2.2

#mkdir /usr/local/keepalived
#./configure --prefix=/usr/local/keepalived
#make
#make install
#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
修改keepalived配置文件

vim /usr/local/keepalived/etc/keepalived/keepalived.conf(删除多余内容,仅留以下部分)
! Configuration File for keepalived
global_defs {
 notification_email {
 yuhongchun027@163.com
 }
 notification_email_from keepalived@chtopnet.com
 smtp_server 127.0.0.1
 smtp_connect_timeout 30
 router_id LVS_DEVEL
}
vrrp_instance VI_1 {
 state MASTER
 interface eth0
 virtual_router_id 51
 priority 100
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass chtopnet
 }
 virtual_ipaddress {
 192.168.93.132
 }
}

修改/etc/sysconfig/keepalived的内容:

KEEPALIVED_OPTIONS="-D -f/usr/local/keepalived/etc/keepalived/keepalived.conf"

#service keepalived start

从服务器

#tar zxvf keepalived-1.2.2.tar.gz

#mkdir /usr/local/keepalived
#cd keepalived-1.2.2
#./configure --prefix=/usr/local/keepalived
#make
#make install
#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
#vim /usr/local/keepalived/etc/keepalived/keepalived.conf(删除多余内容,仅留以下部分)! Configuration File for keepalived
global_defs {
 notification_email {
 yuhongchun027@163.com
 }
 notification_email_from keepalived@chtopnet.com
 smtp_server 127.0.0.1
 smtp_connect_timeout 30
 router_id LVS_DEVEL
}
vrrp_instance VI_1 {
 state BACKUP
 interface eth0
 virtual_router_id 51
 priority 99
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass chtopnet
 }
 virtual_ipaddress {
 192.168.93.132
 }
}

修改/etc/sysconfig/keepalived的内容:

KEEPALIVED_OPTIONS="-D -f/usr/local/keepalived/etc/keepalived/keepalived.conf"

#service keepalived start

 

设置定时任务脚本,定时检测mysql状态:

Vicheck_mysql_helth.sh

#!/bin/bash

MYSQL=/usr/local/mysql/bin/mysql

MYSQL_HOST=127.0.0.1

MYSQL_USER=root

MYSQL_PASSWORD=aibei1010

CHECK_TIME=3

#mysql  is working MYSQL_OK is 1 , mysql downMYSQL_OK is 0

MYSQL_OK=1

functioncheck_mysql_helth (){

$MYSQL-u$MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null2>&1

if [$? = 0 ] ;then

     MYSQL_OK=1

else

     MYSQL_OK=0

fi

     return $MYSQL_OK

}

while[ $CHECK_TIME -ne 0 ]

do

     let "CHECK_TIME -= 1"

     check_mysql_helth

if [$MYSQL_OK = 1 ] ; then

     CHECK_TIME=0

     exit 0

fi

 

if [$MYSQL_OK -eq 0 ] &&  [$CHECK_TIME -eq 0 ]

then

     killall keepalived

exit1

fi

done

 




     本文转自aaron428 51CTO博客,原文链接: http://blog.51cto.com/aaronsa/1741485 ,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
447 0
|
17天前
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
62 16
|
3月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
39 1
|
4月前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
428 11
|
5月前
|
关系型数据库 MySQL Linux
mysql 主从同步 实现增量备份
【8月更文挑战第28天】mysql 主从同步 实现增量备份
68 3
|
5月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之使用CTAS同步MySQL到Hologres时出现的时区差异,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL 缓存 关系型数据库
MySQL主从同步如何操作?
随着业务增长,单台MySQL服务器难以应对高并发访问和潜在的故障风险。主从同步(Master-Slave)通过读写分离提升数据库处理能力,具备多项优势:读写分离减轻主数据库压力、支持一主多从增强扩展性与高可用性、以及数据备份确保容灾恢复。MySQL利用binlog实现主从数据同步,记录所有写操作,不包含查询。binlog有三种格式:Statement(基于SQL语句)、Row(基于行更改)、Mixed(结合前两者优点)。主从复制涉及三个关键线程:主库的binlog dump thread和从库的I/O thread与SQL thread。
170 0
MySQL主从同步如何操作?
|
5月前
|
存储 关系型数据库 MySQL
MySQL主从同步如何保证数据一致性?
MySQL主从同步如何保证数据一致性?
404 0
MySQL主从同步如何保证数据一致性?
|
5月前
|
SQL 存储 关系型数据库
实时计算 Flink版产品使用问题之同步MySQL多张表的过程中,内存释放依赖于什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL 存储 关系型数据库
MySQL主从同步延迟原因与解决方法
MySQL主从同步延迟原因与解决方法
794 0