本篇內容介紹了“完全備份、主從復制、級聯(lián)復制、半同步的知識點(diǎn)總結”的有關(guān)知識,在實(shí)際案例的操作過(guò)程中,不少人都會(huì )遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學(xué)有所成!
mysql 完全備份
vim /etc/my.cnf
添加
log_bin=/data/bin/mysql-bin
創(chuàng )建/data/bin文件夾并授權
chown mysql.mysql /data/bin
2,完成備份數據庫
mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz
3,對數據庫進(jìn)行增刪改
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,查找完全備份時(shí)二進(jìn)制日志的位置
vim /data/all.sql HANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=468
7,導出完成備份后的二進(jìn)制日志
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,啟用二進(jìn)制日志并與數據庫分開(kāi)存放
vim /etc/my.cnf
添加
log_bin=/data/bin/mysql-bin
創(chuàng )建/data/bin文件夾并授權
chown mysql.mysql /data/bin
2,對數據庫進(jìn)行完全備份
mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz
3,對數據庫進(jìn)行增刪改
mysql -e "drop table hellodb.students" mysql -e "insert hellodb.teachers value (5,'wangqi',50,'M')"
4,停止服務(wù)
systemctl stop mariadb.service
5,刪除數據庫
rm -rf /var/lib/mysql/*
6,解壓備份文件
unxz /data/all.sql.xz
7,查看備份文件,查找二進(jìn)制節點(diǎn)
vim /data/all.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=521902;
8,導出二進(jìn)制日志節點(diǎn)數據
mysqlbinlog --start-position=521902 /data/bin/mysql-bin.000004 >/data/inc.sql
9,刪除二進(jìn)制日志節點(diǎn)數據中誤操作的命令
vim /data/inc.sql DROP TABLE `hellodb`.`students` /* generated by server */
10,啟動(dòng)服務(wù)
systemctl start mariadb.service
11.關(guān)閉二進(jìn)制日志記錄
mysql -e "SET sql_log_bin=off"
12,導入備份數據
mysql </data/all.sql mysql </data/inc.sql
13,驗證完成。
主從復制
# 主
1,主服務(wù)器啟用二進(jìn)制日志,并更改二進(jìn)制目錄
vim /etc/my.cnf log_bin=/data/bin/mysql-bin binlog-format=row server-id=1(主從服務(wù)器必需保證不同)
更改目錄見(jiàn)上面
2,重啟服務(wù)
service mysql restart
3,創(chuàng )建一個(gè)賬戶(hù)用來(lái)復制數據的賬戶(hù)
mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"
4,查看主服務(wù)器正在使用的二進(jìn)制日志
show master logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 14383 | +------------------+-----------+ 1 row in set (0.00 sec)
# 從服務(wù)器
5,更配置
vim /etc/my.cnf server-id=2 read-only #log-bin=/data/bin/mysql-bin
6,啟動(dòng)服務(wù)
service mysql restart
7,關(guān)聯(lián)主服務(wù)
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,查看從服務(wù)器狀態(tài)
show slave status\G;
9,啟動(dòng)線(xiàn)程
start slave;
#測試
10,增刪改主服務(wù)器數據,查看從服務(wù)器數據是否同步。
主從復制出錯的解決-sql_slave_skip_counter
#master服務(wù) ip=172.22.7.70
1,主服務(wù)器啟用二進(jìn)制日志,并更改二進(jìn)制目錄
vim /etc/my.cnf log_bin=/data/bin/mysql-bin binlog-format=row server-id=1(主從服務(wù)器必需保證不同)
更改目錄見(jiàn)上面
2,重啟服務(wù)
service mysql restart
3,創(chuàng )建一個(gè)賬戶(hù)用來(lái)復制數據的賬戶(hù)
mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"
4,查看主服務(wù)器正在使用的二進(jìn)制日志
mysql -e 'show master logs;' +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 264 | | mysql-bin.000002 | 245 | +------------------+-----------+
#slave服務(wù) ip=172.22.7.71
5,修改配置文件,啟動(dòng)服務(wù)
vim /etc/my.cnf [mysqld] server-id = 2 read-only systemctl start mariadb
#配置錯誤master服務(wù)信息
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 狀態(tài)
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,啟動(dòng)復制線(xiàn)程
mysql -e 'start slave'
9,再次查看slave狀態(tài)
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服務(wù)增刪改數據
11,查看slave服務(wù)是否同步,失??!
#解決錯誤
12,停止并重置slave復制線(xiàn)程服務(wù)
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狀態(tài)
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,發(fā)現slave狀態(tài)中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服務(wù)數據是否同步
17,同步完成。
Mysql 級聯(lián)復制
在生產(chǎn)換進(jìn)中有一種主從復制的方法主節點(diǎn)先將數據同步到一個(gè)中間的從節點(diǎn),然后由從節點(diǎn)給后續的其他從節點(diǎn)來(lái)復制數據,這種復制方式稱(chēng)為級聯(lián)復制。
級聯(lián)復制的好處是可以極大的減輕主節點(diǎn)的壓力
級聯(lián)復制在配置時(shí)需要在中間節點(diǎn)上啟用log_slave_updates的選項。
#環(huán)境 服務(wù)器 master slave slave 系統 centos7 centos7 centos7 ip 172.22.7.70 172.22.7.70 172.22.7.71
#mater
1,主服務(wù)器啟用二進(jìn)制日志,并更改二進(jìn)制目錄
vim /etc/my.cnf log_bin=/data/bin/mysql-bin binlog-format=row server-id=1(主從服務(wù)器必需保證不同)
更改目錄見(jiàn)上面
2,重啟服務(wù)
service mysql restart
3,創(chuàng )建一個(gè)賬戶(hù)用來(lái)復制數據的賬戶(hù)
mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"
4,查看主服務(wù)器正在使用的二進(jìn)制日志
mysql -e 'show master logs;' +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 264 | | mysql-bin.000002 | 7488 | | mysql-bin.000003 | 402 | +------------------+-----------+ #slave
5,修改配置文件,并創(chuàng )建二進(jìn)制日志目錄
vim /etc/my.cnf [mysqld] log-bin=/data/bin/mysql-bin binlog-format=row read-only log_slave_updates server-id=2
更改目錄見(jiàn)上
6,啟動(dòng)服務(wù)
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,啟動(dòng)slave線(xiàn)程
mysql -e 'start slave'
9,查看slave狀態(tài)
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上的數據拷貝過(guò)來(lái)
mysqldump -A --single-transaction -F --master-data=1 > /data/all.sql scp /data/all.sql 172.22.7.72:/data
12,slave創(chuàng )建一個(gè)賬戶(hù)用來(lái)復制數據的賬戶(hù)
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,啟動(dòng)服務(wù)
systemctl start mariadb
15,查看slave服務(wù)器的二進(jìn)制日志
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,打開(kāi)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,啟動(dòng)線(xiàn)程
mysql -e "START SLAVE;"
19,查看slave狀態(tài)
mysql -e "show slave status\G;"
20,對master對象增刪改操作,查看是否同步
21,同步完成。
MySQL半同步
異步復制是當用戶(hù)寫(xiě)入一條記錄時(shí),先將數據寫(xiě)入到主節點(diǎn),然后回復用戶(hù)一個(gè)寫(xiě)入成功的消息,然后慢慢的將數據復制到其背后的其他從節點(diǎn),這樣的好處是效率比較高,但是缺點(diǎn)也是非常明顯,主服務(wù)器和從服務(wù)器的延遲過(guò)大并且主服務(wù)器突然發(fā)生異常,此時(shí)就會(huì )造成數據的丟失。
同步復制是當用戶(hù)寫(xiě)入一條記錄時(shí),主節點(diǎn)將數據寫(xiě)入數據庫,然后將數據復制給其后面的其他從節點(diǎn),當所有的從節點(diǎn)返回數據復制成功后,主節點(diǎn)再回復用戶(hù)數據接入成功的消息,這樣做的好處是,確保了數據的安全性,但損失了效率。
半同步復制是間于同步復制和異步復制之間的一種復制方法,他的工作原理是:當用戶(hù)執行寫(xiě)操作時(shí),主節點(diǎn)會(huì )將數據發(fā)送給其后面的其他從節點(diǎn),只要有一個(gè)從節點(diǎn)返回復制成功的消息,主節點(diǎn)就直接返回寫(xiě)入成功,如果主節點(diǎn)背后的從節點(diǎn)遲遲不返回復制成功消息,此時(shí)就會(huì )有一個(gè)超時(shí)時(shí)長(cháng),一旦達到超時(shí)時(shí)長(cháng),主節點(diǎn)就先返回消息告訴用戶(hù)復制成功,而后將數據繼續給從節點(diǎn)復制。
#配置主從復制 步驟見(jiàn)上。
#配置半同步
##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,重啟服務(wù),
systemctl restart mariadb
3,查看插件是否啟動(dòng)
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,設置超時(shí)時(shí)長(cháng)
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,重啟服務(wù),
systemctl restart mariadb
7,查看插件是否啟動(dòng)
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,啟動(dòng)復制線(xiàn)程
mysql -e "START SLAVE";
9,測試檢查
10,同步完成
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站