Other

修改mysql数据库的root密码

问题:Navicat创建连接报错MySql 1045 Access denied for user ‘root‘@‘localhost‘ (using password: YES) 基于出现mysql数据库服务打不开,初始化date文件夹后服务可以正常打开,但Navicat输入密码后“MySql 1045 Access denied for user ‘root‘@‘localhost‘ (using password: YES)” 解决方案 附上启发文章:https://blog.csdn.net/acoolgiser/article/details/82967317 第一步: 找到安装mysql路径下my.ini文件(例:D:\mysql), 第二步: 编辑mysql配置文件my.ini , 第三步: 在[mysqld]这个条目下加入 skip-grant-tables 保存退出后重启mysql(目的DOS进入mysql跳过密码登录) 第四步: 因为改了配置文件所以重启mysql服务 1》方法一 任务管理器-------服务------mysql服务-------重启 2》方法二:停止:输入 net stop mysql 启动:输入 net start mysql 第五步: 打开cmd,点击“开始”->“运行”(快捷键Win+R)。 这时候在cmd里面输入mysql -u root -p就可以不用密码登录了,出现 password:的时候直接回车可以进入,不会出现ERROR 1045 (28000),但很多操作都会受限制,因为没有grant权限。这里注意有mysql环境不论在那个目录输入mysql -u root -p直接就能进入mysql,但没环境必须cd到mysql安装目录下执行mysql -u root -p才能生效。 第六步: 这里注意 mysql>后面跟的是命令--------------------------- ------结果 1.进入mysql数据库:mysql> use mysql; ----------------- Database changed 2.给root用户设置新密码: mysql> update user set password=password(新密码) where user=root;---------------- Query OK, 1 rows affected (0.

雪崩:限流算法的golang实现

1. 什么是服务器雪崩 雪崩是由于局部故障被正反馈循环,从而导致的不断放大的连锁故障,雪崩通常是由于整个系统中,一个很小的部分出现故障,进而导致整个系统不可用 雪崩出现的根本原因就是系统过载,如果在系统过载的情况下,不进行任何控制,那么会导致系统雪崩 想要避免雪崩有几种常见的方式,第一种就是快速减少系统负载,即熔断、降级、限流等方式;第二种就是通过增加系统服务能力来避免雪崩,就是弹性扩容 这篇只讨论限流的具体原理及实现  2. 常见限流算法原理及其实现 2.1 固定窗口 固定窗口就是定义一个固定的统计周期,比如10s,然后在每个周期内统计当前周期中被接收到的请求数量,经过计数器累加后,如果超过设定的阈值就触发限流,直到进入下一统计周期,计数器清零,重新统计  假设我们现在设置的是2s内不能超过100次请求,但是因为流量的进入往往都是不均匀的,所以固定窗口会存在以下两个问题: 抗抖动性差。由于流量突增使请求超过预期,导致流量可能在一个统计周期的前10ms内就达到了100次,给服务处理造成一定的压力,同时后面的1990ms内的请求都会被限流。如果尝试使用减小窗口值的方法来解决这个问题,那么对应的每个窗口的阈值也将会变小,一个小的流量抖动就可能导致限流,系统抗抖动性极差 如果上一个统计周期的流量集中在最后10ms,而这个统计周期集中在前10ms,那么在这个20ms内系统就有可能收到200次请求,这违背了我们2s不超过100次请求的目的  2.2 滑动窗口 滑动窗口就是固定窗口的优化,它对固定窗口做了进一步的切分,将统计周期的粒度切分的更细,比如1min的固定窗口,切分为60个1s的滑动窗口,然后统计的范围随着时间的推移而同步后移 滑动时间窗口算法,是从对普通时间窗口计数的优化。使用普通时间窗口时,我们会为每个user_id/ip维护一个KV: uidOrIp: timestamp_requestCount。假设限制1秒1000个请求,那么第100ms有一个请求,这个KV变成 uidOrIp: timestamp_1,递200ms有1个请求,我们先比较距离记录的timestamp有没有超过1s,如果没有只更新count,此时KV变成 uidOrIp: timestamp_2。当第1100ms来一个请求时,更新记录中的timestamp并重置计数,KV变成 uidOrIp: newtimestamp_1普通时间窗口有一个问题,假设有500个请求集中在前1s的后100ms,500个请求集中在后1s的前100ms,其实在这200ms没就已经请求超限了,但是由于时间窗每经过1s就会重置计数,就无法识别到此时的请求超限。 对于滑动时间窗口,我们可以把1ms的时间窗口划分成10个time slot, 每个time slot统计某个100ms的请求数量。每经过100ms,有一个新的time slot加入窗口,早于当前时间100ms的time slot出窗口。窗口内最多维护10个time slot,储存空间的消耗同样是比较低的。 但是要注意的是,如果滑动窗口的统计窗口切分的过细,会增加系统性能和资源损耗的压力 同时,滑动窗口和固定窗口一样存在抗抖动性差的问题  golang实现滑动窗口限流: var winMu map[string]*sync.RWMutex func init() { winMu = make(map[string]*sync.RWMutex) } type timeSlot struct { timestamp time.Time // 这个timeSlot的时间起点 count int // 落在这个timeSlot内的请求数 } func countReq(win []*timeSlot) int { var count int for _, ts := range win { count += ts.

python爬取CVPR论文标题、作者、pdf链接并保存到MySQL数据库

访问外网,程序跑的时间会长一点,耐心等待! 全部源代码: # -*- coding = utf-8 -*- # @Time : 2022/5/13 9:33 # @Author :王敬博 # @File : spider.py # @Software: PyCharm from bs4 import BeautifulSoup #网页解析 import re #正则表表达式文字匹配 import parsel as parsel import urllib.request,urllib.error #指定url,获取网页数据 import pymysql.cursors #连接mysql数据库 num = 1; def main(): baseurl = https://openaccess.thecvf.com/CVPR2019?day=2019-06-18 (datalist,num) = getData(baseurl) print(爬取完毕!) #调研分析数据函数 conn(datalist,num) #调用保存函数 print(保存到数据库!) def askURL(url): head = { #伪装请求头,模拟浏览器访问 User-Agent: Mozilla / 5.0(Linux;Android6.0;Nexus5 Build / MRA58N) AppleWebKit / 537.

解决报错:Variable 'sql_mode' can't be set to the value of 'NULL'

用软件导出的数据文件,用source或者软件导入的时候常常有一些类似报错: Variable 'sql_mode' can't be set to the value of 'NULL'解决方法 产生原因: 这是由于导出的sql数据文件中的某些注释语句比如下面的注释语句引起的 ......... 0./*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 0./*!40014 SET NAMES UTF8*/ ......... 解决方法: 删除注释语句     转自 http://www.blogdaren.com/post-2065.html

双系统Linux和Windows时间冲突

问题 安装了双系统后Linux和Windows的时间总会冲突 Windows会早8小时 解决办法 在Linux终端中输入命令: timedatectl set-local-rtc 1 --adjust-system-clock 输入后关闭Linux自动设置后再次打开即可

mysql服务无法启动正常启动

问题:mysql一直正常使用,突然有一天我去用批命令打开mysql服务时,出现MySQL错误:2003-Can't connect to MySQL server on 'localhost'(10061 unknown error) 我意识到服务无法正常启动,于是我打开任务管理器,选择服务,找到mysql服务尝试手动启动,但事与愿违,无法启动但提示我“本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止。” 这下我意识到问题的严重性,百度上找了好久。什么端口占用导致无法启动,什么重新安装等等的解决方案,除了重新安装都试了结果用dos输入查电脑端口使用情况发现没有占用3306,就很恼火。突然翻到一篇文章给了我启示。附上网址可以去看看 https://blog.csdn.net/yw1441776254/article/details/95393817 # 这位仁兄初始化data文件解决问题,但我的和他略有不同。 我第一步: 直接使用管理员打开cmd(权限一次给到位) 第二步: 进入安装路径下的bin目录 第三步:尝试用DOS命令再次启动 net start MYSQL 这里有两种情况第一和那位仁兄一样服务名无效,第二种会出现两行代码忘了截屏,只要不是启动成功开始初始化吧。 第四步: 删除安装路径下的date文件夹(D:\mysql)我的安装路径 第五步: 初始化data文件:mysqld --initialize 无返回值!(有15s左右的运行时间!!!因电脑而异) 等待一会............. 出现下一行后在命令行中输入mysqld --install 就是这里我的显示已经有了不用初始化 第六步: 最后,执行 net start mysql 收工,分析一下可能是我date中数据库太多了,或者date里面缺少文件导致服务无法启动,重置date文件夹即可,就不用去卸载重新安装,还有可能导致mysql无法卸载干净,就很麻烦。

sql语句中#{}和${}的区别

进行参数绑定时,我们常使用 #{},因为它可以防止SQL注入 #{} 是预编译处理,它会先将SQL中的#{}替换为?号编译,然后再取值 原始SQL:select * from user where user_name = #{name} 预编译后:select * from user where user_name = ? 然后调用set方法来赋值‘李四’ 将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”。 ${} 会先去变量值,再去编译SQL语句 原始SQL: select * from user where user_name = #{name} 编译后SQL:select * from user where user_name = ‘李四’ 这样很容易会遭到恶意SQL的拼接来非法操作数据 ${}将传入的数据直接显示生成在sql中。如:order by userid,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id。 #{} 能防止SQL注入的原因: 因为采用预编译机制,预编译完成后,SQL的结构已经固定, 这时候,即使用户输入非法的参数,也不会对SQL语句的整体结构造成影响,从而避免了SQL注入的危险