前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >因修改 MySQL 复制账号密码导致主从复制中断

因修改 MySQL 复制账号密码导致主从复制中断

作者头像
JiekeXu之路
发布2023-10-25 10:14:08
1790
发布2023-10-25 10:14:08
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看因修改 MySQL 复制账号密码导致主从复制异常,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!

书接上回,通过Linux 环境搭建 MySQL8.0.28 主从同步环境,在同一台机器上通过不同的端口来区分实例,搭建 MySQL 三节点的一主两从架构的测试环境。由于搭建环境时的用户密码过于简单,安全扫描出来弱口令,需要整改,则当时就使用如下命令修改了 root 和 rep 用户的密码。

代码语言:javascript
复制
代码语言:javascript
复制
alter user root@'%' identified by 'MySQL8.0';
alter user rep@'%' identified by 'MySQL8.0';
select User,Host,plugin ,max_user_connections,max_connections 
from mysql.user;
代码语言:javascript
复制

修改完密码后,MySQL 实例一直没有重启,复制也是正常的,直到这个月初的机房断电主机关机,MySQL 实例重新启动后,主从复制出现了中断。

代码语言:javascript
复制
代码语言:javascript
复制
--分别启动三个 MySQL 实例
nohup mysqld_safe --defaults-file=/mysql/conf/my3306.cnf --user=mysql &
nohup mysqld_safe --defaults-file=/mysql/conf/my3307.cnf --user=mysql &
nohup mysqld_safe --defaults-file=/mysql/conf/my3308.cnf --user=mysql &
代码语言:javascript
复制

发现问题

登录到从节点查看从库复制状态,发现“MY-001045”错误。

代码语言:javascript
复制
mysql -h192.168.77.86 -uroot -pMySQL8.0  -P 3308 -S /mysql/data/mysql3308/socket/mysql3308.sock

show slave status\G
show replica status\G
代码语言:javascript
复制

查看实例 3308 端口的 log 如下,rep 复制用户无法连接到主节点。这时候才想起来之前修改过 root 和 rep 复制用户的密码,修改复制用户的密码导致主从复制中断,从节点无法连接到主库。从库 IO 线程状态为 “Replica_IO_Running: Connecting”。

代码语言:javascript
复制
代码语言:javascript
复制
2023-10-13T14:51:57.414780+08:00 5 [ERROR] [MY-010584] [Repl] Slave I/O for channel '': error connecting to master 'rep@192.168.77.86:3306' - retry-time: 60 retries: 13 message: Access denied for user 'rep'@'192.168.77.86' (using password: YES), Error_code: MY-001045
代码语言:javascript
复制
解决问题

登录到从节点,停止复制,使用 change master to 命令修改复制用户密码。其他从节点依法炮制。

stop replica;change master to master_password='MySQL8.0';start replica;show replica status\G

代码语言:javascript
复制

注意:“change master to”命令也即将过期,从 MySQL 8.0.23 开始是“CHANGE REPLICATION SOURCE TO”。“master_password” 命令也被 “SOURCE_PASSWORD” 所替代。

代码语言:javascript
复制
--附录:CHANGE REPLICATION SOURCE TO 完整命令

代码语言:javascript
复制
CHANGE REPLICATION SOURCE TO option [, option] ... [ channel_option ]

option: {
    SOURCE_BIND = 'interface_name'
  | SOURCE_HOST = 'host_name'
  | SOURCE_USER = 'user_name'
  | SOURCE_PASSWORD = 'password'
  | SOURCE_PORT = port_num
  | PRIVILEGE_CHECKS_USER = {NULL | 'account'}
  | REQUIRE_ROW_FORMAT = {0|1}
  | REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF | GENERATE}
  | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}
  | SOURCE_LOG_FILE = 'source_log_name'
  | SOURCE_LOG_POS = source_log_pos
  | SOURCE_AUTO_POSITION = {0|1}
  | RELAY_LOG_FILE = 'relay_log_name'
  | RELAY_LOG_POS = relay_log_pos
  | SOURCE_HEARTBEAT_PERIOD = interval
  | SOURCE_CONNECT_RETRY = interval
  | SOURCE_RETRY_COUNT = count
  | SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
  | SOURCE_DELAY = interval
  | SOURCE_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'
  | SOURCE_ZSTD_COMPRESSION_LEVEL = level
  | SOURCE_SSL = {0|1}
  | SOURCE_SSL_CA = 'ca_file_name'
  | SOURCE_SSL_CAPATH = 'ca_directory_name'
  | SOURCE_SSL_CERT = 'cert_file_name'
  | SOURCE_SSL_CRL = 'crl_file_name'
  | SOURCE_SSL_CRLPATH = 'crl_directory_name'
  | SOURCE_SSL_KEY = 'key_file_name'
  | SOURCE_SSL_CIPHER = 'cipher_list'
  | SOURCE_SSL_VERIFY_SERVER_CERT = {0|1}
  | SOURCE_TLS_VERSION = 'protocol_list'
  | SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list'
  | SOURCE_PUBLIC_KEY_PATH = 'key_file_name'
  | GET_SOURCE_PUBLIC_KEY = {0|1}
  | NETWORK_NAMESPACE = 'namespace'
  | IGNORE_SERVER_IDS = (server_id_list),
  | GTID_ONLY = {0|1}
}

channel_option:
    FOR CHANNEL channel

server_id_list:
    [server_id [, server_id] ... ]

参考链接

代码语言:javascript
复制
https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html

https://dev.mysql.com/doc/refman/8.1/en/change-replication-source-to.html
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 发现问题
  • 参考链接
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档