共計 9740 個字符,預計需要花費 25 分鐘才能閱讀完成。
本篇內容介紹了“MYSQL 完全備份、主從復制、級聯復制、半同步的知識點總結”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
mysql 完全備份
1,啟用二進制日志,并于數據庫分離,單獨存放
vim /etc/my.cnf
添加
log_bin=/data/bin/mysql-bin
創建 /data/bin 文件夾并授權
chown mysql.mysql /data/bin
2,完成備份數據庫
mysqldump -A --single-transaction --master-data=2 | xz /data/all.sql.xz
3,對數據庫進行增刪改
INSERT hellodb.students(stuid,name,gender,age) VALUE(27, Lujunyi , M ,30);
4, 停止 MySQL
systemctl stop mariadb.service
5,解壓備份文件
unxz /data/all.sql.xz
6, 查找完全備份時二進制日志的位置
vim /data/all.sql
HANGE MASTER TO MASTER_LOG_FILE= mysql-bin.000001 , MASTER_LOG_POS=468
7,導出完成備份后的二進制日志
mysqlbinlog --start-position=468 /data/bin/mysql-bin.000001 /data/inc.sql
8,還原數據
mysql -e source /data/all.sql
mysql -e source /data/inc.sql
9,驗證完成。
誤刪除的恢復
1,啟用二進制日志并與數據庫分開存放
vim /etc/my.cnf
添加
log_bin=/data/bin/mysql-bin
創建 /data/bin 文件夾并授權
chown mysql.mysql /data/bin
2,對數據庫進行完全備份
mysqldump -A --single-transaction --master-data=2 | xz /data/all.sql.xz
3,對數據庫進行增刪改
mysql -e drop table hellodb.students
mysql -e insert hellodb.teachers value (5, wangqi ,50, M)
4, 停止服務
systemctl stop mariadb.service
5,刪除數據庫
rm -rf /var/lib/mysql/*
6,解壓備份文件
unxz /data/all.sql.xz
7,查看備份文件,查找二進制節點
vim /data/all.sql
-- CHANGE MASTER TO MASTER_LOG_FILE= mysql-bin.000004 , MASTER_LOG_POS=521902;
8,導出二進制日志節點數據
mysqlbinlog --start-position=521902 /data/bin/mysql-bin.000004 /data/inc.sql
9,刪除二進制日志節點數據中誤操作的命令
vim /data/inc.sql
DROP TABLE `hellodb`.`students` /* generated by server */
10,啟動服務
systemctl start mariadb.service
11. 關閉二進制日志記錄
mysql -e SET sql_log_bin=off
12, 導入備份數據
mysql /data/all.sql
mysql /data/inc.sql
13, 驗證完成。
主從復制
# 主服務器
1,主服務器啟用二進制日志,并更改二進制目錄
vim /etc/my.cnf
binlog-format=row server-id=1(主從服務器必需保證不同)
log_bin=/data/bin/mysql-bin
更改目錄見上面
2,重啟服務
service mysql restart
3, 創建一個賬戶用來復制數據的賬戶
mysql -e GRANT REPLICATION SLAVE ON *.* TO repluser @ 172.22.7.% IDENTIFIED BY centos
4,查看主服務器正在使用的二進制日志
show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 14383 |
+------------------+-----------+
1 row in set (0.00 sec)
# 從服務器
5,更配置
vim /etc/my.cnf
server-id=2
read-only
#log-bin=/data/bin/mysql-bin
6, 啟動服務
service mysql restart
7, 關聯主服務
MariaDB [(none)]
CHANGE MASTER TO MASTER_HOST= 172.22.7.70 , MASTER_USER= repluser , MASTER_PASSWORD= centos , MASTER_PORT=3306, MASTER_LOG_FILE= mysql-bin.000001 , MASTER_LOG_POS=14383;
8,查看從服務器狀態
show slave status\G;
9, 啟動線程
start slave;
# 測試
10, 增刪改主服務器數據,查看從服務器數據是否同步。
主從復制出錯的解決 -sql_slave_skip_counter
#master 服務 ip=172.22.7.70
1,主服務器啟用二進制日志,并更改二進制目錄
vim /etc/my.cnf
binlog-format=row server-id=1(主從服務器必需保證不同)
log_bin=/data/bin/mysql-bin
更改目錄見上面
2,重啟服務
service mysql restart
3, 創建一個賬戶用來復制數據的賬戶
mysql -e GRANT REPLICATION SLAVE ON *.* TO repluser @ 172.22.7.% IDENTIFIED BY centos
4,查看主服務器正在使用的二進制日志
mysql -e show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 264 |
| mysql-bin.000002 | 245 |
+------------------+-----------+
#slave 服務 ip=172.22.7.71
5, 修改配置文件, 啟動服務
[mysqld] server-id = 2 read-only
vim /etc/my.cnf
systemctl start mariadb
# 配置錯誤 master 服務信息
6,配置,change master to
CHANGE MASTER TO
MASTER_HOST= 172.22.7.77 ,
MASTER_USER= wang ,
MASTER_PASSWORD= lodman ,
MASTER_PORT=3306,
MASTER_LOG_FILE=log-bin.001 ,
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;
7, 查看 slave 狀態
mysql -e show slave status\G
Slave_IO_State:
Master_Host: 172.22.7.77
Master_User: wang
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: log-bin.001
Read_Master_Log_Pos: 4
Relay_Log_File: ct7m1-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: log-bin.001
Slave_IO_Running: No
Slave_SQL_Running: No
·········略
8,啟動復制線程
mysql -e start slave
9, 再次查看 slave 狀態
mysql -e show slave status\G
Slave_IO_State:
Master_Host: 172.22.7.77
Master_User: wang
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: log-bin.001
Read_Master_Log_Pos: 4
Relay_Log_File: ct7m1-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: log-bin.001
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
·········略
10,master 服務增刪改數據
11, 查看 slave 服務是否同步,失敗!
# 解決錯誤
12,停止并重置 slave 復制線程服務
mysql -e stop slave
mysql -e reset slave
13,配置正確的 change master to 信息
CHANGE MASTER TO MASTER_HOST= 172.22.7.70 ,
MASTER_USER= repluser ,
MASTER_PASSWORD= centos ,
MASTER_PORT=3306,
MASTER_LOG_FILE= mysql-bin.000002 ,
MASTER_LOG_POS=245;
14,查看 slave 狀態
show slave status\G;
Slave_IO_State: Waiting for master to send event
Master_Host: 172.22.7.70
Master_User: repluser
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 7382
Relay_Log_File: ct7m1-relay-bin.000002
Relay_Log_Pos: 540
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: No
15,發現 slave 狀態中 Slave_SQL_Running: No,執行下面命令更為為 YES
MariaDB [(none)] stop slave; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)] set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]start slave;
Query OK, 0 rows affected (0.03 sec) MariaDB [(none)]show slave status\G;
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.22.7.70 Master_User: repluser Master_Port: 3306 Connect_Retry: 10 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 7382 Relay_Log_File: ct7m1-relay-bin.000003 Relay_Log_Pos: 540 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes ·········略
16,查看 slave 服務數據是否同步
17,同步完成。
Mysql 級聯復制
在生產換進中有一種主從復制的方法主節點先將數據同步到一個中間的從節點,然后由從節點給后續的其他從節點來復制數據,這種復制方式稱為級聯復制。
級聯復制的好處是可以極大的減輕主節點的壓力
級聯復制在配置時需要在中間節點上啟用 log_slave_updates 的選項。
# 環境
服務器 master slave slave
系統 centos7 centos7 centos7
ip 172.22.7.70 172.22.7.70 172.22.7.71
#mater
1,主服務器啟用二進制日志,并更改二進制目錄
vim /etc/my.cnf
binlog-format=row server-id=1(主從服務器必需保證不同)
log_bin=/data/bin/mysql-bin
更改目錄見上面
2,重啟服務
service mysql restart
3, 創建一個賬戶用來復制數據的賬戶
mysql -e GRANT REPLICATION SLAVE ON *.* TO repluser @ 172.22.7.% IDENTIFIED BY centos
4,查看主服務器正在使用的二進制日志
mysql -e show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 264 |
| mysql-bin.000002 | 7488 |
| mysql-bin.000003 | 402 |
+------------------+-----------+
#slave
5,修改配置文件, 并創建二進制日志目錄
vim /etc/my.cnf
[mysqld]
log-bin=/data/bin/mysql-bin
binlog-format=row
read-only
log_slave_updates
server-id=2
更改目錄見上
6,啟動服務
systemctl restart mariadb
7,配置 change master to 信息
CHANGE MASTER TO MASTER_HOST= 172.22.7.70 ,MASTER_USER= repluser ,MASTER_PASSWORD= centos ,MASTER_PORT=3306,MASTER_LOG_FILE= mysql-bin.000003 , MASTER_LOG_POS=402;
8,啟動 slave 線程
mysql -e start slave
9,查看 slave 狀態
show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.22.7.70
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 7539
Relay_Log_File: ct7m1-relay-bin.000002
Relay_Log_Pos: 7677
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
10,在 master 上增刪改數據測試查看
#slave1
11,在 slave 上將 slave 上的數據拷貝過來
mysqldump -A --single-transaction -F --master-data=1 /data/all.sql
scp /data/all.sql 172.22.7.72:/data
12,slave 創建一個賬戶用來復制數據的賬戶
mysql -e GRANT REPLICATION SLAVE ON *.* TO repluser @ 172.22.7.% IDENTIFIED BY centos
13,修改 slave1 配置
vim /etc/my.cnf
[mysqld]
read-only
server-id=3
14,啟動服務
systemctl start mariadb
15,查看 slave 服務器的二進制日志
mysql -e show master logs
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 351 |
| mysql-bin.000002 | 351 |
| mysql-bin.000003 | 351 |
| mysql-bin.000004 | 25552 |
| mysql-bin.000005 | 586 |
+------------------+-----------+
16,打開 all.sql 文件對 change master on 信息加以修改
CHANGE MASTER TO MASTER_HOST= 172.22.7.71 ,MASTER_USER= repluser ,MASTER _PASSWORD= centos ,MASTER_PORT=3306,MASTER_LOG_FILE= mysql-bin.000005 , MASTER_LOG_POS=586;
17,導入 slave 數據
mysql /data/all.sql
18,啟動線程
mysql -e START SLAVE;
19,查看 slave 狀態
mysql -e show slave status\G;
20, 對 master 對象增刪改操作,查看是否同步
21,同步完成。
MySQL 半同步
異步復制是當用戶寫入一條記錄時,先將數據寫入到主節點,然后回復用戶一個寫入成功的消息,然后慢慢的將數據復制到其背后的其他從節點,這樣的好處是效率比較高,但是缺點也是非常明顯,主服務器和從服務器的延遲過大并且主服務器突然發生異常,此時就會造成數據的丟失。
同步復制是當用戶寫入一條記錄時,主節點將數據寫入數據庫,然后將數據復制給其后面的其他從節點,當所有的從節點返回數據復制成功后,主節點再回復用戶數據接入成功的消息,這樣做的好處是,確保了數據的安全性,但損失了效率。
半同步復制是間于同步復制和異步復制之間的一種復制方法,他的工作原理是:當用戶執行寫操作時,主節點會將數據發送給其后面的其他從節點,只要有一個從節點返回復制成功的消息,主節點就直接返回寫入成功,如果主節點背后的從節點遲遲不返回復制成功消息,此時就會有一個超時時長,一旦達到超時時長,主節點就先返回消息告訴用戶復制成功,而后將數據繼續給從節點復制。
# 配置主從復制 步驟見上。
# 配置半同步
##master
1,修改配置文件啟用插件
vim /etc/my.cnf
[mysqld]
log-bin=/data/bin/mariadb-bin
binlog-format=row
server-id=1
rpl_semi_sync_master_enabled
2, 重啟服務,
systemctl restart mariadb
3,查看插件是否啟動
SHOW GLOBAL VARIABLES LIKE %semi%
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 3000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
4 rows in set (0.00 sec)
4,設置超時時長
SET GLOBAL rpl_semi_sync_master_timeout=3000;
Query OK, 0 rows affected (0.00 sec)
##slave
5,修改配置文件啟用插件
vim /etc/my.cnf
[mysqld]
log-bin=/data/bin/mariadb-bin
binlog-format=row
server-id=2
rpl_semi_sync_master_enabled
6, 重啟服務,
systemctl restart mariadb
7,查看插件是否啟動
SHOW GLOBAL VARIABLES LIKE %semi%
+------------------------------------+--------------+
| Variable_name | Value |
+------------------------------------+--------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 1000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_COMMIT |
+------------------------------------+--------------+
5 rows in set (0.00 sec)
8, 啟動復制線程
mysql -e START SLAVE
9,測試檢查
10,同步完成
“MYSQL 完全備份、主從復制、級聯復制、半同步的知識點總結”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!