MySQL基于gtid同步,新增slave节点

环境说明:当前MySQL集群为一主一从, 新增加 Slave 节点,将架构变更为一主两从,集群已经运行了很长时间,主节点得binlog早就被purged,启动slave得时候会报错,1236、1062等

操作步骤:备份master数据,从节点reset master,导入数据

1.备份主节点数据:在进行任何操作之前,首先需要对主节点的数据进行备份,以确保数据的安全性。这可以通过使用mysqldump工具或其他备份方法来完成。

2.从节点重置:在新增的Slave节点上执行reset master命令,这将清除该节点上现有的复制信息,包括已经purged的binlog日志。这一步是必要的,因为旧的复制信息可能导致复制过程中的错误。

3.导入数据:将备份的数据导入到新增的Slave节点中。这一步骤确保Slave节点拥有主节点的完整数据副本。

master确认用户信息:

master> select user,host,plugin from mysql.user;

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

备份master数据

mysqldump -uroot -p --all-databases --single-transaction --triggers --routines --events >full.sql

 

新增slave节点操作:

slave> stop slave;
slave> reset master;
slave> reset slave;
slave> source full.sql;

配置change master
slave> change master to master_host='主节点IP',master_port=3306,master_user='repl',master_password='密码',master_auto_position=1;

启动slave
slave> start slave;
slave> show slave status\G;

主从数据同步测试:

1.主节点随便创建一个数据库,查看从节点是否同步

master> create database test111;

从节点查看:

slave> show databases;

2.账号密码登录验证:

在从库节点上使用master的账号密码登录

使用原先slave节点root账号密码登录成功

slave> alter user root@'%' identified by '密码';

slave> flush privileges;

退出重新使用新密码登录OK

 

过程遇到得问题处理:

1.主库执行alter user后从库报错1396

master> alter user sys@'%' identified by '密码';

从节点查看主从同步情况:

slave> show slave status\G;

1396报错处理:

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同步状态恢复正常

slave> show slave status\G;

 

删除sys用户重新创建

slave> drop user sys@'%';

slave> create user 'sys'@'%' identified by '密码';

grant 授权

slave重新登录提示成功

2. grant授权得时候1045错误(之前得root@localhost用户被删除了,重新创建了一个root@localhost用户并授权)

检查MySQL服务器上各个用户的权限设置

select user,host,Grant_priv,Super_priv from mysql.user;

Grant_priv列用于指示用户是否具有授权权限

update mysql.user set Grant_priv='Y' where User='root';

查看root@localhost用户权限

show grants for root@localhost;

授权root@localhost用户权限

grant all on *.* to 'root'@'localhost';

查询root@localhost用户的权限和配置

select * from mysql.user where user='root' and host='localhost'\G;

当前登录用户为'root'@'%',修改'root'@'%'用户密码再授权

alter user 'root'@'%' identified by '密码';

flush privileges;

退出重新登录'root'@'%'用户为root@localhost用户授权成功

 

posted @ 2024-10-22 16:37  太阳的阳ฅ  阅读(35)  评论(0编辑  收藏  举报