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

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

相关推荐
纯纯沙口6 分钟前
Qt—用SQLite实现简单的注册登录界面
数据库·sqlite
初次见面我叫泰隆19 分钟前
MySQL——3、数据类型
数据库·mysql
一叶屋檐41 分钟前
Neo4j 图书馆借阅系统知识图谱设计
服务器·数据库·cypher
好吃的肘子2 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
weixin_472339462 小时前
MySQL MCP 使用案例
数据库·mysql
lqlj22333 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔3 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务4 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
fengye2071614 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
拓端研究室TRL4 小时前
Python与MySQL网站排名数据分析及多层感知机MLP、机器学习优化策略和地理可视化应用|附AI智能体数据代码
人工智能·python·mysql·机器学习·数据分析