MySQL8.0 一主二从

server/2024/12/22 9:24:33/

1. 系统环境

cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)192.168.183.137     mysql-master
192.168.183.153     mysql-slave-1
192.168.183.154     mysql-slave-2# 关闭SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

2. 安装MySQL

三台机器均执行

wget  https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
yum -y install  mysql80-community-release-el7-7.noarch.rpm
yum clean all && yum makecache
yum -y  install mysql-community-server
systemctl start mysqld
systemctl enable mysqld# 查看root密码
grep 'temporary password' /var/log/mysqld.log
mysql -uroot -ppassword# 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

3. mysql-master配置文件修改

vim /etc/my.cnf
# 加入以下内容
server_id=137      # server_id需要保证唯一性,不可与其他从服务器相同 如果为0会拒绝所有从服务器连接
log-bin=mysql-bin  # 设置同步的binary log二进制日志文件名前缀,默认是binlog
binlog_ignore_db = information_schema # 不需要同步的数据库
binlog_ignore_db = performance_schema # 不需要同步的数据库
innodb_flush_log_at_trx_commit=1  # 我们每次事务的结束都会触发Log Thread 将log buffer中的数据写入文件并通知文件系统同步文件。这个设置是最安全的设置,能够保证不论是MySQL Crash 还是OS Crash或者是主机断电都不会丢失任何已经提交的数据。

4. mysql-slave-1配置文件修改

vim /etc/my.cnf
# 加入以下内容
server_id=153      
log-bin=mysql-bin 
binlog_ignore_db = information_schema 
binlog_ignore_db = performance_schema 
innodb_flush_log_at_trx_commit=1  

5. mysql-slave-2配置文件修改

vim /etc/my.cnf
# 加入以下内容
server_id=154     
log-bin=mysql-bin 
binlog_ignore_db = information_schema 
binlog_ignore_db = performance_schema 
innodb_flush_log_at_trx_commit=1  

修改完成之后全部重启systemctl restart mysqld

6. 主库创建复制用户

mysql -uroot -ppassworn# 创建同步账户master节点 执行mysql> CREATE USER slave@'%' IDENTIFIED BY 'QAZqaz1234@';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%'WITH GRANT OPTION;
mysql> CHANGE MASTER TO GET_MASTER_PUBLIC_KEY=1;
mysql> FLUSH PRIVILEGES;
mysql> SHOW MASTER STATUS;mysql> show master status;
+------------------+----------+--------------+---------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                      | Executed_Gtid_Set |
+------------------+----------+--------------+---------------------------------------+-------------------+
| mysql-bin.000001 |      873 |              | information_schema,performance_schema |                   |
+------------------+----------+--------------+---------------------------------------+-------------------+

7. 配置从库

mysql -uroot -ppassworn# slave-1和slave-2都是同样的操作
mysql> change master to
master_host='192.168.183.137',master_user='slave',master_password='QAZqaz1234@',
master_log_file='master-bin.000001',master_log_pos=873;# 启动同步
mysql> START SLAVE;
mysql> FLUSH PRIVILEGES;

mysql> SHOW SLAVE STATUS\G

Slave_IO_Running: Connecting,

报错:Error connecting to source 'slave@192.168.183.137:3306'. This was attempt 5/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

发生这个问题的原因是在 mysql 8.0 以后,caching_sha2_password是默认的身份验证插件,而不是以往的mysql_native_password。在 MySQL Command Line 工具下修改 mysql 的默认身份验证插件即可。

登录主库

ALTER USER slave@'%' IDENTIFIED WITH mysql_native_password BY 'QAZqaz1234@';FLUSH PRIVILEGES;

然后从库重新同步

# slave-1和slave-2都是同样的操作
mysql> STOP SLAVE;mysql> change master to
master_host='192.168.183.137',master_user='slave',master_password='QAZqaz1234@',
master_log_file='master-bin.000001',master_log_pos=1323;# 启动同步
mysql> RESET SLAVE;
mysql> START SLAVE;
mysql> FLUSH PRIVILEGES;

再次查看同步状况可以看到已经成功:

mysql> SHOW SLAVE STATUS\G

8. 测试

在master节点上执行SQL语句

create database db_test;
show databases;

在从库上面查看

在master的db_test库里面创建表

use db_test;
# 创建一个my_user表:
CREATE TABLE `my_user` (`id` tinyint(4) NOT NULL AUTO_INCREMENT,`account` varchar(255) DEFAULT NULL,`passwd` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
);# 插入数据:
INSERT INTO `my_user` VALUES ('1', 'admin', 'admin');
INSERT INTO `my_user` VALUES ('2', 'pu', '12345');
INSERT INTO `my_user` VALUES ('3', 'system', 'system');# 查看插入数据
select * from db_test.my_user;

到从库上都能查到则说明没问题。


http://www.ppmy.cn/server/8654.html

相关文章

【C++进阶】特殊类的设计——单例模式详解

单例模式 一,设计一个类不能被拷贝二,设计一个类,只能在堆上创建对象三,设计一个类,只能在栈上创建对象四,设计一个类,不能被继承五,设计一个类,只能创建一个对象&#x…

mysql 删除数据的四种方法

在MySQL数据库中,删除数据是一个常见的操作,它允许从表中移除不再需要的数据,本文就来介绍一下四种方法,具有一定的参考价值,感兴趣的可以了解一下 − 目录 写在前面 方法介绍1. DELETE语句 示例: 2. DROP TABLE语句: 3. TRUNCATE TABLE 示例&#x…

关联规则挖掘(二)

目录 三、FP-增长算法(一)算法的背景(二)构造FP-树(三)生成频繁项集 四、关联规则的评价(一)支持度和置信度的不足(二)相关性分析 三、FP-增长算法 &#xf…

Redis中的订阅发布(二)

订阅与发布 订阅频道 每当客户端执行SUBSCRIBE命令订阅某个或某些频道的时候,服务器都会将客户端与被订阅的频道 在pubsub_channels字典中进行关联。 根据频道是否已经有其他订阅者,关联操作分为两种情况执行: 1.如果频道已经有其他订阅者&#xff0c…

WP-AutoPostPro 汉化版: WordPress自动采集发布插件

WP-AutoPostPro 是目前最好用的WordPress自动采集发布插件,最大的特点是可以采集来自于任何网站的内容并自动发布到你的WordPress站点。真正做到可以采集任何网站的内容并自动发布,采集过程完全自动进行无需人工干预,并提供内容过滤、HTML标签…

实现联系人前后端界面,实现分页查询04.15

实现联系人前后端界面,实现分页查询项目包-CSDN博客 项目结构 数据库中建立两个表: 完整的后端目录 建立联系人People表,分组Type表,实现对应实体类 根据需求在mapper中写对应的sql语句 查询所有,删除,添…

TypeScript24:TS中的声明文件

一、声明文件概述 以 .d.ts 结尾的文件。 声明文件作用: ts->js ,得不到类型声明。 为 JS 代码提供类型声明。 声明文件书写的位置: 放置到 tsconfig.json 配置中包含的目录中;放置到 node_modules/types 文件夹中&#x…

Linux虚拟化性能损失:原因、评估与优化策略

在云计算和数据中心领域,Linux虚拟化作为基础设施的核心组件,为资源的高效利用和应用程序的灵活部署提供了坚实的基础。然而,尽管其优势显著,虚拟化环境下的性能损失问题仍然是一个不可忽视的挑战。本文将深入探讨Linux虚拟化中性…