当前位置: 首页 > news >正文

华安网站建设物联网平台设计

华安网站建设,物联网平台设计,哈尔滨市土地局,网页修改和编辑的软件有哪些作者通过一个主从复制过程中 1590 的错误#xff0c;说明了 MySQL 8.0 在创建用户授权过程中的注意事项。 作者#xff1a;王祥 爱可生 DBA 团队成员#xff0c;主要负责 MySQL 故障处理和性能优化。对技术执着#xff0c;为客户负责。 本文来源#xff1a;原创投稿 爱可生…作者通过一个主从复制过程中 1590 的错误说明了 MySQL 8.0 在创建用户授权过程中的注意事项。 作者王祥 爱可生 DBA 团队成员主要负责 MySQL 故障处理和性能优化。对技术执着为客户负责。 本文来源原创投稿 爱可生开源社区出品原创内容未经授权不得随意使用转载请联系小编并注明来源。 故障描述 DMP 收到告警从库的 SQL 线程停止工作MySQL 版本为 5.7.32登录到从库查看复制信息报错如下 mysql show slave status\G *************************** 1. row ***************************Slave_IO_State: Waiting for master to send event……Last_Errno: 1590Last_Error: The incident LOST_EVENTS occured on the master. Message: REVOKE/GRANT failed while granting/revoking privileges in databases.Skip_Counter: 0Exec_Master_Log_Pos: 12531Relay_Log_Space: 69304Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 1590Last_SQL_Error: The incident LOST_EVENTS occured on the master. Message: REVOKE/GRANT failed while granting/revoking privileges in databases. …… 从库错误日志信息如下 [ERROR] Slave SQL for channel : The incident LOST_EVENTS occured on the master. Message: REVOKE/GRANT failed while granting/revoking privileges in databases. Error_code: 1590[ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with SLAVE START. We stopped at log mysql-bin.000003 position 12531. 解析对应 Binlog 信息如下 # Incident: LOST_EVENTS RELOAD DATABASE; # Shall generate syntax error 主库错误信息如下 [ERROR] REVOKE/GRANT failed while granting/revoking privileges in databases. An incident event has been written to the binary log which will stop the slaves. 客户反馈执行了一些授权操作然后复制就出现报错执行的语句如下 mysql create user test%,app% identified by Root123; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements mysql grant all on test.* to test%,app%; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 故障分析 根据以上报错信息可知在做权限变更时发生了错误主库在 binlog 里写一条 INCIDENT_EVENT备库在解析到 INCIDENT_EVENT 就直接报错。 那在什么情况下执行授权语句会导致主库在 binlog 写 INCIDENT_EVENT 呢 当权限变更操作只处理了一部分并发生错误时主库会在 binlog 里写一条 INCIDENT_EVENT。 那什么情况下会发生权限变更只处理一部分而有一部分没处理完呢 下面举例说明两种相关场景。 MySQL 5.7 的问题 在 MySQL 5.7 里使用 GRANT 语句新建用户其中有部分权限有问题。 使用 GRANT 创建 test 用户MySQL 8.0 版本已经不支持使用 GRANT 创建用户 mysql grant select,insert,file on test.* to test% identified by Q1w2e3E$; ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES mysql select user,host from mysql.user where usertest and host%; -------------- | user | host | -------------- | test | % | -------------- 1 row in set (0.00 sec)mysql show grants for test%; -------------------------------------------- | Grants for test% | -------------------------------------------- | GRANT USAGE ON *.* TO test% | --------------------------------------------- 1 row in set (0.00 sec) 在创建用户时对 test 库授予 SELECT、INSERT、FILE 权限因 FILE 权限不能授予某个数据库而导致语句执行失败。但最终结果是test% 创建成功授权部分失败。从上面的测试可知使用 GRANT 创建用户其实是分为两个步骤创建用户和授权。权限有问题并不影响用户的创建上述语句会导致主库在 binlog 写 INCIDENT_EVENT从而导致主从复制报错。 GRANT 对两个用户同时授权 使用一条 GRANT 语句同时给 test10.186.63.5 与 test10.186.63.29 用户授权其中 test10.186.63.5 用户存在而 test10.186.63.29 不存在。 mysql create user test10.186.63.5 identified by 123; Query OK, 0 rows affected (0.00 sec)mysql grant all on test.* to test10.186.63.5,test10.186.63.29; ERROR 1133 (42000): Cant find any matching row in the user table mysql show grants for test10.186.63.5; ---------------------------------------------------------- | Grants for test10.186.63.5 | ---------------------------------------------------------- | GRANT USAGE ON *.* TO test10.186.63.5 | | GRANT ALL PRIVILEGES ON test.* TO test10.186.63.5 | ---------------------------------------------------------- 2 rows in set (0.00 sec) 根据上面的实验可知test10.186.63.5 用户存在故授权成功而 test10.186.63.29 用户不存在授权失败。上述语句也会导致主库在 binlog 写 INCIDENT_EVENT从而导致主从复制报错。 但以上两种情况似乎都不符合客户执行语句情况从报错来看是因为密码复杂度不够而导致创建用户失败了那到底是什么原因导致从库出现 1590 错误呢下面我们来看看在使用了密码复杂度插件后使用create语句同时创建两个用户会有什么问题。 mysql show global variables like %validate%; ---------------------------------------------- | Variable_name | Value | ---------------------------------------------- | query_cache_wlock_invalidate | OFF | | validate_password_check_user_name | OFF | | validate_password_dictionary_file | | | validate_password_length | 8 | | validate_password_mixed_case_count | 1 | | validate_password_number_count | 1 | | validate_password_policy | MEDIUM | | validate_password_special_char_count | 1 | ----------------------------------------------mysql select user,host from mysql.user; -------------------------- | user | host | -------------------------- | universe_op | % | | root | 127.0.0.1 | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | -------------------------- 5 rows in set (0.00 sec)mysql create user test%,app% identified by Root123; ERROR 1819 (HY000): Your password does not satisfy the current policy requirementsmysql select user,host from mysql.user;app%创建成功test%创建失败 -------------------------- | user | host | -------------------------- | app | % | | universe_op | % | | root | 127.0.0.1 | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | -------------------------- 6 rows in set (0.00 sec) 上述测试使用 CREATE USER 同时创建 test%、app%。但因为密码复杂度不合符要求而失败报错多次测试发现并不是密码复杂度不够只要同时创建两个用户都会报密码复杂度不符合要求。在未使用密码复杂度插件时是可以同时创建两个用户正常的话这两个用户应该都会创建失败。但实际上 app% 用户创建成功了。 到这里我们就明白文章开始描述故障的触发原因数据库实例开启了密码复杂度插件使用 CREATE USER 同时创建两个用户因为密码复杂度不符合要求而报错但 app% 是已经创建了 test% 用户未创建紧接着又执行了 GRANT 语句给两个用户同时授权此时因为 test% 用户不存在而导致 GRANT 语句部分执行的问题最终导致了主从复制报错。 故障解决 当主从复制出现 1590 报错时可以先解析 binlog找到 INCIDENT_EVENT搜索关键字 LOST_EVENTS和对应的 GTID然后通过跳过这个 GTID 的方式来恢复主从复制。在跳过 GTID 之前还需要先将数据补全因为主库有一个用户是已经授权成功从库这部分授权是没有执行的。具体操作如下在从库执行 mysqlset global super_read_only0; mysqlset sql_log_bin0; mysqlgrant all on test.* to test10.186.63.5; 跳过报错对应的 GTID具体操作如下 解析 binlog 找到 INCIDENT_EVENT。 mysqlbinlog --no-defaults -vv --base64-outputdecode-rows mysql-bin.000016 /root/bin.log 跳过 LOST_EVENTS 对应的 GTID在从库执行 stop slave sql_thread; set gtid_next9d2e7089-2774-11ee-99d6-02000aba3f05:4198564; begin;commit; set gtid_nextautomatic; start slave sql_thread; 总结 权限变更操作只处理了一部分并发生错误时会导致 binlog 写一条 INCIDENT_EVENT从而导致主从复制报错。在使用密码复杂度插件时使用 CREATE 语句同时创建两个用户会出现一个用户创建成功另外一个用户创建失败的情况。 建议 使用了密码复杂度插件创建用户时一条 CREATE 语句只创建一个用户。授权时一条 GRANT 语句只对一个用户授权防止因权限错误导致部分授权成功的问题。 更多技术文章请访问https://opensource.actionsky.com/ 关于 SQLE 爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者支持多场景审核支持标准化上线流程原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。 SQLE 获取 类型地址版本库https://github.com/actiontech/sqle文档https://actiontech.github.io/sqle-docs/发布信息https://github.com/actiontech/sqle/releases数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
http://www.pierceye.com/news/860701/

相关文章:

  • 佛山找人做网站国家建设免费论文网站
  • 网站内容建设ppt网站建设header
  • 图书馆网站建设费用青海省住房建设厅网站
  • 重庆网站供奉战犯wordpress 关键字链接
  • 给个2021站你们懂得不花钱的深圳手机网站建设
  • 织梦图片自适应网站源码php企业网站源码推荐
  • 网站建网站建设网页微信头像logo在线制作
  • 微网站模板怎么做买了域名如何做网站
  • 新华美玉官方网站在线做维护一个网站要多少钱
  • 网站内容由什么组成部分网页网站设计价格
  • wordpress方框里面打勾两个域名同一个网站做优化
  • 个人怎么做公司网站闲置电脑做网站服务器
  • 有没有什么 网站能够做试卷wordpress写 a href
  • 西安 北郊网站建设网站上传图片加水印
  • 沈阳网站制作哪家好包头爱出行app最新版本
  • 怎么用IP做网站地址网站如何投放广告
  • 试述电子商务网站的建设流程太原建站的模板
  • 微信群投票网站怎么做的企业门户网站怎么做
  • 建网站平台 优帮云嘉兴营销型网站
  • 建筑类专业做教育的网站ui设计app
  • 郑州做营销型网站的公司什么叫社交电商平台
  • 外国做问卷可以赚钱的网站做中国菜的外国网站
  • 青岛市建设厅网站快递网站建设
  • 昆明网站WordPress文章怎么折叠
  • 拖拽建站系统源码企业主题展厅设计公司
  • asp.net网站的数据库配置张家港网站 设计制作
  • 聊城手机网站建设多少钱扬州网站建设哪个好薇
  • 云南安宁做网站的公司手机网页制作软件中文版
  • 如何做征信公司网站做谷歌推广一定要网站吗
  • 重庆市做网站的公司有哪些苏州网站建设设计公司