MYSQL二主二从集群部署

目录

一、环境描述

二、安装mysql

[2.1 卸载mysql(如果没安装过,可忽略)](#2.1 卸载mysql(如果没安装过,可忽略))

[2.1.1 列出安装的mysql](#2.1.1 列出安装的mysql)

[2.1.2 卸载mysql](#2.1.2 卸载mysql)

[2.1.3 删除mysql文件目录](#2.1.3 删除mysql文件目录)

[2.1.3.1 查看mysql 目录](#2.1.3.1 查看mysql 目录)

[2.1.3.2 依次删除](#2.1.3.2 依次删除)

[2.2 在线安装](#2.2 在线安装)

[2.2.1 下载安装源](#2.2.1 下载安装源)

[2.2.2 安装源rpm](#2.2.2 安装源rpm)

[2.2.3 加入rpm密钥](#2.2.3 加入rpm密钥)

[2.2.4 执行安装](#2.2.4 执行安装)

[2.2.5 设置开机自启动](#2.2.5 设置开机自启动)

[2.2.6 修改密码](#2.2.6 修改密码)

[2.2.6.1 获取临时密码](#2.2.6.1 获取临时密码)

[2.2.6.2 登录MySQL](#2.2.6.2 登录MySQL)

[2.2.6.3 设置密码策略](#2.2.6.3 设置密码策略)

[2.2.6.4 设置密码最小长度](#2.2.6.4 设置密码最小长度)

[2.2.6.5 设置root密码](#2.2.6.5 设置root密码)

[2.2.6.6 开启MySQL远程连接权限](#2.2.6.6 开启MySQL远程连接权限)

三、主从关系配置

[3.1 主库设置(主库一)](#3.1 主库设置(主库一))

3.1.1修改/etc/my.cnf

[3.1.2 重启mysql](#3.1.2 重启mysql)

[3.1.3 创建从数据库连接账号/密码](#3.1.3 创建从数据库连接账号/密码)

[3.2 主库设置(主库二)](#3.2 主库设置(主库二))

[3.2.1 修改/etc/my.cnf](#3.2.1 修改/etc/my.cnf)

[3.2.2 重启mysql](#3.2.2 重启mysql)

[3.2.3 创建从数据库连接账号/密码](#3.2.3 创建从数据库连接账号/密码)

[3.3 设置主库之间进行数据同步](#3.3 设置主库之间进行数据同步)

[3.3.1 主库一同步/复制数据](#3.3.1 主库一同步/复制数据)

[3.3.1.1 查看master信息](#3.3.1.1 查看master信息)

[3.3.1.2 设置同步信息](#3.3.1.2 设置同步信息)

[3.3.1.3 开启同步](#3.3.1.3 开启同步)

[3.3.1.4 查看同步状态](#3.3.1.4 查看同步状态)

[3.3.2 设置主库二同步/复制数据数据](#3.3.2 设置主库二同步/复制数据数据)

[3.3.2.1 查看master信息](#3.3.2.1 查看master信息)

[3.3.2.2 设置同步信息](#3.3.2.2 设置同步信息)

[3.3.2.3 开启同步](#3.3.2.3 开启同步)

[3.3.2.4 查看同步状态](#3.3.2.4 查看同步状态)

[3.3.3 验证主库之间同步数据](#3.3.3 验证主库之间同步数据)

[3.4 从库设置(从库一)](#3.4 从库设置(从库一))

[3.4.1 修改/etc/my.cnf](#3.4.1 修改/etc/my.cnf)

[3.4.2 重启mysql](#3.4.2 重启mysql)

[3.4.3 设置从库向主库同步/复制数据](#3.4.3 设置从库向主库同步/复制数据)

[3.4.3.1 登录数据库](#3.4.3.1 登录数据库)

[3.4.3.2 查看同步状态(主库一、主库二)](#3.4.3.2 查看同步状态(主库一、主库二))

[3.4.3.3 设置主库登录信息](#3.4.3.3 设置主库登录信息)

[3.4.3.4 开启同步](#3.4.3.4 开启同步)

[3.4.3.5 查看同步状态](#3.4.3.5 查看同步状态)

[3.5 从库设置(从库二)](#3.5 从库设置(从库二))

[3.5.1 修改/etc/my.cnf](#3.5.1 修改/etc/my.cnf)

[3.5.2 重启mysql](#3.5.2 重启mysql)

[3.5.3 设置从库向主库同步/复制数据](#3.5.3 设置从库向主库同步/复制数据)

[3.5.3.1 登录数据库](#3.5.3.1 登录数据库)

[3.5.3.2 查看同步状态(主库一、主库二)](#3.5.3.2 查看同步状态(主库一、主库二))

[3.5.3.3 设置主库登录信息](#3.5.3.3 设置主库登录信息)

[3.5.3.4 开启同步](#3.5.3.4 开启同步)

[3.5.3.5 查看同步状态](#3.5.3.5 查看同步状态)

[3.5.3.6 验证从库之间同步数据](#3.5.3.6 验证从库之间同步数据)


一、环境描述

系统环境描述:本教程基于CentOS 8.0版本虚拟机

mysql 规划(二主二从)

|--------|--------------|--------------|----------------|
| 节点 | MySQL(主) | MySQL(从) | IP |
| node1 | * | | 192.168.31.8 |
| node2 | * | | 192.168.31.9 |
| node3 | | * | 192.168.31.167 |
| node4 | | * | 192.168.31.154 |

软件版本:

MySQL 5.7

二、安装mysql

2.1 卸载mysql(如果没安装过,可忽略)

2.1.1 列出安装的mysql

bash 复制代码
rpm -qa | grep -i mysql

2.1.2 卸载mysql

bash 复制代码
-- 依次卸载上一步骤罗列出来的依赖

yum remove mysql-common-8.0.26-1.module_el8.4.0+915+de215114.x86_64

yum remove mysql57-community-release-el7-10.noarch

2.1.3 删除mysql文件目录

2.1.3.1 查看mysql 目录
bash 复制代码
find / -name mysql
2.1.3.2 依次删除
bash 复制代码
rm -rf /var/lib/selinux/targeted/active/modules/100/mysql

2.2 在线安装

2.2.1 下载安装源

bash 复制代码
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

2.2.2 安装源rpm

bash 复制代码
yum -y install mysql57-community-release-el7-10.noarch.rpm

2.2.3 加入rpm密钥

bash 复制代码
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

2.2.4 执行安装

bash 复制代码
yum -y install mysql-community-server

在CentOS 8 下会报错: 错误:没有任何匹配: mysql-community-server
原因是: 【注】出现问题的核心原因为:基于RHEL 8和Oracle Linux 8的基于EL8的系统,在默认情况下附带了一个名为mysql的模块。 除非禁用此模块,否则它将屏蔽,

存储库提供的软件包。只要是 EL8系统安装任何版本的 MySQL 都会有这样的问题。

需要执行一下命令:yum module disable mysql

接着再执行:yum -y install mysql-community-server

然后安装是,执行事务检查报错:

错误:事物测试失败:

file /etc/my.cnf from install of mysql-community-server-5.7.43-1.el7.x86_64 conflicts with file from package mariadb-connector-c-config-3.1.11-2.el8_3.noarch

原因分析:

网上搜了下,说是我的yum 里面安装了mariadb-connector-c-config.noarch ,于是就要执行命令查看一下

bash 复制代码
yum list installed

果然如此,于是,就要删除掉mariadb-connector-c-config.noarch,

bash 复制代码
yum remove mariadb-connector-c-config.noarch

接着再执行:

bash 复制代码
yum -y install mysql-community-server

成功了

2.2.5 设置开机自启动

bash 复制代码
systemctl start mysqld.service

systemctl status mysqld.service

2.2.6 修改密码

2.2.6.1 获取临时密码
bash 复制代码
grep "password" /var/log/mysqld.log
2.2.6.2 登录MySQL
bash 复制代码
mysql -uroot -p
2.2.6.3 设置密码策略
bash 复制代码
#设置密码策略为LOW,此策略只检查密码的长度

set global validate_password_policy=LOW;
2.2.6.4 设置密码最小长度
bash 复制代码
set global validate_password_length=6;
2.2.6.5 设置root密码
bash 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xiaoning';
2.2.6.6 开启MySQL远程连接权限
bash 复制代码
grant all privileges  on  *.* to 'root'@'%' identified by 'xiaoning' with grant option;

提示:以上操作,二主二从服务器都需要执行!

三、主从关系配置

3.1 主库设置(主库一)

3.1.1修改/etc/my.cnf

bash 复制代码
vim  /etc/my.cnf


#开启⼆进制⽇志
log-bin=mysql-bin
#设置服务id
server-id=1

#设置不要复制的数据库

binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#设置需要复制的数据库
binlog-do-db=mydb
#设置logbin格式;可选值:STATEMENT、ROW、MIXED
binlog_format=STATEMENT

#作为从数据库的时候,有写⼊操作也要更新⼆进制⽇志⽂件

log-slave-updates=1

#⾃增⻓字段从哪个数开始

auto-increment-offset=1

#⾃增⻓字段每次递增的量

auto-increment-increment=2

#中继日志

relay-log=relay-log-bin

#中继日志

relay-log-index=relay-log-bin.index

3.1.2 重启mysql

bash 复制代码
systemctl restart mysqld.service

3.1.3 创建从数据库连接账号/密码

bash 复制代码
# 创建slave⽤户
CREATE USER 'ning_slave1'@'%' IDENTIFIED BY 'xiaoning';
# 设置密码
ALTER USER 'ning_slave1'@'%' IDENTIFIED WITH
mysql_native_password BY 'xiaoning';
# 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'ning_slave1'@'%';
# 刷新权限
FLUSH PRIVILEGES;

3.2 主库设置(主库二)

3.2.1 修改/etc/my.cnf

bash 复制代码
#开启⼆进制⽇志
log-bin=mysql-bin
#设置服务id
server-id=2

#设置不要复制的数据库

binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#设置需要复制的数据库
binlog-do-db=mydb
#设置logbin格式;可选值:STATEMENT、ROW、MIXED
binlog_format=STATEMENT

#作为从数据库的时候,有写⼊操作也要更新⼆进制⽇志⽂件

log-slave-updates=1

#⾃增⻓字段从哪个数开始

auto-increment-offset=2

#⾃增⻓字段每次递增的量

auto-increment-increment=2

#中继日志

relay-log=relay-log-bin

#中继日志

relay-log-index=relay-log-bin.index

3.2.2 重启mysql

bash 复制代码
systemctl restart mysqld.service

3.2.3 创建从数据库连接账号/密码

bash 复制代码
# 创建slave⽤户
CREATE USER 'ning_slave2'@'%' IDENTIFIED BY 'xiaoning';
# 设置密码
ALTER USER 'ning_slave2'@'%' IDENTIFIED WITH
mysql_native_password BY 'xiaoning';
# 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'ning_slave2'@'%';
# 刷新权限
FLUSH PRIVILEGES;

3.3 设置主库之间进行数据同步

3.3.1 主库一同步/复制数据

3.3.1.1 查看master信息
bash 复制代码
show master status\G
3.3.1.2 设置同步信息
bash 复制代码
CHANGE MASTER TO MASTER_HOST='192.168.31.9',
MASTER_USER='ning_slave2',
MASTER_PASSWORD='xiaoning',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=123;

注意,这里 MASTER_LOG_POS=123;参照的是执行show master status\G命令后返回的Position: 123 值;

3.3.1.3 开启同步
bash 复制代码
start slave;
3.3.1.4 查看同步状态
bash 复制代码
show slave status\G;

说明:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两个值都为Yes才是正确的。

3.3.2 设置主库二同步/复制数据数据

3.3.2.1 查看master信息
bash 复制代码
show master status\G
3.3.2.2 设置同步信息
bash 复制代码
CHANGE MASTER TO MASTER_HOST='192.168.31.8',
MASTER_USER='ning_slave1',
MASTER_PASSWORD='xiaoning',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;

注意,这里 MASTER_LOG_POS=123;参照的是执行show master status\G命令后返回的Position: 154 值;

3.3.2.3 开启同步
bash 复制代码
start slave;
3.3.2.4 查看同步状态
bash 复制代码
show slave status\G;

说明:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两个值都为Yes才是正确的。

3.3.3 验证主库之间同步数据

在主库一新建test库,查看主库二是否同步数据

测试结果发现,主库二同步了主库一新建的数据库,主库部署成功。

3.4 从库设置(从库一)

3.4.1 修改/etc/my.cnf

bash 复制代码
#开启⼆进制⽇志
log-bin=mysql-bin
#设置服务id
server-id=3
#启⽤中继⽇志

relay-log=relay-log-bin

#中继日志

relay-log-index=relay-log-bin.relay

#开启多通道table

master-info-repository=TABLE
relay-log-info-repository=TABLE

3.4.2 重启mysql

bash 复制代码
systemctl restart mysqld.service

3.4.3 设置从库向主库同步/复制数据

3.4.3.1 登录数据库
bash 复制代码
mysql -uroot -p
3.4.3.2 查看同步状态(主库一、主库二)
bash 复制代码
show master status\G;
3.4.3.3 设置主库登录信息
bash 复制代码
CHANGE MASTER TO MASTER_HOST='192.168.31.8',
MASTER_USER='ning_slave1',
MASTER_PASSWORD='xiaoning',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154 for channel 'master1';

CHANGE MASTER TO MASTER_HOST='192.168.31.9',
MASTER_USER='ning_slave2',
MASTER_PASSWORD='xiaoning',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154  for channel 'master2';
3.4.3.4 开启同步
bash 复制代码
start slave;
3.4.3.5 查看同步状态
bash 复制代码
show slave status\G;

说明:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两个值都为Yes才是正确的。

3.5 从库设置(从库二)

3.5.1 修改/etc/my.cnf

bash 复制代码
#开启⼆进制⽇志
log-bin=mysql-bin
#设置服务id
server-id=4

#中继日志

relay-log-index=relay-log-bin.relay

#开启多通道table

master-info-repository=TABLE
relay-log-info-repository=TABLE

3.5.2 重启mysql

bash 复制代码
systemctl restart mysqld.service

3.5.3 设置从库向主库同步/复制数据

3.5.3.1 登录数据库
bash 复制代码
mysql -uroot -p
3.5.3.2 查看同步状态(主库一、主库二)
bash 复制代码
show master status\G;
3.5.3.3 设置主库登录信息
bash 复制代码
CHANGE MASTER TO MASTER_HOST='192.168.31.8',
MASTER_USER='ning_slave1',
MASTER_PASSWORD='xiaoning',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154 for channel 'master1';

CHANGE MASTER TO MASTER_HOST='192.168.31.9',
MASTER_USER='ning_slave2',
MASTER_PASSWORD='xiaoning',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154  for channel 'master2';
3.5.3.4 开启同步
bash 复制代码
start slave;
3.5.3.5 查看同步状态
bash 复制代码
show slave status\G;

说明:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两个值都为Yes才是正确的。

3.5.3.6 验证从库之间同步数据

从主库一新建一个数据库test3,看下两个从库是否会同步数据

测试结果发现,两个从库同步了主库一新建的数据库test3,整个二主二从服务部署成功。

好了,本次分享就到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

相关推荐
计算机毕设指导615 分钟前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
The_Ticker1 小时前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Elastic 中国社区官方博客1 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
企鹅侠客1 小时前
ETCD调优
数据库·etcd
Json_181790144801 小时前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗1 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋2 小时前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网2 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!2 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix3 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql