linux 系统 mysql :8.4.3 主从复制 教程及运维命令

一、环境准备

硬件配置
CPU2 核 CPU
内存2 GB 内存
硬盘30 GB 硬盘容量
外网访问服务器可以访问外网
软件环境
操作系统Anolis OS 7.9
MySQL版本8.4.3

二、服务器清单

Master192.168.153.221
Node192.168.153.222

三、安装mysql (两台机器都要下载)

# 下载 MySQL 8.4 社区版本的 RPM 包
wget https://repo.mysql.com//mysql84-community-release-el7-1.noarch.rpm
# 安装下载的 RPM 包
sudo rpm -ivh mysql84-community-release-el7-1.noarch.rpm
# 更新 YUM 缓存
sudo yum makecache
# 列出所有可用的 MySQL 相关软件包
yum list available | grep mysql
# 安装 MySQL 社区服务器
sudo yum install -y mysql-community-server mysql-community-client
# 启动 MySQL 服务
systemctl start mysqld
# 检查 MySQL 服务的状态
systemctl status mysqld
# 设置 MySQL 服务开机自启
systemctl enable mysqld
# 从日志文件中提取临时密码
grep 'temporary password' /var/log/mysqld.log
# 查看 MySQL 版本信息
mysql --version
# 使用 root 用户登录 MySQL(需要输入临时密码)
mysql -u root -p
# 修改 root 用户的密码为 '新密码'
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 退出 MySQL 命令行界面
exit
#命令快捷版
wget https://repo.mysql.com//mysql84-community-release-el7-1.noarch.rpm
sudo rpm -ivh mysql84-community-release-el7-1.noarch.rpm
sudo yum makecache
sudo yum install -y mysql-community-server mysql-community-client
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld
grep 'temporary password' /var/log/mysqld.log
mysql --version
mysql -u root -p

四、使用navicat连接

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
# 临时
setenforce 0  
# 永久 注意需要重启才能生效。
sed -i 's/enforcing/disabled/' /etc/selinux/config #使用navicat连接1103报错
use mysql;
update user set host='%' where user='root';
flush privileges;
exit

五、建库、建表、插入数据(在master节点上面)

-- 创建数据库
CREATE DATABASE my_database;-- 进入创建的数据库
USE my_database;-- 创建表1
CREATE TABLE people (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,gender ENUM('Male', 'Female', 'Other') NOT NULL,age INT NOT NULL,hobbies VARCHAR(255)
);-- 插入数据
INSERT INTO people (name, gender, age, hobbies) VALUES
('Alice', 'Female', 30, '阅读, 徒步'),
('Bob', 'Male', 25, '游戏, 烹饪'),
('Charlie', 'Male', 28, '运动, 旅行'),
('Diana', 'Female', 22, '音乐, 舞蹈');-- 创建表2
CREATE TABLE gao (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,gender ENUM('男', '女') NOT NULL,age INT NOT NULL,hobbies VARCHAR(255)
);-- 插入数据到表 gao
INSERT INTO gao (name, gender, age, hobbies) VALUES
('关羽', '男', 30, '阅读, 徒步'),
('张飞', '男', 25, '游戏, 烹饪'),
('马超', '男', 28, '运动, 旅行'),
('赵云', '男', 22, '音乐, 舞枪'),
('黄忠', '男', 57, '骑马, 射箭'),
('小乔', '女', 18, '弹琴, 跳舞');-- 查询表中的数据
SELECT * FROM gao;
select * from people;
-- 删除表
DROP TABLE gao;

六、开始部署主从复制

1、把数据库复制到从库,数据库默认文件位置 /var/lib/mysql/  先在(Node节点)从库,创建数据库  
-- 创建数据库
CREATE DATABASE my_database;
-- 进入创建的数据库
USE my_database;
使用navicat工具在主库导出表的数据,sql文件。
然后在从库表的位置,运行主库导出的SQL文件,确保从库和主库数据库和表结构保持一致。2、修改主库的配置文件主服务器(master)
编辑主库的 MySQL 配置文件(通常是 /etc/my.cnf 或 /etc/mysql/my.cnf,具体路径根据系统环境不同而不同):vim /etc/my.cnf[mysqld]
server-id = 1           # 设置唯一的server-id
log-bin = mysql-bin     # 启用二进制日志
binlog-do-db = my_database      # 只记录my_database数据库的变更3、重启主库 MySQL 服务
修改配置后,重启主库的 MySQL 服务使配置生效:sudo systemctl restart mysqld4、在从服务器(node节点上面)
编辑 /etc/my.cnf 文件,添加或修改以下内容:vim /etc/my.cnf[mysqld]
server-id = 2           # 设置唯一的server-id,不同于主服务器
relay-log = relay-log   # 启用中继日志重启 MySQL 服务:sudo systemctl restart mysqld5、查看实际的二进制日志文件名(在主服务器Master节点上面)SHOW BINARY LOGS;
#出现以下结果 记住  Log_name 和 File_size 的数值。
mysql> SHOW BINARY LOGS;
+------------------+-----------+-----------+
| Log_name         | File_size | Encrypted |
+------------------+-----------+-----------+
| mysql-bin.000001 |       158 | No        |
+------------------+-----------+-----------+
1 row in set (0.00 sec)6、执行sql对复制进行设置,在从服务器(node节点上面)
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.153.221', 
SOURCE_USER='root', 
SOURCE_PASSWORD='新密码', 
SOURCE_PORT=3306, 
SOURCE_LOG_FILE='mysql-bin.000001', 
SOURCE_LOG_POS=158, 
SOURCE_SSL=1;
#注释
CHANGE REPLICATION SOURCE TOSOURCE_HOST='主库ip',           -- 主库的 IP 地址或主机名,指定主服务器的位置SOURCE_USER='主库上复制用户',    -- 主库上用于复制的用户,通常是具有 REPLICATION SLAVE 权限的用户SOURCE_PASSWORD='主库上复制用户的密码',  -- 主库上复制用户的密码,必须与创建复制用户时设置的密码匹配SOURCE_PORT=3306,                -- 主库的 MySQL 服务端口,通常为 3306,除非主库使用了自定义端口SOURCE_LOG_FILE='mysql-bin.000001', -- 主库的二进制日志文件名,指定从哪里开始复制。可以通过 SHOW MASTER STATUS 获取SOURCE_LOG_POS=158,              -- 主库的二进制日志位置,指定从哪个位置开始读取日志,可以通过 SHOW MASTER STATUS 获取SOURCE_SSL=1;                    -- 启用 SSL 加密连接。1 表示启用 SSL,0 表示禁用。如果主库启用了 SSL,应该设置为 1#启动复制,在从服务器(node节点上面)
START replica;
#查看复制状态,在从服务器(node节点上面)
SHOW REPLICA STATUS\G
#复制正常运行,Replica_IO_Running 和 Replica_SQL_Running 都是 "Yes"。

 出现以下结果表示成功。

七、测试复制

--使用navicat工具,在主库节点执行命令  查看从库状态是否同步。
-- 查询表中的数据
SELECT * FROM gao;
select * from people;-- 插入数据
INSERT INTO gao (name, gender, age, hobbies) VALUES
('大乔', '女', 26, '读书, 跑步')-- 删除数据
delete from gao where name='黄忠'-- 更新数据
UPDATE gao SET age = '30' WHERE name = '赵云';

八、mysql 运维笔记

1、备份还原

-- 备份还原,数据库默认文件位置 /var/lib/mysql/ 
cd /var/lib/mysql/
#备份:
mysqldump -u root -p my_database > bf.sql
#还原:
#方法1:
mysql -u root -p -e "CREATE DATABASE my_database;"
mysql -u root -p my_database < bf.sql
#方法2:
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS my_database; USE my_database; SOURCE bf.sql;"
注释:
方法1:
mysql -u root -p -e "CREATE DATABASE my_database;"
mysql -u root -p my_database < bf.sql
命令作用:
第一条命令创建一个名为 my_database 的数据库。
第二条命令将 bf.sql 文件中的 SQL 语句导入到 my_database 数据库中。
方法2:
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS my_database; USE my_database; SOURCE bf.sql;"
命令作用:
连接到 MySQL 数据库服务器。
使用 root 用户(系统会提示输入密码)。
创建一个名为 my_database 的数据库,如果该数据库已经存在则不做任何操作。
选择使用刚创建或已存在的 my_database 数据库。
从 bf.sql 文件中读取并执行 SQL 语句。

2、如何更改 root 密码。

1、停止 MySQL 服务:
sudo systemctl stop mysqld
2、编辑 MySQL 配置文件 /etc/my.cnf,在 [mysqld] 部分添加:
[mysqld]
skip-grant-tables
作用:
skip-grant-tables 是一个 MySQL 配置选项,它指示 MySQL 在启动时跳过对授权表的加载和验证。
3、重启 MySQL:
sudo systemctl restart mysqld
4、登录 MySQL(无密码):
mysql -u root
5、修改密码:
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;
6、退出 MySQL:
exit;
7、恢复配置文件:删除 skip-grant-tables 配置行,注意安全隐患。
重启 MySQL 服务:
sudo systemctl restart mysqld
使用新密码登录:
mysql -u root -p
这样就完成了root用户密码修改的过程。

3、密码策略

密码策略的难度有三个主要级别:

STRONG(最严格)- 密码长度至少 12 个字符
- 包含大写字母、小写字母、数字和特殊字符(如 !@#$%^&*()_+ 等)
- 避免使用字典单词、常见的密码或简单的字符序列(如 123456password 等)
- 字符种类应分布均匀,避免使用重复字符或简单模式
MEDIUM(中等复杂度)- 密码长度至少 8 个字符
- 包含大写字母、小写字母和数字,可以包含特殊字符,但不强制要求
- 对字典单词的限制较弱,尽量避免常见的单词组合
LOW(最宽松)- 密码长度至少 6 个字符
- 没有特别要求字符种类,可以仅使用小写字母或数字(例如 abc123
- 允许使用字典单词和常见密码组合(如 password123qwerty 等)
validate_password.changed_characters_percentage00 表示密码在修改时不强制要求更改特定比例的字符。该变量控制密码更改时必须改变的字符比例。
validate_password.check_user_nameONON 表示密码验证器会检查密码是否与用户名相同。如果密码与用户名相同,将被视为不安全密码。
validate_password.dictionary_file(空)该字段为空,表示未指定用于验证密码的字典文件。通常这个文件包含一些常见的字典单词,用于避免使用字典单词作为密码。
validate_password.length8密码长度要求为至少 8 个字符。
validate_password.mixed_case_count1密码至少需要包含 1 个大写字母和 1 个小写字母。
validate_password.number_count1密码必须包含至少 1 个数字字符。
validate_password.policyMEDIUM密码策略为 MEDIUM,即中等复杂度密码策略。密码必须包含多种字符类型(如字母、数字、特殊字符),但对字典单词限制较弱。
validate_password.special_char_count1密码必须包含至少 1 个特殊字符(如 !@#$%^&*() 等)。
第一次安装设置密码:#查看Mysql版本
SELECT VERSION();
# 从日志文件中提取临时密码
grep 'temporary password' /var/log/mysqld.log
#登录mysql  输入临时密码
mysql -u root -p
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';  #注意字母大小写和特殊符号和密码长度。
#刷新权限
FLUSH PRIVILEGES;
#退出服务
exit
修改密码为:123456
#登录mysql  输入密码
mysql -u root -p#检查当前 MySQL 的密码策略设置
SHOW VARIABLES LIKE 'validate_password%';#设置密码策略为 LOW 宽松策略
SET GLOBAL validate_password.policy = LOW;#调整密码长度
SET GLOBAL validate_password.length = 6;#禁用混合大小写字母要求
SET GLOBAL validate_password.mixed_case_count = 0;#禁用数字要求
SET GLOBAL validate_password.number_count = 0;#禁用特殊字符要求
SET GLOBAL validate_password.special_char_count = 0;#如果您希望完全禁用密码策略(不推荐,除非有特殊需求),可以这样设置:
SET GLOBAL validate_password.policy = 0;#刷新权限
FLUSH PRIVILEGES;#修改用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';#退出服务
exit
补充其他常用命令:#查看root用户权限
SELECT user, host FROM mysql.user WHERE user = 'root';
#查看所有用户权限表
SELECT user, host FROM mysql.user;
#修改用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
#如果权限查看 host 是% 号的话  改成这个命令修改密码。
ALTER USER 'root'@'%' IDENTIFIED BY '123456';#查询 MySQL 当前安装并启用的插件的命令
SHOW PLUGINS;
#查看validate_password密码插件策略
SHOW VARIABLES LIKE 'validate_password%';
#卸载密码验证插件
UNINSTALL PLUGIN validate_password;
#如果插件未安装,可以使用以下命令安装该插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5材质节点Camera Vector/Reflection Vector

Camera Vector相机向量&#xff0c;输出像素到相机的方向&#xff0c;结果归一化 会随着相机移动而改变 Reflection Vector 反射向量&#xff0c;物体表面法线反射到相机的方向&#xff0c;x和y和camera vector相反 配合hdr使用

复合机器人正以其高效、精准、灵活的特点,逐渐在汽车装配线上崭露头角

随着全球汽车制造业的快速发展&#xff0c;汽车装配线已成为衡量企业生产效率和技术水平的重要标准。传统的装配方式往往依赖于大量的人工操作&#xff0c;这不仅效率低下&#xff0c;还面临着质量不稳定、安全隐患等问题。然而&#xff0c;随着智能科技的飞速进步&#xff0c;…

导致启动nacos报错Caused by: java.lang.IllegalStateException: No DataSource set 的两种原因

Java资深小白&#xff0c;不足之处&#xff0c;或者有任何错误欢迎指出。 --蓝紫报错代码如下: C:\Windows\System32>cd D:\nacos-server-2.2.3\nacos\binC:\Windows\System32>d:D:\nacos-server-2.2.3\nacos\bin>startup.cmd -m standalone "nacos is starting…

LinuxUbuntu打开VSCode白屏解决方案

解决方法是 以root权限打开VSCode sudo /usr/share/code/code --no-sandbox --unity-launch

C语言期末复习笔记(下)

目录 九、指针 1.指针变量的定义和初始化 2.间接寻址符* 3.按值调用和按址调用 4.实例 5.函数指针 6.指针变量和其它类型变量的对比 十、字符串 1.字符串常量 2.字符串的存储 3.字符指针 4.字符串的访问和输入/输出 5.字符串处理函数 &#xff08;1&#xff09;str…

1、蓝牙打印机环境搭建

本项目采用stm32f103c8T6芯片&#xff0c;通过库函数实现打印功能&#xff0c;并配置有小程序蓝牙通信上位机。 1、创建文件夹目录 core文件夹存放核心库文件 LIB文件夹存放标准库函数文件 这里可以删减&#xff0c;用不到的可以不要。 obj存放编译后的文件 project存放项目…

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入…

Leecode刷题C语言之切蛋糕的最小总共开销②

执行结果:通过 执行用时和内存消耗如下&#xff1a; typedef struct {int *booked;int bookedSize; } MyCalendar;#define MAX_BOOK_SIZE 1001MyCalendar* myCalendarCreate() {MyCalendar *obj (MyCalendar *)malloc(sizeof(MyCalendar));obj->booked (int *)malloc(siz…

力扣-数据结构-10【算法学习day.81】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…

Vue 全局事件总线:Vue 2 vs Vue 3 实现

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

基于Spring Boot的电影网站系统

一、技术架构 后端框架&#xff1a;Spring Boot&#xff0c;它提供了自动配置、简化依赖管理、内嵌式容器等特性&#xff0c;使得开发者可以快速搭建起一个功能完备的Web应用。 前端技术&#xff1a;可能采用Vue.js、JS、jQuery、Ajax等技术&#xff0c;结合Element UI等组件库…

DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation?zero_to_fp32.py有什么用?怎么用?

DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation&#xff1f; 具体步骤 首先看一个样例&#xff1a; 这是我用open-instruct框架&#xff0c;使用DeepSpeed训练1728个steps得到的一个checkpoint。请注意&#xff0c;下文我演示用的例子是基于step_1152&…

最新版Chrome浏览器加载ActiveX控件之CFCA安全输入控件

背景 CFCA安全输入控件用于保证用户在浏览器、桌面客户端、移动客户端中输入信息的安全性&#xff0c;防止运行在用户系统上的病毒、木马等恶意程序入侵窃取用户输入的敏感信息。确保用户输入、本地缓存、网络传输整个流程中&#xff0c;输入的敏感信息不被窃取。广泛应用于银行…

接口测试面试题

接口测试在软件测试中占据重要位置&#xff0c;无论是功能测试还是性能测试&#xff0c;接口的稳定性至关重要。以下总结了一些常见的接口测试面试题&#xff0c;帮助你从容应对面试挑战&#xff01; 面试官常说&#xff1a;“接口测试是测试的重头戏&#xff0c;了解接口的设计…

Easy-Trans反向翻译+Excel导入最佳实践

1、概述 实现用户excel上传、解析、对于用户输入的中文翻译为字典码或者id&#xff0c;实现用户输入的参数校验&#xff0c;最后入库。如果用户输入的参数有问题&#xff0c;返回校验结果给前端。 excel解析使用My-Excel组件&#xff0c;校验使用hibernate-validator&#xff…

高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安装过程

前言 Nginx WebUI 是一个为 Nginx 提供图形化管理界面的工具。通过 WebUI&#xff0c;用户可以轻松管理 Nginx 配置&#xff0c;而无需直接编辑配置文件&#xff0c;尤其适合新手用户和频繁修改配置的场景。 官网文档&#xff1a;nginxWebUI - 文档 本文将分享为什么选择 ngin…

SpringCloud源码-openFeign

LoadBalancer默认只有nacos服务发现器 openFeign与springcloud loadbalancer的结合点 openFeign通过spring cloud loadbalancer进行负载均衡&#xff0c;spring cloud loadbalancer通过discovery client获取nacos的机器列表&#xff0c;然后底层进行负载均衡。

基于微信小程序的校园自助打印系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

从 ELK Stack 到简单 — Elastic Cloud Serverless 上的 Elastic 可观察性

作者&#xff1a;来自 Elastic Bahubali Shetti, Chris DiStasio 宣布 Elastic Cloud Serverless 上的 Elastic Observability 正式发布 — 一款完全托管的可观察性解决方案。 随着组织规模的扩大&#xff0c;一个能够处理分布式云环境的复杂性并提供实时洞察的可观察性解决方…

21.<基于Spring图书管理系统②(图书列表+删除图书+更改图书)(非强制登录版本完结)>

PS&#xff1a; 开闭原则 定义和背景 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09;&#xff0c;也称为开放封闭原则&#xff0c;是面向对象设计中的一个基本原则。该原则强调软件中的模块、类或函数应该对扩展开放&#xff0c;对修改封闭。这意味着一个软件实体…