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,整个二主二从服务部署成功。

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

相关推荐
云和数据.ChenGuang1 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi2 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据2 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi3 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀3 小时前
Redis梳理
数据库·redis·缓存
独行soc4 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天4 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺4 小时前
分布式系统架构:服务容错
数据库·架构
独行soc5 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘