利用percona-xtrabackup快速搭建MySQL数据库主从复制

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

应用场景:

Linux服务器A运行MySQL服务,并开启了log-bin(log-bin = mysql-bin)和指定了server-id(server-id = 1);

Linux服务器B也以与服务器A同样的方式(不同样也可以,参考下面的“注意”)安装了MySQL服务,可开启log-bin也可不开启log-bin,如果开启了log-bin则需要注意MySQL function的限制问题(可通过set global log_bin_trust_function_creators=TRUE;解决);

复制模式:服务器B与服务器A的MySQL完全同步(推荐这么做,参考:《记一次因磁盘块默认保留策略导致的数据库导入失败问题》文章中的最后一段关于数据库HA的描述)。

注意:

服务器A和服务器B最好采用相近的硬件配置和数据库安装参数。如果数据库都是编译安装的,那需要注意配置libmysqlclient18,否则会导致手动安装的percona-xtrabackup运行时报错,说找不到某些运行文件。

可参考:

1
2
3
4
5
6
7
8
9
10
11
# Set mysql library    
ln  -s  /usr/local/mysql/lib/libmysqlclient .so.18.0.0  /usr/lib64/libmysqlclient .so.18.0.0    
ln  -s  /usr/local/mysql/lib/libmysqlclient .so.18.0.0  /usr/lib64/libmysqlclient .so.18    
ln  -s  /usr/local/mysql/lib/libmysqlclient .so.18.0.0  /usr/lib64/libmysqlclient .so    
ls  -l  /usr/lib64/libmysqlclient .so.18.0.0    
ls  -l  /usr/lib64/libmysqlclient .so.18    
ls  -l  /usr/lib64/libmysqlclient .so    
vim  /etc/ld .so.conf.d /mysql-x86_64 .conf     
     /usr/lib64/mysql     
     /usr/local/mysql/lib    
ldconfig

工具知识:

percona-xtrabackup是一个开源免费的MySQL备份工具,支持热备(也就是说备份过程中不影响数据库使用,io和部分cpu资源还是需要的,但一般来说对数据库服务器的影响并不是很大,特别是当数据库的数据目录和备份目录是所在磁盘是高性能磁盘或者不同的磁盘时,对其影响微乎甚微)。

它的备份原理与冷copy数据库数据库目录基本类似,但做的更精细一下,比如自动忽略某些不需要的日志、文件等。

CentOS默认源中没有percona-xtrabackup这个工具包,只能采用手动安装的方式。

1
2
3
4
5
6
7
8
9
cd   
wget -c https: //www .percona.com /downloads/XtraBackup/Percona-XtraBackup-2 .2.12 /binary/tarball/percona-xtrabackup-2 .2.12-Linux-x86_64. tar .gz    
tar  zxf percona-xtrabackup-2.2.12-Linux-x86_64. tar .gz     
cd  percona-xtrabackup-2.2.12-Linux-x86_64 /bin    
yum -y  install  perl perl-Time-HiRes    
ln  -s  /root/percona-xtrabackup-2 .2.12-Linux-x86_64 /bin/innobackupex  /usr/bin/innobackupex    
ln  -s  /root/percona-xtrabackup-2 .2.12-Linux-x86_64 /bin/xbcrypt  /usr/bin/xbcrypt    
ln  -s  /root/percona-xtrabackup-2 .2.12-Linux-x86_64 /bin/xbstream  /usr/bin/xbstream    
ln  -s  /root/percona-xtrabackup-2 .2.12-Linux-x86_64 /bin/xtrabackup  /usr/bin/xtrabackup

Ubuntu默认提供percona-xtrabackup工具,可以直接使用apt-get进行安装,apt-get -y install percona-xtrabackup。

1
apt-get -y  install  percona-xtrabackup

注意:

Ubuntu系统中使用apt-get安装percona-xtrabackup工具时会导致libmysqlclient18 mysql-common这两个包也会被安装(libaio1 libdbd-mysql-perl libdbi-perl libmysqlclient18 mysql-common percona-xtrabackup),mysql-common这个包会带进/etc/mysql/my.cnf,也许会导致service mysql {command}不能正常使用,可以将/etc/mysql/my.cnf改名或者将/etc/mysql目录改名,消除影响。如果数据库不是采用编译安装而是采用apt-get安装的话,则可以注意一下,看看是否有影响。

操作步骤:

1.确定主从数据库上都正确配置了log-bin和分配了不同的server-id    

1
2
3
egrep  '(log-bin|server-id)'  /etc/my .cnf    
或    
grep  -E  '(log-bin|server-id)'  /etc/my .cnf

2.在主库服务器上使用innobackupex工具备份数据库并将数据库备份文件传输到从库机器的磁盘上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# for master    
apt-get  install  percona-xtrabackup    
mv  /etc/mysql/my .cnf  /etc/mysql/my .cnf~ ||  mv  /etc/mysql  /etc/mysql ~    
service mysql status    
# df -h    
# du -sh /data/mysql/data     
# 观察一下磁盘使用情况,以及/data/mysql/data MySQL数据库数据目录的占用空间的大小,评估将这些文件scp到从库服务器的哪个位置等等    
cd  /data    
mkdir  -p  /data/mysql-master_data    
# which innobackupex    
# 为了避免ssh连接丢失,采用nohup执行    
nohup  /usr/bin/innobackupex  --user=root --password=password  /data/mysql-master_data  &    
#上述命令执行成功后会在/data/mysql-master_data目录下得到一个以时间格式生成的新目录的名字,如/data/mysql-master_data/2015-11-03_12-39-51    
# make sure user privileges on scp target    
# sshpass - noninteractive ssh password provider    
apt-get -y  install  sshpass    
# 为了避免ssh连接丢失,可以采用nohup执行    
sshpass -ppassword  scp  -o StrictHostKeyChecking=no -P22 -r  /data/mysql-master_data  vivo@192.168.100.126: /data    
rm  -rf  /data/mysql-master_data

3.在从库服务器上使用innobackupex工具恢复从主库服务器得来的数据库备份文件    

1
2
3
4
5
6
7
8
9
# for slave    
#此处参考文章下面的“xtraBackup备份原理剖析”参考了解为什么需要apply-log    
innobackupex --apply-log  /data/mysql-master_data/2015-11-03_12-39-51    
#查看“/data/mysql-master_data/2015-11-03_12-39-51”内的xtrabackup_binlog_info文件,记录bin-log filename和pos值,以便切换master。    
service mysql stop    
#清空数据库数据目录    
rm  -rf  /data/mysql/data/ *    
innobackupex --copy-back  /data/mysql-master_data/2015-11-03_12-39-51    
chown  mysql:mysql -R  /data/mysql/data/

4.配置从库,启用同步进程和观察结果    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
service mysql start    
mysql -uroot -ppassword    
#如果从库的my.cnf中设置了开启二进制日志,为了程序员的某些便利,启用log_bin_trust_function_creators,进一步了解可以参考下方的“MySQL 函数限制”和“MySQL创建方法错误:This function has none of DETERMINISTIC, NO SQL”    
SHOW VARIABLES LIKE  '%func%' ;    
SET GLOBAL log_bin_trust_function_creators=1;    
SHOW VARIABLES LIKE  '%func%' ;    
CHANGE MASTER TO MASTER_HOST= '192.168.100.132' ,MASTER_USER= 'root' ,MASTER_PASSWORD= 'password' ,MASTER_LOG_FILE= 'mysql-bin.000665' ,MASTER_LOG_POS=51145611;    
START SLAVE;    
SHOW SLAVE STATUS \G;    
#注意观察Slave_IO_Running: Yes和Slave_SQL_Running: Yes,只有都是Yes的时候才表示正确    
# 如果原先主库上配置有event则需要在从库上停掉,毕竟从库不是用于做这个(含有写入操作)的    
SHOW VARIABLES LIKE  'event_scheduler' ;    
SET GLOBAL event_scheduler=0;    
SHOW VARIABLES LIKE  'event_scheduler' ;    
QUIT;    
rm  -rf  /data/mysql-master_data    
# end

附带,利用innobackupex 工具单机备份数据库和恢复数据库的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# backup   
cd  /data    
mkdir  -p  /data/mysql-master_data    
nohup  /usr/bin/innobackupex  --user=root --password=password /data/mysql-master_data  &    
ls  /data/mysql/data/  -alh    
ls  /etc/my .cnf -l
# recovery   
service mysql stop    
service mysql status    
innobackupex --apply-log  /data/mysql-master_data/2015-11-03_11-21-10/    
rm  -rf  /data/mysql/data/ *    
innobackupex --copy-back  /data/mysql-master_data/2015-11-03_11-21-10/    
chown  mysql:mysql -R  /data/mysql/data/    
service mysql start    
rm  -rf  /data/mysql-master_data

参考:

percona-xtrabackup 介绍 https://www.percona.com/software/mysql-database/percona-xtrabackup

xtraBackup备份原理剖析 http://blog.chinaunix.net/uid-20785090-id-4212816.html

MySQL 复制选项 http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html

MySQL 函数限制 http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_log_bin_trust_function_creators

MySQL创建方法错误:This function has none of DETERMINISTIC, NO SQL http://blog.sina.com.cn/s/blog_4cb400450100ntu6.html

tag:MySQL数据库主从配置,innobackupex 备份恢复数据库,xtrabackup备份恢复数据库,innobackupex 备份还原数据库,xtrabackup备份还原数据库

--end--



本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1709183,如需转载请自行联系原作者



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
129 1
|
2月前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
143 1
|
8天前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
66 24
|
2月前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
123 1
MySQL主从复制原理和使用
|
2月前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
3月前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
129 6
|
3月前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
78 1
|
3月前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
4月前
|
存储 关系型数据库 MySQL
实战!MySQL主从复制一键搭建脚本分享
实战!MySQL主从复制一键搭建脚本分享
98 2
|
4月前
|
SQL 关系型数据库 MySQL
说一下MySQL主从复制的原理?
【8月更文挑战第24天】说一下MySQL主从复制的原理?
66 0