上两天在研究如何编译安装mariadb+gelera就是为了把它打成rpm包,其实打成rpm包很简单解压一下就行了,把mariadb做成服务,主要是为了方便安装,实现一条命令安装完成mariadb+gelera集群

打包前准备

把so放到mariadb目录下,修改my.cnf配置的路径

编写master启动脚本

1
2
3
4
5
[root@demo2 mariadb]# more mysqlCluster-start.sh 
sed -i 's/0/1/g' /opt/**隐藏路径**/mariadb/data/grastate.dat
pkill mysqld
netstat -nlp | grep :4567 | awk '{print $7}' | awk -F"/" '{ print $1 }' #根据端口关闭进程
/opt/**隐藏路径**/mariadb/bin/mysqld --wsrep-new-cluster --user=mysql

安装rpmbuild

1
2
3
4
5
6
7
8
yum install rpm-build
yum install rpmdevtools 
rpmdev-setuptree #生成rpmbuild目录 

[root@demo rpmbuild]# ls
BUILD  RPMS  SOURCES  SPECS  SRPMS
[root@demo rpmbuild]# pwd
/root/rpmbuild

文件解析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@demo rpmbuild]# tree *
BUILD
RPMS
SOURCES
├── mariadb-cluster.tar.gz #打包的mariadb安装路径的文件夹
└── mariadb.service #编写的mariadb服务名
SPECS
└── mariadb.spec
SRPMS
0 directories, 3 files
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@demo SOURCES]# more mariadb.service 
[Unit]
Description=mysqld Server

[Service]
Type=forking
ExecStart=/opt/**隐藏路径**/mariadb/mysqld start
ExecStop=/opt/**隐藏路径**/mariadb/mysqld stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@demo SPECS]# more mariadb.spec 
Name: Mariadb-Cluster
Version:1
Release: 1
Summary: Mariadb-Cluster1.0
Group: Applications/Engineering
License: GPL
AutoReqProv:no
Source0:mariadb-cluster.tar.gz
Source1:mariadb.service
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
This package is mariadb Setup Program.
Prefix: /opt/**隐藏路径**
%define initd /usr/lib/systemd/system
%define ppath /opt/**隐藏路径**
%prep
%setup  -b 0 -c -n mariadb


#%build

%install
install -d $RPM_BUILD_ROOT%{initd}
install -d $RPM_BUILD_ROOT%{ppath}
cp -a $RPM_BUILD_DIR/*  $RPM_BUILD_ROOT%{ppath}
%{__install} -p -D -m 0755 %{SOURCE1} $RPM_BUILD_ROOT%{initd}/mariadb.service

%pre
userdel -r mysql
groupadd mysql
useradd -g mysql mysql
%post
systemctl  enable mariadb.service
%preun
systemctl  stop   mariadb.service
systemctl disable mariadb.service
rm -rf /opt/**隐藏路径**/mariadb
%files
%defattr(-,root,root)
%attr(755,mysql,mysql) /opt/**隐藏路径**/mariadb/*
%{initd}

%clean
rm -rf /opt/**隐藏路径**/mariadb

%changelog

编译rpm包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
rpmbuild  -bb mariadb.spec 

[root@demo rpmbuild]# tree 
.
├── BUILD
├── BUILDROOT
├── RPMS
│   └── x86_64
│       └── Mariadb-Cluster-1-1.x86_64.rpm
├── SOURCES
│   ├── mariadb-cluster.tar.gz
│   └── mariadb.service
├── SPECS
│   ├── err.log
│   └── mariadb.spec
└── SRPMS

7 directories, 5 files

安装运行

需要修改my.cnf配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[galera]
wsrep_on=ON
wsrep_provider=/opt/eetrust/mariadb/libgalera_smm.so#galera的库文件的地址
wsrep_cluster_address="gcomm://192.168.0.190,192.168.0.189"#各节点的ip
wsrep_node_name=demo#节点主机名
wsrep_cluster_name=galera_cluster
wsrep_node_address=192.168.0.189#节点ip
binlog_format=row#二进制日志设置为行模式  row (安全性最高,性能最低)
default_storage_engine=InnoDB#使用的默认引擎 innoDB  支持事务
innodb_autoinc_lock_mode=2#2为性能最好

修改内容为正确的主机名,IP即可

如果将它作为master启动

1
2
3
[root@demo mariadb]# ./mysqlCluster-start.sh 
Shutting down MySQL.... SUCCESS! 
Bootstrapping the cluster.. Starting MySQL.. SUCCESS! 

从节点启动

1
systemctl start mariadb