MySQL控制用户输错密码尝试次数

一、生产环境MySQL死锁如何监控及如何减少死锁发生的概率

首先,死锁并不是"锁死",死锁是由于两个或两个以上会话锁等待产生回路造成。

(一)死锁监控及处理方法

对于死锁的监控,各个版本都提供了innodb_print_all_deadlocks选项,打开该选项即会将死锁的日志输出到MySQL的错误日志当中,因此可以通过监控错误日志来达到监控死锁的目的。而对于MariaDB就更加简单了,MariaDB提供了Innodb_deadlocks的计数器,可以通过监控该计数器的增长来监控是否存在发生死锁。
假如线上出现死锁并且频率较高的话,务必要引起重视。由于死锁日志仅记录了最后引起死锁的两条SQL,因此并不能通过死锁日志立即定位
出死锁的原因,应当及时协同开发模拟出死锁过程,分析死锁产生原因,修改程序逻辑。

(二)如何降低死锁发生的概率

1、尽量使用短小事务,避免大事务
2、加FOR UPDATE/LOCK IN SHARE MODE锁时,最好降低事务隔离级别,例如用RC级别,降低死锁发生概率,也可以降低锁定粒度
3、事务中涉及多个表,或者涉及多行记录时,每个事务的操作顺序都要保持一致
4、通过索引优化SQL效率,降低死锁概率,避免全表扫描导致锁定所有数据
5、程序中应有事务失败检测及自动重复提交机制
6、高并发(秒杀)场景中,关闭innodb_deadlock_detect选项,降低死锁检测开销,提高并发效率

二、MongoDB有哪些优秀特性及适合的场景是什么

(一)优秀特性

1、实用性:面向类json富文档数据模型,对开发人员天然的友好
2、可用性:基于raft协议的自动高可用,轻松提供99.999%的可用性
3、扩展性:对分片集群的支持,为业务提供了友好的水平扩展
4、高性能:嵌套模型设计支持,减少了离散写,充分的物理内存利用率,避免了磁盘读
5、强压缩:WiredTiger引擎提供多种数据压缩策略,2~7倍的压缩比,大大节省了磁盘资源

(二)适合的场景

1、无多文档事务及多表关联查询需求
2、业务快速迭代,需求频繁变动行业
3、单集群并发过大无法支撑业务增长
4、数据量增长预期TB及以上存储需求
5、期望要求99.999%数据库高可用场景

三、GO语言对比其他的编程语言有何优势?实际生产环境如何取舍?

1、天生支持高并发,强一致语言,开发效率高兼具线上运行稳定安全
2、垃圾回收,不用关心内存分配与回收
3、强大的GMP模型,异步处理,支持高并发,小白也能轻松写出高并发代码

在实际生产环境中建议从如下几个方面考虑:

1、看业务场景,电商,大数据处理有现成的解决方案,不适合用。另外数学运算,cpu 密集型的也不用。
2、GO 擅长快速出业务原型,迭代开发效率高,初创公司强推
3、看公司开发的技术栈,如果差异较大,那么选用 GO的话上手更快,编程风格也能统一起来

四、一个大事务,有很多更新,现在被回滚了,但是又着急关机重启,怎么办才好?

1、首先,尽量避免在MySQL中执行大事务,因为大事务将会带来主从复制延迟等问题
2、大事务被kill,MySQL会自动进行回滚操作,通过show engine innodb status的TRANSACTIONS可以看到ROLLING BACK的事务,并且在回滚操作的时候仍然会持有相应的行锁
3、此时如果强行关闭MySQL,等到MySQL再次启动后,仍然会进行回滚动作
4、因此,为确保数据安全,建议还是耐心等待回滚完成以后再进行关机重启。关机重启前,可以调低innodb_max_dirty_pages_pct让脏页尽量刷新完毕,并且关闭innodb_fast_shutdown
5、假如实在没有办法需要关机的情况下,可以kill -9先关闭MySQL,前提是需要设置双一保证事务安全,否则可能丢更多事务数据。然后重启实例后innodb会自行crash recovery回滚之前的事务

PS, kill -9是高危操作,可能导致MySQL无法启动等不可预知的问题,请谨慎使用

五、如何降低UPDATE/DELETE时WHERE条件写错,或者压根没写WHERE条件带来的影响

1、尽量不要在线手工执行任何SQL命令,很容易出差错。线上直接执行SQL命令最好有第二检查人帮助确认
2、最好在测试环境执行SQL确认无误后,再到生产环境执行,或者提前在本地文本环境编辑好确认后再执行
3、建议打开sql_safe_updates选项,禁止没有WHERE条件或者不加LIMIT或者没有使用索引条件的UPDATE/DELETE命令被执行。也可以在用mysql客户端连接到服务器端时增加--safe-updates选项,例如:mysql --safe-updates -h xx -u xx
4、线上手动执行DML操作时,先开启事务模式,万一误操作可以回滚。例如:mysql> begin; update xxx; rollback;
5、通过DB管理平台执行DML操作,且在平台上增加对此类危险SQL的判断,直接拒绝危险SQL的执行
6、配置延迟从库,发现误删除数据后,从延迟从库快速恢复数据

六、MySQL如何控制用户输错密码尝试次数?

(一)插件辅助

从官方MySQL5.7.17开始,提供了CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS插件,该插件又提供了connection_control_failed_connections_threshold、connection_control_min_connection_delay、connection_control_max_connection_delay三个参数

1、connection_control_failed_connections_threshold

该参数的含义是控制登陆失败多少次数后开启延迟登陆

2、connectioncontrolminconnectiondelay

该参数分别表示超过失败次数后每次重新连接最小的延迟时间,延迟计算公式为(当前失败总次数-失败阈
值)connectioncontrolminconnection_delay,因此错误尝试次数越多那么延迟时间也是越大

3、connection_control_max_connection_delay

最大延迟时间,超过该值后客户端可重新连接

4、安装插件后,可通过监控Connection_control_delay_generated状态值和INFORMATION_SCHEMA下的表

CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS来监控错误登录尝试次数

(二)错误日志监控

通过定时扫描MySQL错误日志来捕获账号密码错误次数,达到某个阈值以后可在系统防火墙屏蔽对应的主机ip达到屏蔽账号的目的(具体操作视情况而定)
如:错误日志会显示2019-05-10T13:04:41.232259Z 5 [Note] Access denied for user 'xucl'@'127.0.0.1' (using password: YES)

(三)其他说明

1、有些同学会误以为max_connection_errors能够控制错误密码的尝试次数,其实该参数只能防止如telnet类的端口探测,即记录协议握手错误的次数

2、最后,在生产环境一定要关注aborted_clients和aborted_connects的状态,发生异常必须及时关注

总结

以上所述是小编给大家介绍的MySQL控制用户输错密码尝试次数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Ubuntu 18.04 安装MySQL时未提示输入密码的问题及解决方法

    Ubuntu 1804 安装MySQL 5.7为例给大家介绍的很详细. 执行命令安装MySQL sudo apt install mysql-server sudo apt install mysql-client 安装后看下是否启动: sudo ps aux | grep mysql 如果已经启动,执行完上述命令可看到相应的信息,如果没有启动,则可执行下面命令启动mysql: sudo service mysql start 另外,一会要用到重启mysql命令,重启和关闭mysql的命令分别是

  • MySQL安全输入密码的一些操作介绍

    当我们运行mysql客户端连接mysql服务器的时候,以一种暴露的可被其他用户发现的方式指定我们的密码是不妥的.我们输入密码的方式有四种,其中每一种都有一定风险.下面就分别说下这四种方式: MySQL密码输入的安全操作(翻译) 第一种:直接在命令行后使用  -pyour_pass 或者r --password=your_pass 这两种选项. 举例: shell> mysql -u ksharpdabu -pksharppassword db_name 这种方式很方便,但是不安全,因为在某些系统

  • MySQL数据库输入密码后闪退问题的解决方法

    MySQL数据库输入密码后闪退的问题及解决方案分享 1 案例说明 最近一直在用 MySQL 数据库演示基础功能,但是这两天忽然出现了一个问题,那就是:在启动 MySQL 服务端并输入密码后,出现闪退现象. 之后,在网上搜了搜,发现出现这种问题很常见,大多数原因可能是在咱们使用安全软件的时候,无意中关闭了 MySQL 服务.此外,如果 MySQL 服务已经启动了,但还是出现了闪退的现象,那就可能是 MySQL 的配置出现了问题. 2 解决方案 在出现上述问题的时候,咱们首先要查看 MySQL 服务

  • 解决mysql输入密码闪退的问题

    在开始本文之前,首先要保证你的mysql的密码是对的不然就要想起他的办法了.下面话不多说了,下面来一起看看吧. 一.首先进入cmd 切入MySQL的安装目录,然后切入 bin 目录 ,输入mysqld-nt --skip-grant-tables命令. 这个 cmd 窗口先不要关闭, 打开另一个窗口 登陆MySQL 或直接点开 MySQL Command Line Client 输入正确的密码, 就OK了! 二.在你的WINDOWS上,先按 [开始], 然后 [运行] ,输入 cmd 然后回车,

  • MySQL 客户端不输入用户名和密码直接连接数据库的2个方法

    有2个方法 一.可以修改my.ini 配置参数(linux下面是 my.cnf); [quote][client] port=3306 default-character-set=utf8 host=localhost user=root password=1[/quote] 具体的其他参数都可以在这里修改 二.可以修改环境变量 MYSQL_HOST 代表主机名 USER 为用户名 MYSQL_PWD 为密码 更多的参数请自行查看mysql的帮助文档,下面是英文的表格 Variable Desc

  • MySQL控制用户输错密码尝试次数

    一.生产环境MySQL死锁如何监控及如何减少死锁发生的概率 首先,死锁并不是"锁死",死锁是由于两个或两个以上会话锁等待产生回路造成. (一)死锁监控及处理方法 对于死锁的监控,各个版本都提供了innodb_print_all_deadlocks选项,打开该选项即会将死锁的日志输出到MySQL的错误日志当中,因此可以通过监控错误日志来达到监控死锁的目的.而对于MariaDB就更加简单了,MariaDB提供了Innodb_deadlocks的计数器,可以通过监控该计数器的增长来监控是否存

  • C#实现Check Password和锁定输错密码锁定账户功能

    银行卡大家都使用,在密码输错超过限制次数之后,就容易被锁死,智能到银行柜台才能解锁,那么这一功能如果实现的呢,今天小编通过实例代码给大家详细讲解,一起跟随小编看看吧. C#实现的Check Password,并根据输错密码的次数分情况锁定账户:如果输入错误3次,登录账户锁定5分钟并提示X点X分后重试登录.如果5分钟后再次输入,累计输入错误密码累计达到5次.则账户会被永久锁定,需联系系统管理员进行把数据库中的输入错误的次数(errorcount)进行清零解锁才能登陆.实现代码如下: public

  • C#实现密码验证与输错密码账户锁定

    C#实现的Check Password,并根据输错密码的次数分情况锁定账户:如果输入错误3次,登录账户锁定5分钟并提示X点X分后重试登录.如果5分钟后再次输入,累计输入错误密码累计达到5次.则账户会被永久锁定,需联系系统管理员进行把数据库中的输入错误的次数(errorcount)进行清零解锁才能登陆.实现代码如下: public class UserInfo1 { public string Error_count { get; set; } public string Error_time {

  • WordPress用户登录框密码的隐藏与部分显示技巧

    让WordPress登录页的密码框显示最后一个输入的字符 在通常情况下,网页的设计者们会将密码输入框中的所有字符隐藏成黑点,以防止有人在背后偷窥输入的密码,如: 这种密码输入模式虽然减少了被偷窥的危险,但是给我们的密码输入带来了很多麻烦,因为我们不知道到底输入了什么字符,所以经常导致输错密码的情况,浪费了很多时间. 可能你也已经注意到,现在智能手机的很多应用中,使用了这样一种密码框处理方式:对用户在密码框中输入的最后一个字符,会先让它显示2-3秒钟,然后再隐藏,这样可以让用户知道刚刚输入了什么字

  • 解决mysql删除用户 bug的问题

    作者在使用mysql添加用户的时候,发现用户名给我写错了 强迫症的我,必须要改过来,但是发现删除用户的时候,命令是成功的 但是在此创建同名用户的时候,会报错,网上查了很多,说这是mysql的官方bug,不知道是作者水平不够没能理解到那个bug,还是真的解决了这个问题,下面和大家分享,欢迎大家一起讨论 删除了user的用户之后 无法再次创造相同的用户名 在mysql 数据库中有一张user表,可以查询到所有的用户和用户信息,删除里面的用户信息以及你赋予那个用户的什么权限就能完全的删除那个用户了 解

  • mysql修改用户密码报错的解决方法

    目录 mysql修改密码报错 解决办法: 关于 mysql 密码策略相关参数: 关于 validate_password_policy 的取值: mysql修改密码报错 Your password does not satisfy the current policy requirements 这是 mysql 初始化时,使用临时密码,修改自定义密码时,由于自定义密码比较简单,就出现了不符合密码策略的问题. 密码策略问题异常信息: ERROR 1819 (HY000): Your passwor

  • 详解MySQL的用户密码过期功能

    Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包.ATM和POS卡及相关的业务. PCI DSS,即PCI数据安全标准(Payment Card Industry Data Security Standard)是由PCI安全标准委员会制定,旨在使国际上采用一致的数据安全措施. PCI DSS标准要求用户每隔90天必须更改他们的密码.那么MySQL数据库该怎样适应这个情况?幸运的是,在MySQL版本5.6.6版本起,添加了password_e

  • mysql root用户的密码修改和消除

    一.密码的修改:使用mysqladmin命令 1.例如你的 root用户现在没有密码,你希望的密码修改为abc,那么命令是:mysqladmin -u root password abc 2.如果你的root现在有密码了,那么修改密码为abc的命令是:mysqladmin -u root -p password youyou 注意,命令回车后会问你旧密码,输入旧密码之后命令完成,密码修改成功. 二.密码的消除 1.以root登录:mysql -u root -p 2.mysql>use mysq

  • 详解Centos7 修改mysql指定用户的密码

    本文介绍了Centos7 修改mysql指定用户的密码,具体如下: 1.登陆mysql或者mariadb(两种任选其一) [root@localhost ~]# mysql -u root [root@localhost ~]# mysql -uroot -p 2.切换到存储用户名和密码的数据库 MariaDB [mysql]> use mysql;回车,会显示以下内容 Reading table information for completion of table and column na

  • 如何在Linux下修改Mysql的用户(root)密码

    下面给大家分享下在Linux下如何修改Mysql的用户(root)的密码,分两种情况:第一种当拥有原来的mysql的root密码,第二种情况忘记原来的mysql的root的密码. 修改的用户都以root为列. 一.拥有原来的mysql的root的密码: 方法一: 在mysql系统外,使用mysqladmin 复制代码 代码如下: # mysqladmin -u root -p password "test123" Enter password: [输入原来的密码] 方法二: 通过登录m

随机推荐