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.pswp.cn/web/64798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64798.shtml
英文地址,請注明出處:http://en.pswp.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存放項目…

IJCNN2025 投稿準備

投稿格式要求&#xff1a; IEEE - Manuscript Templates for Conference Proceedings 投稿網址&#xff1a; Conference Management Toolkit - Login

多輸入多輸出 | 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&…

node.js之---子線程(child_process)模塊

為什么需要子線程&#xff08;child_process&#xff09;模塊 Worker Threads 的基本概念 如何使用 Worker Threads Worker Threads 的性能 Worker 線程的優勢和限制 進階用法&#xff1a;共享內存 為什么需要子線程&#xff08;child_process&#xff09;模塊 在 Node.js…

【深度學習基礎之多尺度特征提取】多尺度圖像增強(Multi-Scale Image Augmentation)是如何在深度學習網絡中提取多尺度特征的?附代碼

【深度學習基礎之多尺度特征提取】多尺度圖像增強&#xff08;Multi-Scale Image Augmentation&#xff09;是如何在深度學習網絡中提取多尺度特征的&#xff1f;附代碼 【深度學習基礎之多尺度特征提取】多尺度圖像增強&#xff08;Multi-Scale Image Augmentation&#xff0…

鴻蒙應用開發 - 如何去掉字符串中空格

鴻蒙應用開發 - 如何去掉字符串中空格 在鴻蒙應用開發中&#xff0c;如果你使用的是ArkTS&#xff08;Ark TypeScript&#xff09;&#xff0c;可以通過JavaScript或TypeScript內置的字符串方法來去除字符串中的空格。以下是一些常用的方法&#xff1a; trim()&#xff1a;去…

最新版Chrome瀏覽器加載ActiveX控件之CFCA安全輸入控件

背景 CFCA安全輸入控件用于保證用戶在瀏覽器、桌面客戶端、移動客戶端中輸入信息的安全性&#xff0c;防止運行在用戶系統上的病毒、木馬等惡意程序入侵竊取用戶輸入的敏感信息。確保用戶輸入、本地緩存、網絡傳輸整個流程中&#xff0c;輸入的敏感信息不被竊取。廣泛應用于銀行…

vSAN手動平衡磁盤

原創作者&#xff1a;運維工程師 謝晉 vSAN手動平衡磁盤 vSAN手動平衡磁盤 vSAN手動平衡磁盤 1、ssh登錄到VCSA&#xff0c;然后登錄到 Ruby vSphere 控制臺 (RVC) # rvc administratorvsphere.local10.10.0.202、切換到計算機命名空間 0 / 1 10.10.0.20/ > cd 1 /10.…

接口測試面試題

接口測試在軟件測試中占據重要位置&#xff0c;無論是功能測試還是性能測試&#xff0c;接口的穩定性至關重要。以下總結了一些常見的接口測試面試題&#xff0c;幫助你從容應對面試挑戰&#xff01; 面試官常說&#xff1a;“接口測試是測試的重頭戲&#xff0c;了解接口的設計…

【前端,TypeScript】TypeScript速成(六):函數

函數 函數的定義 定義一個最簡單的加法函數&#xff1a; function add(a: number, b: number): number {return a b }&#xff08;可以看到 JavaScript/TypeScript 的語法與 Golang 也非常的相似&#xff09; 調用該函數&#xff1a; console.log(add(2, 3)) // out [LOG…