MySQL基于gtid同步,新增slave節(jié)點(diǎn)
環(huán)境說明:當(dāng)前MySQL集群為一主一從, 新增加 Slave 節(jié)點(diǎn),將架構(gòu)變更為一主兩從,集群已經(jīng)運(yùn)行了很長(zhǎng)時(shí)間,主節(jié)點(diǎn)得binlog早就被purged,啟動(dòng)slave得時(shí)候會(huì)報(bào)錯(cuò),1236、1062等
操作步驟:備份master數(shù)據(jù),從節(jié)點(diǎn)reset master,導(dǎo)入數(shù)據(jù)
1.備份主節(jié)點(diǎn)數(shù)據(jù):在進(jìn)行任何操作之前,首先需要對(duì)主節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行備份,以確保數(shù)據(jù)的安全性。這可以通過使用mysqldump工具或其他備份方法來完成。
2.從節(jié)點(diǎn)重置:在新增的Slave節(jié)點(diǎn)上執(zhí)行reset master命令,這將清除該節(jié)點(diǎn)上現(xiàn)有的復(fù)制信息,包括已經(jīng)purged的binlog日志。這一步是必要的,因?yàn)榕f的復(fù)制信息可能導(dǎo)致復(fù)制過程中的錯(cuò)誤。
3.導(dǎo)入數(shù)據(jù):將備份的數(shù)據(jù)導(dǎo)入到新增的Slave節(jié)點(diǎn)中。這一步驟確保Slave節(jié)點(diǎn)擁有主節(jié)點(diǎn)的完整數(shù)據(jù)副本。
master確認(rèn)用戶信息:
master> select user,host,plugin from mysql.user;

master> show grants for 'root'@'localhost';

使用 mysqldump 創(chuàng)建一個(gè)新的備份,并確保包含 GTID 信息
mysqldump -u root -p --all-databases --master-data --single-transaction --routines --triggers --events >full.sql
新增slave節(jié)點(diǎn)操作:
slave> stop slave; slave> reset master; slave> reset slave; slave> source full.sql; 配置change master slave> change master to master_host='主節(jié)點(diǎn)IP',master_port=3306,master_user='repl',master_password='密碼',master_auto_position=1; 啟動(dòng)slave slave> start slave; slave> show slave status\G;

主從數(shù)據(jù)同步測(cè)試:
1.主節(jié)點(diǎn)隨便創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),查看從節(jié)點(diǎn)是否同步
master> create database test111;
從節(jié)點(diǎn)查看:
slave> show databases;
2.賬號(hào)密碼登錄驗(yàn)證:
在從庫(kù)節(jié)點(diǎn)上使用master的賬號(hào)密碼登錄

使用原先slave節(jié)點(diǎn)root賬號(hào)密碼登錄成功
slave> alter user root@'%' identified by '密碼'; slave> flush privileges; 退出重新使用新密碼登錄OK
過程遇到得問題處理:
1.主庫(kù)執(zhí)行alter user后從庫(kù)報(bào)錯(cuò)1396

master> alter user sys@'%' identified by '密碼';
從節(jié)點(diǎn)查看主從同步情況:
slave> show slave status\G;

1396報(bào)錯(cuò)處理:
slave> select * from performance_schema.replication_applier_status_by_worker where LAST_ERROR_NUMBER=1396\G; *************************** 1. row *************************** CHANNEL_NAME: WORKER_ID: 1 THREAD_ID: NULL SERVICE_STATE: OFF LAST_SEEN_TRANSACTION: f94464fc-3e89-11ef-bb05-fa163e40e770:10092821 LAST_ERROR_NUMBER: 1396 LAST_ERROR_MESSAGE: Worker 1 failed executing transaction 'f94464fc-3e89-11ef-bb05-fa163e40e770:10092821' at master log mysql-bin.000031, end_log_pos 358006489; Error 'Operation ALTER USER failed for 'sys'@'%'' on query. Default database: ''. Query: 'ALTER USER 'sys'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*83B9BAAFABA1C2C8E47E266271D05FFB8F30CEF8'' LAST_ERROR_TIMESTAMP: 2024-10-21 17:11:49 1 row in set (0.00 sec) ERROR: No query specified

slave> stop slave slave> set @@session.gtid_next='f94464fc-3e89-11ef-bb05-fa163e40e770:10092821'; slave> begin; Query OK, 0 rows affected (0.00 sec) slave> commit; Query OK, 0 rows affected (0.00 sec) slave> set @@session.gtid_next=automatic; Query OK, 0 rows affected (0.00 sec) slave> start slave; Query OK, 0 rows affected (0.22 sec)
重新查看slave同步狀態(tài)恢復(fù)正常
slave> show slave status\G;

刪除sys用戶重新創(chuàng)建
slave> drop user sys@'%';
slave> create user 'sys'@'%' identified by '密碼';
grant 授權(quán)
slave重新登錄提示成功
2. grant授權(quán)得時(shí)候1045錯(cuò)誤(之前得root@localhost用戶被刪除了,重新創(chuàng)建了一個(gè)root@localhost用戶并授權(quán))

檢查MySQL服務(wù)器上各個(gè)用戶的權(quán)限設(shè)置
select user,host,Grant_priv,Super_priv from mysql.user;

Grant_priv列用于指示用戶是否具有授權(quán)權(quán)限
update mysql.user set Grant_priv='Y' where User='root';

查看root@localhost用戶權(quán)限
show grants for root@localhost;

授權(quán)root@localhost用戶權(quán)限
grant all on *.* to 'root'@'localhost';

查詢r(jià)oot@localhost用戶的權(quán)限和配置
select * from mysql.user where user='root' and host='localhost'\G;

當(dāng)前登錄用戶為'root'@'%',修改'root'@'%'用戶密碼再授權(quán)
alter user 'root'@'%' identified by '密碼'; flush privileges;
退出重新登錄'root'@'%'用戶為root@localhost用戶授權(quán)成功


浙公網(wǎng)安備 33010602011771號(hào)