文档章节

MySQL主从同步错误情况下的全量备份恢复

go2school
 go2school
发布于 2016/07/15 15:19
字数 1054
阅读 68
收藏 3

一个Web系统有一主两从的小型MySQL集群,通过Amoeba调度。近日发现主从之间的同步发生异常,从库无法更新数据。试了多种方法无法恢复后,决定重新建立从库数据。方法如下。

假设主库为server1,两个从库为server2和server3

主库server1的IP地址是192.168.0.2

从库server2的IP地址是192.168.0.3

从库server3的IP地址是192.168.0.4

一、停止Amoeba的主从调度,将所有数据库读写导向主库server1

进入Amoeba的conf目录,打开dbServers.xml文件

<amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">

		<!-- 
			Each dbServer needs to be configured into a Pool,
			If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
			 add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig
			 such as 'multiPool' dbServer   
		-->
		
	<dbServer name="abstractServer" abstractive="true">
		<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
			<property name="connectionManager">${defaultManager}</property>
			<property name="sendBufferSize">640</property>
			<property name="receiveBufferSize">1280</property>
				
			<!-- mysql port -->
			<property name="port">3306</property>
			
			<!-- mysql schema -->
			<property name="schema">appdb</property>
			
			<!-- mysql user -->
			<property name="user">amoeba</property>
			
			<property name="password">moocsakai</property>
		</factoryConfig>

		<poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool">
			<property name="maxActive">1200</property>
			<property name="maxIdle">500</property>
			<property name="minIdle">100</property>
			<property name="minEvictableIdleTimeMillis">600000</property>
			<property name="timeBetweenEvictionRunsMillis">600000</property>
			<property name="testOnBorrow">true</property>
			<property name="testOnReturn">true</property>
			<property name="testWhileIdle">true</property>
		</poolConfig>
	</dbServer>

	<dbServer name="server1"  parent="abstractServer">
		<factoryConfig>
			<!-- mysql ip -->
			<property name="ipAddress">192.168.0.2</property>
		</factoryConfig>
	</dbServer>
	
	<dbServer name="server2"  parent="abstractServer">
		<factoryConfig>
			<!-- mysql ip -->
			<property name="ipAddress">192.168.0.3</property>
		</factoryConfig>
	</dbServer>
			 
	<dbServer name="server3"  parent="abstractServer">
		<factoryConfig>
			<property name="ipAddress">192.168.0.4</property>
		</factoryConfig>
	</dbServer>
	
	<dbServer name="multiPool" virtual="true">
		<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
			<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
			<property name="loadbalance">1</property>
			
			<!-- Separated by commas,such as: server1,server2,server1 -->
			<property name="poolNames">server2,server3</property>
		</poolConfig>
	</dbServer>
		
</amoeba:dbServers>

定位到XML文件内容<dbServer name="multiPool" virtual="true">位置,将其中的server2,server3改为server1,server2后,保存xml文件,再进入Amoeba的bin目录使用如下命令重启amoeba

./shutdown
./launcher

经过这一步骤后,Amoeba将所有的读写请求定向到server1,server2和server3被旁路开了。

二、备份主库server1

进入server1,使用如下命令备份主库的日志到目录/mooc/databackup

innobackupex --user=root --password=abc /mooc/databackup/ -socket=/tmp/mysql.sock

备份成功后,会在目录/mooc/databackup下生成新的目录2016-07-15_12-29-39,其中包含了数据库中所有数据操作日志文件

三、全量恢复从库server2和server3。以server2为例,server3方法相同

1、拷贝主库的备份日志文件到从库某目录下,假设/moocmysql

scp -r /mooc/databackup/2016-07-15_12-29-39 root@server2:/moocmysql

2、登录到从库server2机器,将日志文件在从库恢复

innobackupex  --defaults-file=/etc/my.cnf  --apply-log /moocmysql/2016-07-15_12-29-39

3、停止从库服务器,并删除其中所有数据,假设server2的数据保存在/moocmysql/data目录下

service mysqld stop
rm -rf /moocmysql/data/*

4、全量恢复从库的数据到/moocmysql/data/

innobackupex --defaults-file=/etc/my.cnf --copy-back /mooc/databackup/2016-07-15_12-29-39

5、设置数据访问权限

chown -R mysql:mysql /moocmysql/data

6、启动mysql

service mysqld start

7、找到本次全量更新的新的同步点

cat /moocmysql/data/xtrabackup_binlog_pos_innodb

返回两个信息

master-bin.000297    248684412

8、进入mysql的控制台,设置新的同步点为这两个信息

停止slave

stop slave;

改变同步参数

change master to master_host='10.128.18.162',master_user='mooc2',master_password='moocsakai',master_log_file='master-bin.000297',master_log_pos=248684412;

启动slave

start slave

查看主从设置状态

show slave status\G;

看到信息Slave_IO_Running: Yes和Slave_SQL_Running: Yes就表示设置成功了。

四、恢复Amoeba的主从调度,修改dbServer.xml,定位到XML文件内容<dbServer name="multiPool" virtual="true">位置,将其中的server1,server1改回server2,server3后,保存xml文件,再进入Amoeba的bin目录使用如下命令重启amoeba

./shutdown
./launcher

至此,操作应该完成。

 

注意可能发生的错误

如果启动mysql从库时报错pid不存在,则应做如下查看:

1、查看通过scp命令拷贝数据的时候,是否所有日志文件都全部拷贝完成,可以通过比较文件个数和目录大小查看。

2、查看是否修改了数据的访问权限

© 著作权归作者所有

共有 人打赏支持
go2school
粉丝 11
博文 34
码字总数 14674
作品 0
技术主管
私信 提问
mysql不停库不锁表在线主从配置

mysql不停库不锁表在线主从配置: 说明: 10G以下的数据库:使用mysqldump导出数据和备份恢复比较合适,便捷。 100-500G数据库:使用Percona-Xtrabackup备份工具,在线热备,全量、增量、单表...

ZHENG-JY
09/04
0
0
MySQL主从复制-xtrabackup的使用与延时复制

xtrabackup是percona公司针对MySQL开发的一款开源的物理备份工具,直接拷贝物理文件,速度快,效率高,支持不锁表备份,支持全量、增量(基于LSN序号)、压缩及流备份等等,那今天要做的是,用...

segastar660
06/29
0
0
2017 11-10 Mysql应用2

一.mysql的日志应用 (1)查询日志:general_log 记录查询语句,日志存储位置: 文件:file 表:table (mysql.generallog) generallog={ON|OFF} generallogfile=HOSTNAME.log log_output={FILE...

楠人帮
2017/11/12
0
0
为MySQL选择合适的备份方式

数据库的备份是极其重要的事情。如果没有备份,遇到下列情况就会抓狂: UPDATE or DELETE whitout where… table was DROPPed accidentally… INNODB was corrupt… entire datacenter lose...

markYun
2013/08/08
0
0
mysql 主备XtraBackup恢复

> MySQL主从同步原理MySQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Maste...

我不是瘦子
01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部