MySQL 主從復制部署及驗證(示例詳解)
MySQL 主從復制部署指南
? MySQL 主從復制是一種常見的數(shù)據(jù)復制技術,允許數(shù)據(jù)從一個 MySQL 數(shù)據(jù)庫服務器(主服務器)復制到一個或多個 MySQL 數(shù)據(jù)庫服務器(從服務器)。
部署步驟
1.環(huán)境準備
- 至少兩臺服務器(一臺主,一臺或多臺從)
- 相同版本的 MySQL 服務器(建議 5.7+)
- 網(wǎng)絡互通,防火墻開放 3306 端口
2. 主服務器配置
編輯主服務器的 MySQL 配置文件(通常為 /etc/my.cnf
或 /etc/mysql/my.cnf
):
ini配置
[mysqld] server-id = 1 # 唯一服務器ID,主從不能相同 log_bin = mysql-bin # 啟用二進制日志 binlog_format = ROW # 推薦使用ROW格式 binlog_do_db = your_database # 可選,指定要復制的數(shù)據(jù)庫 # 如果需要復制所有數(shù)據(jù)庫,可以省略 binlog_do_db
重啟 MySQL 服務:
systemctl restart mysqld
3. 創(chuàng)建復制用戶
在主服務器上登錄 MySQL,創(chuàng)建用于復制的用戶:
CREATE USER 'repl'@'%' IDENTIFIED BY 'iflytek'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
4. 獲取主服務器狀態(tài)
在主服務器上執(zhí)行:
SHOW MASTER STATUS;
記錄 File 和 Position 值,從服務器配置時需要。
5. 從服務器配置
編輯從服務器的 MySQL 配置文件:
ini配置
[mysqld] server-id = 2 # 不同于主服務器的唯一ID relay-log = mysql-relay-bin # 啟用中繼日志 read_only = 1 # 從服務器設為只讀(可選)
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 服務:
systemctl restart mysqld
6. 配置從服務器連接主服務器
在從服務器上登錄 MySQL,執(zhí)行sql:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='記錄的文件名', MASTER_LOG_POS=記錄的位置值;
然后啟動復制:
START SLAVE;
7. 檢查復制狀態(tài)
在從服務器上執(zhí)行:
SHOW SLAVE STATUS\G
檢查 Slave_IO_Running
和 Slave_SQL_Running
是否都為 Yes
。
MYSQL主從部署驗證
學校管理數(shù)據(jù)庫創(chuàng)建腳本
以下是完整的 SQL 腳本,用于創(chuàng)建學校管理數(shù)據(jù)庫、學生表、老師表和班級表,并為每個表插入三條示例數(shù)據(jù):
-- 創(chuàng)建數(shù)據(jù)庫 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ù)學', '2018-03-15'), ('李老師', '語文', '2016-09-01'), ('王老師', '英語', '2020-11-22'); -- 創(chuàng)建班級表 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) ); -- 插入班級數(shù)據(jù) INSERT INTO classes (class_name, grade_level, head_teacher_id) VALUES ('高一(1)班', '高一', 1), ('高二(3)班', '高二', 2), ('高三(2)班', '高三', 3); -- 創(chuàng)建學生表 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) ); -- 插入學生數(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);
表結構說明
1. 老師表 (teachers)
字段名 | 類型 | 描述 |
---|---|---|
teacher_id | INT | 老師ID(主鍵) |
name | VARCHAR(50) | 老師姓名 |
subject | VARCHAR(50) | 教學科目 |
hire_date | DATE | 入職日期 |
2. 班級表 (classes)
字段名 | 類型 | 描述 |
---|---|---|
class_id | INT | 班級ID(主鍵) |
class_name | VARCHAR(50) | 班級名稱 |
grade_level | VARCHAR(20) | 年級(高一/高二/高三) |
head_teacher_id | INT | 班主任ID(外鍵) |
3. 學生表 (students)
字段名 | 類型 | 描述 |
---|---|---|
student_id | INT | 學生ID(主鍵) |
name | VARCHAR(50) | 學生姓名 |
gender | ENUM(‘男’,‘女’) | 性別 |
birth_date | DATE | 出生日期 |
class_id | INT | 所在班級ID(外鍵) |
數(shù)據(jù)查詢示例
1. 查詢所有老師
SELECT * FROM teachers;
2. 查詢所有班級及其班主任
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)班的所有學生
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. 查詢各班級學生人數(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;
這個數(shù)據(jù)庫設計包含了基本的學校管理實體(學生、老師、班級)之間的關系,并提供了示例數(shù)據(jù)。您可以根據(jù)實際需求擴展更多字段或表,如課程表、成績表等。
到此這篇關于MySQL 主從復制部署及驗證的文章就介紹到這了,更多相關mysql主從復制部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MYSQL數(shù)字函數(shù)詳解及實戰(zhàn)記錄(數(shù)字函數(shù)大全,內(nèi)含示例)
數(shù)學運算函數(shù)可以實現(xiàn)常見的數(shù)學運算,這篇文章主要給大家介紹了關于MYSQL數(shù)字函數(shù)詳解及實戰(zhàn)的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-01-01修改MySQL數(shù)據(jù)庫中表和表中字段的編碼方式的方法
這篇文章主要介紹了如何修改MySQL數(shù)據(jù)庫中表和表中字段的編碼方式,需要的朋友可以參考下2014-05-05淺析一個MYSQL語法(在查詢中使用count)的兼容性問題
本篇文章是對MYSQL語法(在查詢中使用count)的兼容性問題進行了詳細的分析介紹,需要的朋友參考下2013-07-07MySQL數(shù)據(jù)庫修復方法(MyISAM/InnoDB)
這篇文章主要為大家整理了7條修復MySQL數(shù)據(jù)庫的方法,當簡單的重啟對數(shù)據(jù)庫不起作用,或者有表崩潰時,需要的朋友可以參考下2014-06-06