vue-cli中将生成文件中的路径更改为相对路径

有俩个地方需要修改

一个是config/index.js

找到bulid下的assetsPublicPath 这个配置项指定了生成的文件会保存到相对于index.html的位置

将其由’./’改为’/’即可,如果想套上cdn,可以在头部定义一个常量cdn,然后在这引用即可。之后将index.html放到服务器上,static文件夹扔到cdn上即可。

二是build/utils.js

第一步中的assetsPublicPath 如果填的是相对路径,会有一个问题,就是在webpack打包之后,在css中引用的文件将会生硬的套上assetsPublicPath的值,但是css是放在/static/css中的,所以css中的图片会被浏览器解析成static/css/static/img

这时候我们改一下一个地方即可

搜索vue-style-loader,其分支的上面加一个publicPath,填写css中前面需要补充的路径即可

大概改好后长这样

    if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        publicPath: '../../',
        fallback: 'vue-style-loader'
      })
    } else {
      return ['vue-style-loader'].concat(loaders)
    }
  }

原创文章,转载请注明: 转载自YXZ’s Blog

本文链接地址: vue-cli中将生成文件中的路径更改为相对路径

小技巧:mysql中使用rand()函数的参数实现多次读入随机条目并且无重复项

众所周知,很多语言中的rand()函数实现仅仅是通过一个复杂的数学公式计算出伪随机值,并将此值作为下一次rand()的种子。

所以,如果初始给它的种子是同一个,那么之后产生的随机数序列是必定相同的。

所以可以通过指定随机数种子实现多次读入随机条目并且无重复项。

具体实现:先给用户生成一个随机数种子,并通过这个随机数种子 select * from table order by rand(seed) limit start,count

然后客户每次ajax请求时,带上这个随机数种子与start位置,即可逐步读出所有内容。

*通过order by rand()方法有性能问题,数据量小就不管了(逃

使用mysqlbinlog恢复数据库(记一次作死的酒后打码)

最近做了个小项目:weloop小黑3表盘分享平台(https://www.iweloop.com),收到不少好评与点赞,表盘上传数、访问量日渐增加,发的帖子还被官方置顶了,成就感满满的~~

然而,作死的是,我在喝了几两白酒后竟然跑去敲了个新功能,并且没经过仔细测试就部署到生产环境了,导致所有数据遭到污染(update表时忘记加where),所有表盘名字作者丢失,罪过,罪过

b5fd6074ff2b135

虽然每日都有备份数据,但那时是晚上11点,恢复昨日备份意味着今日数据全部丢失。幸好想起mysql还有binlog这玩意,赶紧拿出来研究了一番。binlog是将每次对数据操作都记录下来,所以通过它就能非常方便地恢复数据,通过mysqlbinlog这个可执行程序就能将日记导出为sql执行语句

root@debian-1gb-sfo2-01:/usr/local/mysql/bin# ./mysqlbinlog
./mysqlbinlog Ver 3.3 for Linux at x86_64
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Dumps a MySQL binary log in a format usable for viewing or for piping to
the mysql command line client.

Usage: ./mysqlbinlog [options] log-files
-?, –help Display this help and exit.
–base64-output[=name]
Determine when the output statements should be
base64-encoded BINLOG statements: ‘never’ disables it and
works only for binlogs without row-based events;
‘decode-rows’ decodes row events into commented SQL
statements if the –verbose option is also given; ‘auto’
prints base64 only when necessary (i.e., for row-based
events and format description events); ‘always’ prints
base64 whenever possible. ‘always’ is deprecated, will be
removed in a future version, and should not be used in a
production system. –base64-output with no ‘name’
argument is equivalent to –base64-output=always and is
also deprecated. If no –base64-output[=name] option is
given at all, the default is ‘auto’.
–character-sets-dir=name
Directory for character set files.
-d, –database=name List entries for just this database (local log only).
–debug-check Check memory and open file usage at exit .
–debug-info Print some debug info at exit.
–default-auth=name Default authentication client-side plugin to use.
-D, –disable-log-bin
Disable binary log. This is useful, if you enabled
–to-last-log and are sending the output to the same
MySQL server. This way you could avoid an endless loop.
You would also like to use it when restoring after a
crash to avoid duplication of the statements you already
have. NOTE: you will need a SUPER privilege to use this
option.
-F, –force-if-open Force if binlog was not closed properly.
(Defaults to on; use –skip-force-if-open to disable.)
-f, –force-read Force reading unknown binlog events.
-H, –hexdump Augment output with hexadecimal and ASCII event dump.
-h, –host=name Get the binlog from server.
-l, –local-load=name
Prepare local temporary files for LOAD DATA INFILE in the
specified directory.
-o, –offset=# Skip the first N entries.
-p, –password[=name]
Password to connect to remote server.
–plugin-dir=name Directory for client-side plugins.
-P, –port=# Port number to use for connection or 0 for default to, in
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/services, built-in default (3306).
–protocol=name The protocol to use for connection (tcp, socket, pipe,
memory).
-R, –read-from-remote-server
Read binary logs from a MySQL server.
-r, –result-file=name
Direct output to a given file.
–server-id=# Extract only binlog entries created by the server having
the given id.
–set-charset=name Add ‘SET NAMES character_set’ to the output.
-s, –short-form Just show regular queries: no extra info and no row-based
events. This is for testing only, and should not be used
in production systems. If you want to suppress
base64-output, consider using –base64-output=never
instead.
-S, –socket=name The socket file to use for connection.
–start-datetime=name
Start reading the binlog at first event having a datetime
equal or posterior to the argument; the argument must be
a date and time in the local time zone, in any format
accepted by the MySQL server for DATETIME and TIMESTAMP
types, for example: 2004-12-25 11:25:56 (you should
probably use quotes for your shell to set it properly).
-j, –start-position=#
Start reading the binlog at position N. Applies to the
first binlog passed on the command line.
–stop-datetime=name
Stop reading the binlog at first event having a datetime
equal or posterior to the argument; the argument must be
a date and time in the local time zone, in any format
accepted by the MySQL server for DATETIME and TIMESTAMP
types, for example: 2004-12-25 11:25:56 (you should
probably use quotes for your shell to set it properly).
–stop-position=# Stop reading the binlog at position N. Applies to the
last binlog passed on the command line.
-t, –to-last-log Requires -R. Will not stop at the end of the requested
binlog but rather continue printing until the end of the
last binlog of the MySQL server. If you send the output
to the same MySQL server, that may lead to an endless
loop.
-u, –user=name Connect to the remote server as username.
-v, –verbose Reconstruct SQL statements out of row events. -v -v adds
comments on column data types.
-V, –version Print version and exit.
–open-files-limit=#
Used to reserve file descriptors for use by this program.

Variables (–variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
——————————— —————————————-
base64-output (No default value)
character-sets-dir (No default value)
database (No default value)
debug-check FALSE
debug-info FALSE
default-auth (No default value)
disable-log-bin FALSE
force-if-open TRUE
force-read FALSE
hexdump FALSE
host (No default value)
local-load (No default value)
offset 0
plugin-dir (No default value)
port 3306
read-from-remote-server FALSE
server-id 0
set-charset (No default value)
short-form FALSE
socket /tmp/mysql.sock
start-datetime (No default value)
start-position 4
stop-datetime (No default value)
stop-position 18446744073709551615
to-last-log FALSE
user root
open-files-limit 64

具体几个实用的配置选项:

-d, –database=name 指定查询日记中的数据库名字

#下面几个可以选用几个使用,未必一定要同时指定开始和结束位置

–start-datetime 指定要提取的日记开始时间 如2004-12-25 11:25:56

–stop-datetime=name 指定要提取的日记停止时间

-j, –start-position= 指定要提取的日记开始的位置(位置需加引号)

–stop-position= 指定要提取的日记结束的位置(位置需加引号)

实践:

首先切换到mysql数据库日记目录,如我的是/usr/local/mysql/var

然后找到要修复的数据库的日记文件

root@debian-1gb-sfo2-01:/usr/local/mysql/var# ../bin/mysqlbinlog --database=weloop_watchface ./mysql-bin00006 | more
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

确定数据未被污染的位置

root@debian-1gb-sfo2-01:/home/mysqlbinlog# /usr/local/mysql/bin/mysqlbinlog --database=weloop_watchface mysql-bin.000006 | tac  | grep -C 7 "update watchface set" | more
SET TIMESTAMP=1484921355/*!*/;
#170120 22:09:15 server id 1  end_log_pos 7232064 	Query	thread_id=101969	exec_time=0	
error_code=0
# at 7231984
COMMIT/*!*/;
#170120 22:09:15 server id 1  end_log_pos 7231984 	Xid = 305468
# at 7231957
/*!*/;
update watchface set wf_name='7hours_金馆长大宝剑动态表盘',maker_name='thxsechee'
SET TIMESTAMP=1484921355/*!*/;
#170120 22:09:15 server id 1  end_log_pos 7231957 	Query	thread_id=101969	exec_time=0	
error_code=0
# at 7231791
/*!*/;
BEGIN
SET TIMESTAMP=1484921355/*!*/;
#170120 22:09:15 server id 1  end_log_pos 7231791 	Query	thread_id=101969	exec_time=0	
error_code=0
--
SET TIMESTAMP=1484579327/*!*/;
#170116 23:08:47 server id 1  end_log_pos 116716 	Query	thread_id=943	exec_time=0	error_co
de=0
# at 116636
COMMIT/*!*/;
#170116 23:08:17 server id 1  end_log_pos 116636 	Xid = 5210

由于以上数据倒着输出,所以最后正确数据操作位置是在7231791,导出数据

root@debian-1gb-sfo2-01:/home/mysqlbinlog# /usr/local/mysql/bin/mysqlbinlog --database=weloop_watchface --stop-position="7231791" mysql-bin.000006 > oplog.sql

然后找台机子,安装mysql,直接导入oplog.sql即可得到那个时间点前的数据库,再把被污染的数据表导出来,覆盖生产环境的数据表即可

 

教训:

1、勤做备份,并保证备份数据安全与可用,并掌握通过备份数据快速恢复的方法,不然做了备份也是白搭(@炉石)

2、上线新功能时一定一定要有一个清醒的头脑

原创文章,转载请注明: 转载自YXZ’s Blog

本文链接地址: 使用mysqlbinlog恢复数据库(记一次作死的酒后打码)

php foreach 遍历bug:最后两个元素重复

网上找了找,貌似2007里就有的bug,现在还没修复。

在用键值做引索的数组里使用foreach遍历就会出现最后两个元素重复的bug。

有两种解决方法:

1、不使用键值做引索

2、遍历时使用引用来遍历(此乃本人无意中发现)

原创文章,转载请注明: 转载自YXZ’s Blog

本文链接地址: php foreach 遍历bug:最后两个元素重复

迅雷水晶监视V1.3.12–随时监控你的水晶矿场、赚钱宝运行状况

监视软件+数据采集端下载地址:点击下载

可在服务器上打开 https://letsb.in 进行下载 (打不开的话请使用http://letsb.in)


软件特点:通过一处迅雷账号登录即可实现多处客户端实时监控速度

原理:模拟水晶矿场app抓取信息,并上报到本项目服务器,实现通过软件客户端+网页版实时查看产量。

赞助人员名单

NEW:本软件已推出网页版 http://my.xlsjkc.com  仅收取1元每月以维持服务器开支

快速入门:下载 监视软件  数据采集端 ->数据采集端中登录迅雷账号->注册网页平台http://my.xlsjkc.com 账号并添加矿机(仅使用客户端无需付费)->将数据采集端中的apikey添加入网页平台矿机管理中的批量更改apikey->打开监视软件登录平台账号即可

未付费用户:在数据采集端中登录迅雷账号并保持24小时运行,保证数据采集正常

不想24小时运行采集端?使用网页版付费即可,在 数据采集端 中登录并成功上报之后,即可关闭数据采集工具,项目服务器将会为您24小时自动采集产量数据

为防止因访问速度接口频率太高被迅雷阻止访问,目前客户端刷新速度为3秒/账号。缓存空间、部署速度由于是服务器采集,所以会有些许延时,控制在10分钟之内,如果新添加矿机请稍等几分钟即可查看缓存

由于现在获取速度需要登录迅雷账号,所以如果手动在手机app上登录导致账号掉线,客户端上将会显示矿机离线,在数据采集上重新登陆并上报,重新登陆客户端即可

请注意:平台目前启用每小时自动收取水晶

水晶矿场交流群:289479112

关于报毒问题:软件不含任何恶意代码,请放心使用,是由于会上传数据而导致被误认作木马

扫一扫关注平台微信,了解项目动态

qrcode_for_gh_a043fc5c1a92_258

 

 

 

 

 

 

 

 

软件主界面

 

20150927174854


caiji

产量报表bb小时产量查看

hour软件悬浮窗

shuijing2

 


 

 

 

 


 

★软件特色 ★

1、软件自带高端大气上档次的悬浮窗,随时观察水晶情况

2、率先支持红水晶产量查看

3、小时产量查看

4、水晶汇总实时查看

5、带速度折线图,方便观察速度走向

在主界面中,可以方便地查看各水晶矿工的工作情况,还带有速度折线图,方便观察速度情况(还是强迫症)

而在悬浮窗中,左上角代表上传速度,右上角代表部署速度,左下角代表当前总产出,括号内代表预计产量,右下角代表正常水晶矿工

软件使用帮助

USERID:

这个userid是请求需要的参数,

具体寻找方法,打开http://t.kankan.com/ 之后登录,重新打开http://t.kankan.com/,在地址栏内可以看到http://t.kankan.com/后有一段数字,这个就是userid,输入即可

软件右下角的滑块用于调整速度图内的个数,如果想看长一段时间的可以往右拉

至于部署时间,这个只能在软件启动后统计,若软件没有检测到部署速度,将会显示115年前。

 


V1.3.12 2015/9/27

1、启用新接口,功能恢复正常

2、启用平台账号统一登录系统,不再需要重复添加矿机

V1.3.11 2015/6/21

1、增加赚钱宝与路由数据查看

V1.3.10 2015/3/21

1、修复历史产量

2、增加今昨对比功能

3、性能优化,经测试带机500台无压力

V1.3.9 2015/2/16

1、宝箱日志处显示钥匙个数

2、增加客户端控制开启哪种宝箱(赞助人员专享受)

3、N+bug修复&优化

V1.3.8 2015/2/8

1、增加客户端宝箱日记查看(^前代表今日宝箱个数,后代表宝箱内的水晶数)、宝箱收取提醒

2、恢复历史产量查看

3、报表体验升级,现在会记忆用户调的列宽比例,并且可切换报表列顺序(左键点击表头)、增加更多图例颜色

4、增加客户端提现功能

5、优化数据获取,尝试恢复因多线程获取更新以来的极小概率性崩溃

6、设置中现可调是否提醒上下线、缓存删除、宝箱获取消息。

7、若干bug修复&优化

V1.3.7 2015/1/3

[注意]此版本为水晶矿场专版,数据统计与蓝水晶分开,请勿在此版本添加蓝水晶机器浪费服务器资源!!!

1、增加水晶蛀虫设定,挂在矿机上即可实现本地客户端产量查看、批量收取,详情看文章说明

2、增加小时产量查看

3、历史产量、平均速度查看暂时关闭中

4、手机版5号即可使用

V1.3.6 2014/12/30

[注意]此版本为水晶矿场专版,数据统计与蓝水晶分开,请勿在此版本添加蓝水晶机器浪费服务器资源!!!

1、添加批量增加机器(凭userid)

2、显示主机名/ip选项

3、红水晶机器暂不能添加入微信查询,蓝水晶下线后即可用微信查询。若需要使用,可以在1.3.5版中增加

V1.3.5 2014/12/14

1、手机版上线!详情点击软件界面内的手机版

2、[重要]更改数据上传端口,防止域名因未备案而被封

3、增加报表字体调整

4、悬浮窗增加若有离线则台数变为红色

5、若矿机掉线报表中将会在之前增加个离字

6、多线程获取信息,防止50机用户卡顿

计划未更新内容:矿机顺序调整、报表列顺序调整

V1.3.3 2014/11/15

1、bug修复

2、增加历史产量报表查看

3、增加昨日此刻速度查看

4、增加七天前产量对比

5、更改页面布局,现在窗口大小可以随意调整

6、更新数据上报机制

V1.3.1-V1.3.2 2014/11/2

1、bug修复

2、现在服务器可以自动获取每日产量,不必一直开着客户端,只要矿机被上报过一次,每日的产量都会自动记录。

3、修复中文主机名导致数据无法上报

4、优化产量查看

V1.3 2014/11/1

1、增加每日水晶记录功能(请看文中说明)

2、增加指定矿工是否画曲线图功能(包括总量)

3、增加自启动设置

4、增加悬浮窗隐藏设置

5、增加曲线图隐藏设置

6、增加昨日产量显示

7、增加无限制日期的历史产量显示

 

V1.2.1 2014/10/17

1、增加水晶收入提示声

2、加入防止因迅雷服务器抽风导致错误提示掉线机制,最近迅雷服务器可能压力较大,有时候速度信息需要长一点时间才能出现。

V1.2 2014/10/3

1、缓存自动删除通知

2、增加平均速度显示

3、增加缓存删除历史&掉线历史查看

 

V1.1.1 2014/9/14

修复概率性自动退出问题

V1.1 2014/9/12

1、增加主机名显示
2、水晶矿工下线通知
3、优化新增水晶矿工体验
4、隐藏IP显示
5、新增悬浮窗颜色更改

V1.0.1 2014/9/8 

修复更新检测bug

 

目前本工具会上传以下信息:DCDN_ID USER_ID 当前水晶数 预测水晶数 当前上传速度 当前部署速度 当前进度 当前缓存空间 用户设置的主机名 ip地址

这些信息将仅用作水晶记录

(V1.3.10水晶矿场)下载地址:点击下载

(V1.3.5蓝水晶)下载地址:点击下载

水晶蛀虫V1.3.6下载地址: 点击下载

原创文章,转载请注明: 转载自YXZ’s Blog

本文链接地址: 迅雷水晶监视V1.3.12–随时监控你的水晶矿场、赚钱宝运行状况