MySQL 主從復(fù)制部署及驗(yàn)證(示例詳解)
MySQL 主從復(fù)制部署指南
? MySQL 主從復(fù)制是一種常見(jiàn)的數(shù)據(jù)復(fù)制技術(shù),允許數(shù)據(jù)從一個(gè) MySQL 數(shù)據(jù)庫(kù)服務(wù)器(主服務(wù)器)復(fù)制到一個(gè)或多個(gè) MySQL 數(shù)據(jù)庫(kù)服務(wù)器(從服務(wù)器)。
部署步驟
1.環(huán)境準(zhǔn)備
- 至少兩臺(tái)服務(wù)器(一臺(tái)主,一臺(tái)或多臺(tái)從)
- 相同版本的 MySQL 服務(wù)器(建議 5.7+)
- 網(wǎng)絡(luò)互通,防火墻開(kāi)放 3306 端口
2. 主服務(wù)器配置
編輯主服務(wù)器的 MySQL 配置文件(通常為 /etc/my.cnf 或 /etc/mysql/my.cnf):
ini配置
[mysqld] server-id = 1 # 唯一服務(wù)器ID,主從不能相同 log_bin = mysql-bin # 啟用二進(jìn)制日志 binlog_format = ROW # 推薦使用ROW格式 binlog_do_db = your_database # 可選,指定要復(fù)制的數(shù)據(jù)庫(kù) # 如果需要復(fù)制所有數(shù)據(jù)庫(kù),可以省略 binlog_do_db
重啟 MySQL 服務(wù):
systemctl restart mysqld
3. 創(chuàng)建復(fù)制用戶
在主服務(wù)器上登錄 MySQL,創(chuàng)建用于復(fù)制的用戶:
CREATE USER 'repl'@'%' IDENTIFIED BY 'iflytek'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
4. 獲取主服務(wù)器狀態(tài)
在主服務(wù)器上執(zhí)行:
SHOW MASTER STATUS;
記錄 File 和 Position 值,從服務(wù)器配置時(shí)需要。
5. 從服務(wù)器配置
編輯從服務(wù)器的 MySQL 配置文件:
ini配置
[mysqld] server-id = 2 # 不同于主服務(wù)器的唯一ID relay-log = mysql-relay-bin # 啟用中繼日志 read_only = 1 # 從服務(wù)器設(shè)為只讀(可選)
CHANGE MASTER TO MASTER_HOST='192.168.56.101', MASTER_USER='repl', MASTER_PASSWORD='iflytek', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=747;
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='記錄的文件名', MASTER_LOG_POS=記錄的位置值;
重啟 MySQL 服務(wù):
systemctl restart mysqld
6. 配置從服務(wù)器連接主服務(wù)器
在從服務(wù)器上登錄 MySQL,執(zhí)行sql:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='記錄的文件名', MASTER_LOG_POS=記錄的位置值;
然后啟動(dòng)復(fù)制:
START SLAVE;
7. 檢查復(fù)制狀態(tài)
在從服務(wù)器上執(zhí)行:
SHOW SLAVE STATUS\G
檢查 Slave_IO_Running 和 Slave_SQL_Running 是否都為 Yes。
MYSQL主從部署驗(yàn)證
學(xué)校管理數(shù)據(jù)庫(kù)創(chuàng)建腳本
以下是完整的 SQL 腳本,用于創(chuàng)建學(xué)校管理數(shù)據(jù)庫(kù)、學(xué)生表、老師表和班級(jí)表,并為每個(gè)表插入三條示例數(shù)據(jù):
-- 創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE IF NOT EXISTS school_db;
USE school_db;
-- 創(chuàng)建老師表
CREATE TABLE teachers (
teacher_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
subject VARCHAR(50) NOT NULL,
hire_date DATE
);
-- 插入老師數(shù)據(jù)
INSERT INTO teachers (name, subject, hire_date) VALUES
('張老師', '數(shù)學(xué)', '2018-03-15'),
('李老師', '語(yǔ)文', '2016-09-01'),
('王老師', '英語(yǔ)', '2020-11-22');
-- 創(chuàng)建班級(jí)表
CREATE TABLE classes (
class_id INT AUTO_INCREMENT PRIMARY KEY,
class_name VARCHAR(50) NOT NULL,
grade_level VARCHAR(20) NOT NULL,
head_teacher_id INT,
FOREIGN KEY (head_teacher_id) REFERENCES teachers(teacher_id)
);
-- 插入班級(jí)數(shù)據(jù)
INSERT INTO classes (class_name, grade_level, head_teacher_id) VALUES
('高一(1)班', '高一', 1),
('高二(3)班', '高二', 2),
('高三(2)班', '高三', 3);
-- 創(chuàng)建學(xué)生表
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender ENUM('男', '女') NOT NULL,
birth_date DATE,
class_id INT,
FOREIGN KEY (class_id) REFERENCES classes(class_id)
);
-- 插入學(xué)生數(shù)據(jù)
INSERT INTO students (name, gender, birth_date, class_id) VALUES
('張三', '男', '2007-05-12', 1),
('李四', '男', '2006-11-30', 1),
('王小紅', '女', '2007-02-18', 1),
('趙明', '男', '2006-08-22', 2),
('錢芳', '女', '2006-04-05', 2),
('孫莉', '女', '2006-09-15', 2),
('周杰', '男', '2005-12-03', 3),
('吳婷', '女', '2005-07-19', 3),
('鄭浩', '男', '2005-10-28', 3);表結(jié)構(gòu)說(shuō)明
1. 老師表 (teachers)
| 字段名 | 類型 | 描述 |
|---|---|---|
| teacher_id | INT | 老師ID(主鍵) |
| name | VARCHAR(50) | 老師姓名 |
| subject | VARCHAR(50) | 教學(xué)科目 |
| hire_date | DATE | 入職日期 |
2. 班級(jí)表 (classes)
| 字段名 | 類型 | 描述 |
|---|---|---|
| class_id | INT | 班級(jí)ID(主鍵) |
| class_name | VARCHAR(50) | 班級(jí)名稱 |
| grade_level | VARCHAR(20) | 年級(jí)(高一/高二/高三) |
| head_teacher_id | INT | 班主任ID(外鍵) |
3. 學(xué)生表 (students)
| 字段名 | 類型 | 描述 |
|---|---|---|
| student_id | INT | 學(xué)生ID(主鍵) |
| name | VARCHAR(50) | 學(xué)生姓名 |
| gender | ENUM(‘男’,‘女’) | 性別 |
| birth_date | DATE | 出生日期 |
| class_id | INT | 所在班級(jí)ID(外鍵) |
數(shù)據(jù)查詢示例
1. 查詢所有老師
SELECT * FROM teachers;
2. 查詢所有班級(jí)及其班主任
SELECT c.class_id, c.class_name, c.grade_level, t.name AS head_teacher FROM classes c JOIN teachers t ON c.head_teacher_id = t.teacher_id;
3. 查詢高一(1)班的所有學(xué)生
SELECT s.student_id, s.name, s.gender, s.birth_date FROM students s JOIN classes c ON s.class_id = c.class_id WHERE c.class_name = '高一(1)班';
4. 查詢各班級(jí)學(xué)生人數(shù)
SELECT c.class_name, COUNT(s.student_id) AS student_count FROM classes c LEFT JOIN students s ON c.class_id = s.class_id GROUP BY c.class_id;
這個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)包含了基本的學(xué)校管理實(shí)體(學(xué)生、老師、班級(jí))之間的關(guān)系,并提供了示例數(shù)據(jù)。您可以根據(jù)實(shí)際需求擴(kuò)展更多字段或表,如課程表、成績(jī)表等。
到此這篇關(guān)于MySQL 主從復(fù)制部署及驗(yàn)證的文章就介紹到這了,更多相關(guān)mysql主從復(fù)制部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql Community Server 5.7.19安裝指南(詳細(xì))
這篇文章主要介紹了mysql Community Server 5.7.19安裝指南(詳細(xì)),需要的朋友可以參考下2017-10-10
Mysql 取字段值逗號(hào)第一個(gè)數(shù)據(jù)的查詢語(yǔ)句
Mysql 取字段值逗號(hào)第一個(gè)數(shù)據(jù),在某些情況下還是比較實(shí)用的,主要使用到了left函數(shù)及其他等等,感興趣的朋友可以參考下2013-10-10
mysql 5.7.15 安裝配置方法圖文教程(windows)
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.15 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
在一臺(tái)服務(wù)器上安裝兩個(gè)或多個(gè)mysql的實(shí)現(xiàn)步驟
這篇文章給大家介紹如何在一臺(tái)服務(wù)器上安裝兩個(gè)或多個(gè)mysql的實(shí)現(xiàn)步驟,有需要的朋友們可以參考學(xué)習(xí),下面跟著小編一起來(lái)看看吧。2016-09-09
Mysql?5.7?新特性之?json?類型的增刪改查操作和用法
這篇文章主要介紹了Mysql?5.7?新特性之json?類型的增刪改查,主要通過(guò)代碼介紹mysql?json類型的增刪改查等基本操作的用法,需要的朋友可以參考下2022-09-09
如何保護(hù)MySQL中重要數(shù)據(jù)的方法
在日常的工作中,保護(hù)數(shù)據(jù)免受未授權(quán)用戶的侵犯是系統(tǒng)管理員特別關(guān)心的問(wèn)題。如果你目前用的是MySQL,就可以使用一些方便的功能來(lái)保護(hù)系統(tǒng),來(lái)大大減少機(jī)密數(shù)據(jù)被未授權(quán)用戶訪問(wèn)的風(fēng)險(xiǎn)2011-10-10
遠(yuǎn)程訪問(wèn)MySQL數(shù)據(jù)庫(kù)的方法小結(jié)
MySQL數(shù)據(jù)庫(kù)不允許從遠(yuǎn)程訪問(wèn)如何辦?本文提供了 3種解決思路方法2009-12-12
登錄MySQL時(shí)出現(xiàn)SSL connection error: unknown
這篇文章主要介紹了登錄MySQL時(shí)出現(xiàn)SSL connection error: unknown error number錯(cuò)誤的解決方法,文中通過(guò)圖文結(jié)合的形式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12

