设为首页 收藏本站
查看: 826|回复: 0

[经验分享] 利用percona-xtrabackup快速搭建MySQL数据库主从复制

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-4 08:55:08 | 显示全部楼层 |阅读模式
应用场景: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/download ... 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 ... /percona-xtrabackup
MySQL 复制选项 http://dev.mysql.com/doc/refman/ ... ons-binary-log.html
MySQL 函数限制 http://dev.mysql.com/doc/refman/ ... t_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备份还原数据库


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-134774-1-1.html 上篇帖子: linux下导入、导出mysql数据库命令 下篇帖子: window7 MySql Cluster数据库集群配置 数据库安装 function 服务器 Linux 文章
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表