开源办公开发平台丨Mysql5.7两套四节点主从结构环境搭建教程(二)

news/2024/7/20 20:07:01 标签: linux, github, java, android, ios

MyCat及主从分库分表方案

 

1、MyCAT基础架构准备

1.1 环境准备:

两台虚拟机 db01 db02

每台创建四个Mysql实例 3307 3308 3309 3310

数据目录:/data/

 

1.2 删除历史环境(在需要时执行)

pkill mysql
rm -rf /data/*
mv /etc/my.cnf /etc/my.cnf.bak

 

数据库准备

 

一、Mysql5.7.29服务器下载

服务器下载链接:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz

[root@localhost local]# cd /usr/local
[root@localhost local]# wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz

 

二、服务器安装过程

2.1、创建安装包存放目录

命令:mkdir -p /server/tools

[root@localhost local]# mkdir -p /server/tools

 

2.2、创建应用软件解压安装目录

命令:mkdir -p /application

[root@localhost local]# mkdir -p /application

 

2.3、在安装包存放目录中解压服务器程序

[root@localhost local]# tar -xf /usr/local/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz

image.png

 

2.4、将解压的服务器目录移动到安装目录

命令:mv mysql-5.7.29-linux-glibc2.12-x86_64 /application/mysql

[root@localhost local]# mv /usr/local/mysql-5.7.29-linux-glibc2.12-x86_64 /application/mysql

 

服务器目录规划图:

image.png

暂时直接在主机上创建目录/data(可以根据需要决定是否需要挂载磁盘)

2.5 挂载新的磁盘相关操作:

2.5.1、添加磁盘新卷:略

2.5.2、查询服务器磁盘列表:

命令:fdisk -l

image.png

 

2.5.3、格式化需要挂载的新卷:/dev/sdc

命令:mkfs.xfs /dev/sdc

 

2.5.4、创建挂载目录

命令:mkdir /data

 

2.5.5、查询新磁盘的UUID

命令:blkid

image.png

 

2.5.6、添加磁盘自动挂载:

vim /etc/fstab
UUID="ba1ec30-e251-4ded-bc12-2d940f938dd5" /data xfs defaults 0 0

 

2.5.7、进行磁盘挂载

mount -a
df -h

 

2.6、创建数据库数据存放目录

mkdir -p /data/mysql/data

 

2.7、创建mysql启动用户

useradd -s /sbin/nologin mysql

 

2.8、修改环境变量,将mysqld命令添加到环境变量

vim /etc/profile
export PATH=/application/mysql/bin:$PATH

image.png

让环境变量生效:

source /etc/profile

 

2.9、查询Mysql服务器版本

命令:mysql -V

 

2.10、报错解决

mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

解决方法:

安装libncurses相关依赖

yum install libncurses*

image.png

 

2.11 目录授权

chown -R mysql.mysql /application/*
chown -R mysql.mysql /data

 

三、实例初始化

 

3.1 在各主机上创建Mysql数据目录

===================db01=======================

mkdir /data/3307/data -p
mkdir /data/3308/data -p
mkdir /data/3309/data -p
mkdir /data/3310/data -p

===================db02=======================

mkdir /data/3307/data -p
mkdir /data/3308/data -p
mkdir /data/3309/data -p
mkdir /data/3310/data -p

 

3.2 在各主机上初始化Mysql数据

===================db01=======================

mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3309/data
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3310/data

===================db02=======================

mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3309/data
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3310/data

 

3.3 准备各主机上各节点数据库配置文件以及启动脚本

=================================DB01===================================

配置文件准备-3307:

cat >/data/3307/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.log
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server_id=7
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
EOF

配置文件准备-3308:

cat >/data/3308/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
port=3308
log-error=/data/3308/mysql.log
log_bin=/data/3308/mysql-bin
binlog_format=row
skip-name-resolve
server_id=8
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
EOF

配置文件准备-3309:

cat >/data/3309/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
port=3309
log-error=/data/3309/mysql.log
log_bin=/data/3309/mysql-bin
binlog_format=row
skip-name-resolve
server_id=9
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
EOF

配置文件准备-3310:

cat >/data/3310/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3310/data
socket=/data/3310/mysql.sock
port=3310
log-error=/data/3310/mysql.log
log_bin=/data/3310/mysql-bin
binlog_format=row
skip-name-resolve
server_id=10
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
EOF

启动服务-3307

cat >/etc/systemd/system/mysqld3307.service<<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 10000
EOF

启动服务-3308:

cat >/etc/systemd/system/mysqld3308.service<<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 10000
EOF

启动服务-3309:

cat >/etc/systemd/system/mysqld3309.service<<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 10000
EOF

启动服务-3310:

cat >/etc/systemd/system/mysqld3310.service<<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3310/my.cnf
LimitNOFILE = 10000
EOF

 

=================================DB02===================================

配置文件准备-3307:

cat >/data/3307/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.log
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server_id=17
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
EOF

配置文件准备-3308:

cat >/data/3308/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
port=3308
log-error=/data/3308/mysql.log
log_bin=/data/3308/mysql-bin
binlog_format=row
skip-name-resolve
server_id=18
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
EOF

配置文件准备-3309:

cat >/data/3309/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
port=3309
log-error=/data/3309/mysql.log
log_bin=/data/3309/mysql-bin
binlog_format=row
skip-name-resolve
server_id=19
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
EOF

配置文件准备-3310:

cat >/data/3310/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3310/data
socket=/data/3310/mysql.sock
port=3310
log-error=/data/3310/mysql.log
log_bin=/data/3310/mysql-bin
binlog_format=row
skip-name-resolve
server_id=20
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
EOF

启动服务-3307:

cat >/etc/systemd/system/mysqld3307.service<<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 10000
EOF

启动服务-3308:

cat >/etc/systemd/system/mysqld3308.service<<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 10000
EOF

启动服务-3309:

cat >/etc/systemd/system/mysqld3309.service<<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 10000
EOF

启动服务-3310:

cat >/etc/systemd/system/mysqld3310.service<<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3310/my.cnf
LimitNOFILE = 10000
EOF

3.4 重载systemctl服务(各主机均执行)

systemctl daemon-reload
systemctl daemon-reexec

 

3.5 永久关掉SELINUX(各主机均执行)

需要修改 /etc/selinux/config 再重启操作系统

SELINUX=disabled

 

3.6  修改数据目录权限,启动多实例(各主机均执行)

chown -R mysql.mysql /data/*
systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309
systemctl start mysqld3310

 

3.7 查询实例server_id(各主机均执行)

mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"
mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"
mysql -S /data/3310/mysql.sock -e "show variables like 'server_id'"

3.8 检查端口监听(各主机均执行)

ss -lnt
ss -lnt |grep 33

image.png

3.9 将Mysql各实例设置为自动启动(各主机均执行)

systemctl enable mysqld3307
systemctl enable  mysqld3308
systemctl enable mysqld3309
systemctl enable mysqld3310

image.png

reboot操作系统可以验证。

 

四、出现问题后,查询问题的方法:

1、错误日志:/data/3307/mysql.log

2、systemctl status mysqld3307.service

3、journalctl -xe

image.png

解决办法:永久关掉需要修改 /etc/selinux/config 再重启机器就好

SELINUX=disabled

 

节点主从规划

一、规划设计

箭头指向谁,谁就是主库

172.16.93.21:3307    <————>  172.16.93.22:3307

172.16.93.21:3309      ————> 172.16.93.21:3307

172.16.93.22:3309      ————>  172.16.93.22:3307

172.16.93.22:3308    <————>  172.16.93.21:3308

172.16.93.22:3310      ————>  172.16.93.22:3308

172.16.93.21:3310      ————>  172.16.93.21:3308

 

分片规划

shard1:

Master:172.16.93.21:3307

Slave1:172.16.93.21:3309

Standby Master172.16.93.22:3307

Slave2172.16.93.22:3309

 

shard2:

Master172.16.93.22:3308

Slave1:172.16.93.22:3310

Standby Master172.16.93.21:3308

Slave2172.16.93.21:3310

 

图示:

image.png

 

 

开始配置

Shard1_第一组四节点结构搭建(红色部分)

172.16.93.21:3307    <————> 172.16.93.22:3307

## db02(172.16.93.22)

mysql -S /data/3307/mysql.sock -e "grant replication slave on *.* to rep1@'%' identified by 'zone2018';"
mysql -S /data/3307/mysql.sock -e "grant all on *.* to root@'%' identified by 'zone2018' with grant option;"

##db01(172.16.93.21)

mysql -S /data/3307/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.22', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"
mysql -S /data/3307/mysql.sock -e "start slave;"
mysql -S /data/3307/mysql.sock -e "show slave status \G"

 

##db02(172.16.93.22)

mysql -S /data/3307/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.21', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"
mysql -S /data/3307/mysql.sock -e "start slave;"
mysql -S /data/3307/mysql.sock -e "show slave status \G"

 

#172.16.93.21:3309      ————>  172.16.93.21:3307

##db01(172.16.93.21)

mysql -S /data/3309/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.21', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"
mysql -S /data/3309/mysql.sock -e "start slave;"
mysql -S /data/3309/mysql.sock -e "show slave status \G"

 

#172.16.93.22:3309      ————>  172.16.93.22:3307

##db02(172.16.93.22)

mysql -S /data/3309/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.22', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"
mysql -S /data/3309/mysql.sock -e "start slave;"
mysql -S /data/3309/mysql.sock -e "show slave status \G"

 

Shard2_第二组四节点结构搭建(蓝色部分)

#172.16.93.22:3308    <————>  172.16.93.21:3308

## db01(172.16.93.21)

mysql -S /data/3308/mysql.sock -e "grant replication slave on *.* to rep1@'%' identified by 'zone2018';"
mysql -S /data/3308/mysql.sock -e "grant all on *.* to root@'%' identified by 'zone2018' with grant option;"

 

##db02(172.16.93.22)

mysql -S /data/3308/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.21', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"
mysql -S /data/3308/mysql.sock -e "start slave;"
mysql -S /data/3308/mysql.sock -e "show slave status \G"

 

##db01(172.16.93.21)

mysql -S /data/3308/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.22', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"
mysql -S /data/3308/mysql.sock -e "start slave;"
mysql -S /data/3308/mysql.sock -e "show slave status \G"

 

#172.16.93.22:3310      ————>  172.16.93.22:3308

##db02(172.16.93.22)

mysql -S /data/3310/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.22', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"
mysql -S /data/3310/mysql.sock -e "start slave;"
mysql -S /data/3310/mysql.sock -e "show slave status \G"

 

#172.16.93.21:3310      ————>  172.16.93.21:3308

##db01(172.16.93.21)

mysql -S /data/3310/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.21', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"
mysql -S /data/3310/mysql.sock -e "start slave;"
mysql -S /data/3310/mysql.sock -e "show slave status \G"

 

检测主从状态

mysql -S /data/3307/mysql.sock -e "show slave status\G" | grep Yes
mysql -S /data/3308/mysql.sock -e "show slave status\G" | grep Yes
mysql -S /data/3309/mysql.sock -e "show slave status\G" | grep Yes
mysql -S /data/3310/mysql.sock -e "show slave status\G" | grep Yes

image.png

二、问题处理:

如果中间出现错误,在每个节点执行以下命令可以清除主从结构配置,重新配置即可:

停止主从复制并删除主从关联

mysql -S /data/3307/mysql.sock -e "stop slave; reset slave all;"
mysql -S /data/3308/mysql.sock -e "stop slave; reset slave all;"
mysql -S /data/3309/mysql.sock -e "stop slave; reset slave all;"
mysql -S /data/3310/mysql.sock -e "stop slave; reset slave all;"

删除并重新创建数据库

mysql -S /data/3307/mysql.sock -e "DROP DATABASE X; CREATE DATABASE  X DEFAULT CHARACTER SET utf8mb4;"
mysql -S /data/3308/mysql.sock -e "DROP DATABASE X; CREATE DATABASE  X DEFAULT CHARACTER SET utf8mb4;"
mysql -S /data/3309/mysql.sock -e "DROP DATABASE X; CREATE DATABASE  X DEFAULT CHARACTER SET utf8mb4;"
mysql -S /data/3310/mysql.sock -e "DROP DATABASE X; CREATE DATABASE  X DEFAULT CHARACTER SET utf8mb4;"

查看数据库命令:

mysql -S /data/3307/mysql.sock -e "SHOW DATABASES;"
mysql -S /data/3308/mysql.sock -e "SHOW DATABASES;"
mysql -S /data/3309/mysql.sock -e "SHOW DATABASES;"
mysql -S /data/3310/mysql.sock -e "SHOW DATABASES;"

 

杀进程停止数据库命令:

pkill mysql

#使用sock直接连接数据库直接命令:
mysql -S /data/3307/mysql.sock
CREATE DATABASE  X DEFAULT CHARACTER SET utf8mb4

 


http://www.niftyadmin.cn/n/953338.html

相关文章

小小的日程管理功能,在职场派上大作用!

​小智入职两年半&#xff0c;终于在前段日子成功荣升一职&#xff0c;这在旁人看来是非常值得开心的事情&#xff0c;但是小智却接连几天愁容不展&#xff0c;细询之下了解到&#xff0c;小智虽然升职加薪了&#xff0c;但同时手下的员工也变多了&#xff0c;手头需要做的工作…

想要解决这5个考勤管理难题?开源OA办公前来帮忙啦!

在大多数企业中&#xff0c;考勤都是一块难啃的硬骨头&#xff0c;为了解决这个最基础的难题&#xff0c;企业也想过许许多多的方法&#xff0c;包括但不限于指纹打卡、人脸识别打卡等。 但是员工还是对这道基础管理程序怨声载道&#xff0c;还有一些公司&#xff0c;更是让考勤…

如何利用这款开源OA办公系统,来进行企业资产管理?

企业资产是企业存在的物质基础&#xff0c;也是生产经营效益的源泉。管理企业资产的方式&#xff0c;与每个企业的发展的细节密切相关&#xff0c;比如企业的资产结构、管理水平、业务规模等等&#xff0c;这些细节都方方面面影响着企业资产管理。 一个适合本公司发展的企业资…

Java 开源办公开发平台 O2OA V5.3.0 发布 | 移动版H5发布,服务器性能优化升级

O2OA此次发布的移动端H5版本&#xff0c;拥有高度的灵活性、强大的交互功能、丰富的适配平台&#xff0c;同时拥有齐全的页面组件&#xff0c;功能组合极其便利。客户在使用移动端H5进行办公时&#xff0c;能够更高效地实现动态信息确认、助力企业协同办公。对于开发者来说&…

选择OA协同办公系统,这4点一定要注意!

企业在选择OA时&#xff0c;看完产品介绍之后&#xff0c;接下来就会选择“在线试用”、“免费使用”等等试用机会。 最后试用了几家&#xff0c;发现使用起来功能也差不了多少&#xff0c;甚至都有点大同小异。虽然每一家都有各自标榜的特色、优点&#xff0c;但是从试用环节…

O2OA开源办公平台:搭建自定义工程及开发

一、开发环境 JDK1.8 maven V3.5 运行环境 o2server V5.0 二、搭建工程及配置 工程模板下载&#xff1a;https://git.o2oa.net/o2oa/o2custom-sample/-/archive/master/o2custom-sample-master.zip 解压o2custom-sample-master.zip&#xff0c;然后重命名文件夹名称为自己业…

解答:为什么要搭建企业论坛?如何快速搭建?

论坛又名网络论坛&#xff0c;BBS&#xff08;Bulletin Board System&#xff09;&#xff0c;从互联网发展伊始&#xff0c;就逐渐开始壮大&#xff0c;论坛的用户可以发布不同的信息、提出自己独特的看法&#xff0c;还可以收到其他用户的回复和评论&#xff0c;信息的即时性…

开源OA办公系统的由来:O2OA为什么要开源?

大家好&#xff0c;我们是O2OA开源办公开发平台&#xff0c;今天想要为大家来解决一些常问的问题&#xff1a;O2OA为什么要开源&#xff1f; 其实一开始有人提出说要“开源”的时候&#xff0c;大家都是一愣。我们一个通过售卖软件“养家糊口”的IT公司要是把软件“开源”了&a…