环境:centos7

vm1:10.154.47.236

vm2:10.154.52.189

vm3:10.105.12.50

目的:pxc使用三个节点构建mysql集群,使用innobackupex对数据进行全局备份,增量备份;同时对三个节点做负载均衡(使用腾讯云官方负载均衡器)

补充:整个应用使用的都是内网,做负载均衡时会有vip(内网)提供给PHP应用。安全组只开放对外的80,443,22常用接口,内网端口互通.

安装PXC,innobackupex

安装软件依赖包(添加repl源,再安装依赖,3台server同样安装)

下载安装Percona-XtraDB-Cluster

yum install epel*
yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes socat nc -y
yum install -y libaio*
yum groupinstall -y 'Development tools'
yum install -y libssl.so.6
ln -sf /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.6
ln -sf /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.6

采用的是二进制安装,直接解压即可
下载在官网,https://www.percona.com/ --> software --> Percona XtraDB Cluster --> download --> liunx Generic --> 选择版本

#解压
tar zxvf Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101.tar.gz

#
mv Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101 /usr/local/mysql

创建mysql用户

useradd -M -s /sbin/nologin mysql

软连接命令

ln -s /usr/local/mysql/bin/* /usr/bin/

更改权限

chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /usr/local/mysql

配置文件my.cnf

#需要添加的配置项
log_error=error.log
innodb_autoinc_lock_mode=2
wsrep_cluster_name=pxc-fss #节点名称保持一致
wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so
wsrep_cluster_address=gcomm://10.105.12.50,10.154.52.189,10.154.47.236 #所有节点的ip,添加节点这里就需要添加
wsrep_node_address=10.154.47.236 #本机ip ,不同的server写各自ip
wsrep_slave_threads=8
wsrep_sst_auth=fss:u8u8uu8 #
wsrep_sst_method=xtrabackup-v2
wsrep_provider_options="gcache.size=8G;"
log-slave-updates

配置好后后面的启动会有很多错误,根据error.log排查
我遇到的典型的就是binlog_format的问题,需要设置为binlog_format = ROW

mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。对应的,binlog的格式也有三种:STATEMENT,ROW,MIXED

可以详细了解哈 https://www.cnblogs.com/langtianya/p/5504774.html

初始化以及启动测试

mysqld --initialize --datadir=/data/mysql --user=mysql --basedir=/usr/local/mysql/
#初始化成功会在`/data/mysql`下产生数据文件

启动测试

在主节点10.154.47.236,其他节点启动方式不一样

mysqld_safe --defaults-file=/etc/my.cnf --ledir=/usr/local/mysql/bin --datadir=/data/mysql --wsrep-new-cluster &
#第一个节点启动需要加上--wsrep-new-cluster 参数,表示新建立集群

主节点启动后需要添加用户授权,从节点在使用SST时会使用账号(my.cnf中的账号wsrep_sst_auth=

不然会报错如下

2018-03-14T11:23:22.982182+08:00 0 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'joiner' --address 'IP地址省略' --datadir '/data/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' --parent '13752' '' : 2 (No such file or directory)
2018-03-14T11:23:22.982229+08:00 0 [ERROR] WSREP: Failed to read uuid:seqno from joiner script.
2018-03-14T11:23:22.982239+08:00 0 [ERROR] WSREP: SST script aborted with error 2 (No such file or directory)
2018-03-14T11:23:22.982275+08:00 0 [ERROR] WSREP: SST failed: 2 (No such file or directory)
2018-03-14T11:23:22.982277+08:00 0 [Warning] WSREP: 1.0 (VM_52_189_centos): State transfer to 0.0 (VM_47_236_centos) failed: -22 (Invalid argument)
2018-03-14T11:23:22.982286+08:00 0 [ERROR] Aborting

其他节点

mysqld_safe --defaults-file=/etc/my.cnf --ledir=/usr/local/mysql/bin --datadir=/data/mysql &

查看集群状态

MySQL [(none)]> SHOW STATUS LIKE '%wsrep%';

wsrep_cluster_conf_id | 4
wsrep_cluster_size | 2
wsrep_cluster_state_uuid | f6fcb98a-269b-11e8-a781-1af3e5d62be6
wsrep_cluster_status | Primary
wsrep_connected | ON
#wsrep_cluster_size 指出集群节点数
#wsrep_cluster_status 集群状态

到此PXC搭建完成!可以操作数据库测试下
里面很多细节没讲到,比如5.7版的数据库初始化后,密码竟然在error.log里面,/pass定位下就能看到,初始化时候数据目录不能有文件等等,细节问题及其多...

innobackupex备份恢复

之前在备份数据库都是用的mysqldump,现在的测试,生产环境也是做的计划任务定时执行,备份的也是整库,innobackupex则可以在全局备份后进行增量备份,这样就不用每次都将整个数据库打包压缩下来。整个原理也比较好理解,通过命令行也能大致了解到备份恢复逻辑

在是上面PXC集群搭建好后,我本来准备将用mysqldump备份下来的数据解压,然后通过命令 mysql -root -p 库名 < /备份数据文件导入进去,然而,发现并不行,好煞笔的感觉

进入重点,理论参考以下博客,很详细

https://www.cnblogs.com/kevingrace/p/6102683.html

备份恢复原理这篇文章很详细,可以仔细了解下

先全局备份正在运行的Mysql5.7

innobackupex --password=xxx /backup/
#backup为备份目录
#你会看到一个 ok ...

执行完命令后,/backup/目录下会生成一个时间戳目录,/backup/2018-03-13_16-33-41/

增量备份

innobackupex --password=xxx --incremental /backup/ --incremental-basedir=/backup/2018-03-13_16-33-41/
#--incremental-basedir 指向全局备份目录
# --incremental 指向备份目录

执行完命令后,/backup/目录下会生成一个新的时间戳目录,2018-03-13_16-35-46/

再次增量备份 新的时间戳,2018-03-13_16-37-59/

备份就是以上,还原如下。

停止数据库,并清空数据目录文件,包括之前的初始化数据

innobackupex --apply-log --redo-only /backup/2018-03-13_16-33-41/
innobackupex --apply-log --redo-only /backup/2018-03-13_16-33-41/ --incremental-dir=/backup/2018-03-13_16-35-46/
innobackupex --apply-log /backup/2018-03-13_16-33-41/ --incremental-dir=/backup/2018-03-13_16-37-59/
innobackupex --apply-log /backup/2018-03-13_16-33-41/

#注意:一定要按照完整备份、第一次增量备份、第二次增量备份的顺序进行整合,在整合最后一次增量备份时不要使用--redo-only参数

开始还原

innobackupex --copy-back /backup/2018-03-13_16-33-41/

#还原成功后你会看到“completed OK!”的字样

启动数据库

启动时候会报错,可以很清楚看出是权限问题,chown -R ...

嗯,使用备份下来的mysql5.7的账号密码可以直接使用

在另外一台服务器上,直接启动加入集群后会自动通不主上的数据,数据量大的情况下肯定是要先备份恢复的

MySQL集群-PXC搭建以及使用innobackupex工具进行全局备份和增量备份的更多相关文章

  1. MySQL集群PXC的搭建

    MySQL集群PXC的搭建 最近公司某客户要求我们的数据库搭建PXC集群以保证他们的系统高性能和搞稳定性 以后花费了一些时间去搭建和测试,也踩过一些坑,准备分享出来 系统:centos6.6PXC:5 ...

  2. MYSQL集群的搭建

    按照此配置完全可以配置成功!! 一.介绍========测试环境:Server1:ndbd 192.168.1.225Server2:ndbd 192.168.1.226Server3:mysqld ...

  3. docker 下 mysql 集群的搭建

    下载程序&&创建docker容器 从mysql官网https://dev.mysql.com/downloads/cluster/上下载mysql集群库mysql-cluster-gp ...

  4. Mysql 集群环境搭建

    在上一篇文章中已经详细的写了关于Mysql的安装步骤.这一篇文章在上一篇文章的基础之上接着写集群的安装与部署. 安装地址:https://www.cnblogs.com/ming-blogs/p/10 ...

  5. MySQL集群(PXC)入门

    一.学习动机 伴随互联网行业的兴起,越来越多的领域需要相应的技术方案,比如:打出软件.电商平台.直播平台.电子支付.媒体社交. 身边常见的,校园出成绩那一年,我们会感觉网站异常的卡顿,因为访问人数太多 ...

  6. 数据切分——Atlas读写分离Mysql集群的搭建

    关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog ...

  7. 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点 ...

  8. [原]项目进阶 之 集群环境搭建(二)MySQL集群

    上次的博文中我们介绍了一下集群的相关概念,今天的博文我们介绍一下MySQL集群的相关内容. 1.MySQL集群简介 MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单 ...

  9. windows+mysql集群搭建-三分钟搞定集群

    注:本文来源:  陈晓婵   <  windows+mysql集群搭建-三分钟搞定集群   > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...

随机推荐

  1. mysql 配置详解

    [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /u ...

  2. 这么多小程序,会微信小程序就够了

    随着小程序的普及以及小程序体验的逐步升级,现在小程序的地位已经凸现出来.各大平台纷纷推出自己的小程序平台. 最早的是微信小程序,支付宝小程序,快应用,百度小程序去年上来,18年底头条程序也发布. 那么 ...

  3. 高质量C++C编程指南笔记 标签: c++笔记 2015-11-22 20:59 179人阅读 评论(0) 收藏

    1.  在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数. 2.  如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面 ...

  4. 我的第一个Python随笔

    自学Python也很长时间了,注册博客园写了第一篇随笔.之前想过很多次,但是始终不知道该怎么开始,内容如何,现在想想,随笔嘛,是自己的想法,也自己的实践,又是自己的锻炼.话不多说,开始今天的正式内容. ...

  5. 从0开始学CentOS7(2)---安装mariaDB、jdk1.8、redis

    继续前面的基础步骤~ 这个是centos7自带的数据库MariaDB,以前是mysql,到7以后,改为MariaDB... 1. MariaDB安装,没有往深处配置...懒得动了..参考:http:/ ...

  6. django.db中的transaction

    transaction.set_autocommit(0) ..... ........ ................ transaction.commit() 可以使夹在其两句中间的所有SQL语 ...

  7. C#利用NPOI处理excel的类 NPOIHelper.cs

    个人的NPOIHelp类,包括datatable导出到excel,dataset导出到excel,excel导入到datatable,excel导入到dataset, 更新excel中的数据,验证导入 ...

  8. ThinkPHP3.2.3快速入门:基础篇

    一.安装 thinkphp无需安装,只需将从官网上下载的压缩包解压后,把所有文件放到localhost根目录里就行了 二.压缩包中文件简述 :应用程序文件夹.自己所写的文件都放在这个文件夹里面 :公用 ...

  9. Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】

    传送门:http://codeforces.com/contest/1081/problem/C C. Colorful Bricks time limit per test 2 seconds me ...

  10. os,操作文件和目录

    如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...