DiscuzQ 在 MySQL 5.6 安装 Specified key was too long; max key length is 767 bytes

DiscuzQ吃瓜第一个坑,MySQL 5.6 下安装的时候出现索引长度 安装出错: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `group_permission` add primary key `group_permission_group_id_permission_primary`(`group_id`, `permission`)) 那么在 MySQL 5.6 下要有没有办法安装呢? 其实是有的,如果熟悉 Laravel 的,都知道 Laravel 5.x 开始,在 MySQL 5.6 下也有这个问题,解决方式在AppServiceProvider::boot() 里面加上 Schema::defaultStringLength(191); 就可以解决问题了。 DiscuzQ 也是基于 Laravel 的,那么搞起。 结果发现,不行报错了:Ca...

[阅读更多 →]

  • PHP 开发者学 Golang 之 URL 编码 (Urlencode)、解编码 (Urldecode)

    作为一个PHP开发者,在PHP语言中,我们对URL进行编码和解编码处理,可以使用 urlencode() 和 urldecode() 函数。 在 Golang 中有 net/url 包是用来专门处理 URL 的, net/url 包有完整的URL解析函数,编码函数,解编码函数。 URL 解析 解析 URL 可以使用 url.Parse() 函数。这个函数功能类似于 PHP 下的 parse_url() 函数。 import ( "fmt" "github.com/liudng/godump" "net/url" ) urlStr := "https://cong5.net/post/golang?name=张三&age=20&sex=1" parseUrl,_ := url.Parse(urlStr) URL 解析后,我们来看一下返回的数据结构: (*url.URL) (url.URL) Scheme(string) "https" Opaque(string) "" User(*url.U...

    [阅读更多 →]

  •   
  • PHP 开发者学 Golang 之基本结构

    PHP 是一门弱类型的语言,所以 PHP 开发者的我们刚刚接触强类型的语言是有点蛋疼的。 在写普通程序的时候,弱类型挺方便的。但是在设计金钱相关的程序,强类型语言往往更安全。 今天我们就来学习一下 Golang 的基本结构、基本数据类型。 每一门语言都有其关键字和预定义标识符。Golang 语言也不例外。 Go 语言有25 个关键字或保留字,有 36 个预定义标识符。要记熟这些关键字和标识符。 关键字或保留字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 预定义标识符 ...

    [阅读更多 →]

  •   
  • Redis 高级特性 Pipeline (管道) 使用和基本测试

    都说 Pipeline 有很大好处,但是能量是守恒的,好坏也是相对的。 所以我们主要来测试看看 Pipeline 的利弊。 带着几个问题我们来进行基本的测试。 1. Pipeline 对命令数量是否有限制? 2. Pipeline 打包执行多少命令合适? 3. Pipeline 批量执行的时候,是否对Redis进行了锁定,导致其他应用无法再进行读写? Redis 常规使用方式 我们都知道Redis 是单线程的,那么在常规使用情况下,我们使用 Redis ,如下代码执行是什么流程呢? $key1 = "abc1"; $key2 = "abc2"; $key3 = "abc3"; $redisObj->set($key1, 1); $redisObj->set($key2, 2); $redisObj->set($key3, 3); Redis 的执行方式是逐条命令: 发送命令->执行->返回执行结果。 如图: 什么是 pipeline 呢? 知道了常规的使用方式,那么我们再来看看 ...

    [阅读更多 →]

  •   
  • 记一个开启 ssl_session_tickets 导致的 SSL 证书冲突的问题

    很久不写东西了,自己都感觉自己太懒了,有深深的罪恶感了。 今天刚刚好遇到一个 Nginx 的问题,就硬逼着自己一定要写点什么记录一下。 今天在突然发现自己的博客打不开了,提示很奇怪,提示内容是 此网站无法提供安全连接 . 回想了一下这两样的的操作,就是昨晚给服务器加了一个 https 的站点。 假设1:SSL 证书过期了 刚刚开始以为是 SSL 证书问题,看了一下证书的到期,也还有几天就到期了。脆重新去签发一个证书试试,但是重新签发后,发现问题依旧。 再开 B 站点,都是正常的。唯独博客这个站点 A 有问题。 假设2:SSL 证书冲突 那么应该就是配置文件的问题了,首先想到的是是 SSL 证书冲突。 一般来说一个 IP 只能支持一个 SSL 证书,但是在 Nginx 我们可以通过开启 TLS SNI support 来让 Nginx 支持多SSL证书。 xxxx@xxxxxxx> /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.12.2 built with OpenSSL 1.0.1f 6 Jan 2014 TLS ...

    [阅读更多 →]

  • ERP 系统优化之客户信息、联系人信息缓存之 DB 解决方案

    昨天我们说了如何把 13.9+ 万的客户数据导入 Redis 以及客户联系人的数据导入Redis 服务器去。 今天我们再来说说程序里面如何优化,做到数据在查询的时候首先从 Redis 里面取数据,当 Redis 没有数据的时候再从 MySQL 里面取数据,并缓存。 数据的增删改,这个我们来写一套 DB 的解决方案,在数据进行 MySQL 增删改操作的时候,同时对 Redis 进行增删操作。 一套同时操作 MySQL 和 Redis 的解决方案 关于同时操作操作 MySQL 和 Redis 的方案有很多种,可以按需选择,可选的方案包括但是不限于以下的思路: 我们可以全新开发一套 ORM ,这套ORM包含了操作 MySQL 和 Redis 的CURD同步操作。 利用系统现有的 DB 操作类进行二次封装操作方法,在操作方法里面同时进行操作 MySQL 和 Redis 的 CURD 的同步操作。 如果系统本身使用了开源框架来开发的,或者本身已经包含了 ORM 的,那么直接使用现有系统的 ORM 进行二次封装,重写 CURD 等方法,让其支持 MySQL 和 Redis 同步操作。 由于我们的E...

    [阅读更多 →]

  • 使用 PHP SWOOLE 定时同步 MySQL 数据

    南宁公司和几个分公司之间都使用了呼叫系统,然后现在需要做一个呼叫通话数据分析,由于分公司的呼叫服务器是在内网,通过技术手段映射出来,分公司到南宁之间的网络不稳定,所以需要把分公司的通话数据同步到南宁。 本身最简单的方法就是直接配置 MySQL 的主从同步就可以同步数据到南宁来了。但是销售呼叫系统那边的公司不给 MySQL 权限我们。 所以这个方法只能放弃了。 于是我们干脆的想,使用PHP来实现定时一个简易的PHP定时同步工具,然后 PHP 进程常驻后台运行,所以首先就先到了一个 PHP 组件:SWOOLE ,经过讨论,分公司的每天半天生成的数据量最大在5000条左右,所以这个方案是可行,就这样干。 我们使用 PHP SWOOLE 做一个异步的定时任务系统。 本身 MySQL 数据库的主从同步是通过解析Master库中的 binary-log 来进行同步数据到从库的。然而我们使用PHP来同步数据的时候,那么只能从master库分批查询数据,然后插入到南宁的slave库来了。 这里我们使用的框架是 ThinkPHP 3.2. 首先安装PHP扩展: SWOOLE,因为没有使用到特别的功能,所...

    [阅读更多 →]

  •   
  • Omnibus-GitLab 配置 PostgreSQL 开启远程访问

    以前我安装Gitlab是使用源码安装的方式来安装的,这种方式的好处是可以高度自定义安装程序和指定安装位置。缺点是Golang、Ruby、Git 1.8+、Nodejs都需要编译安装,太麻烦了。 现在家里面搞了台机器做内部服务器使用,想偷懒了。于是就开始试试 Omnibus-GitLab 这个一键安装包。 但是Omnibus-GitLab 自带了 PostgreSQL 作为缺省的内部数据存储,比如用户信息, 源码仓库信息等。 平时使用最多的是MySQL数据库,其次是MongoDB,或者SQL Server数据库,但是对PostgreSQL这个数据库却很少接触,只能去找Google大叔了。 这里记录一下过程。 PostgreSQL默认情况下,远程访问不能成功,如果需要允许远程访问,网站普遍是修改2个配置文件。 这里为了安全,我们使用的是Password/Md5 Authentications的认证方式 给 Gitlab 用户加上密码 默认缺省情况下, Gitlab 用户使用的是 Peer Authentication , 这意味着客户端只能以 PostgreSQL 所在主机上的Linux系...

    [阅读更多 →]

  •   
  • ERP 一键呼叫系统开发

    简介 公司购买了一整套呼叫系统的设备,然后分别部署到了南宁公司和各个下级市的分公司,然后要求这套呼叫设备系统需要能接入ERP,可以方便的从ERP的点击客户联系电话或者输入电话号码就可以通过网页快速呼叫出去。 所以今天来总结一下呼叫系统开发实现的一些小细节。 (因为项目性质问题,这里代码里面的用户名和密码均修改为演示的) 系统分析 本身每套呼叫设备上都提供有一个C语言写的接口程序,对外提供WebService服务。 那么呼叫系统在进行一键呼出的时候,可以通过调用WebService服务来实现跟电话设备的交互。 因为南宁公司和4个下级市的分公司都分别处于不同的异地网络,所以每个公司都有一套呼叫的网关设备和服务器。 那么相当于是5套呼叫设备了,每套都在不同的地方,但是ERP却是统一使用一套ERP,所以存在一个ERP如何调用到分公司内网内的呼叫设备的问题? 关于这个的,我的解决方法是把呼叫模块独立成为一个服务程序,然后分别部署到各个公司的内部的一台服务器去,然后ERP的在线呼叫和呼叫弹屏的功能调用全部在走前端,然后走内网。 还是存在一个问题,就是WebService接口验证呢?怎么知道当前调用...

    [阅读更多 →]

  •   
  • GitLab 迁移服务器后 SSH KEY 无效的问题

    前段时间在给公司的gitlab迁移服务器,过程也很简单,备份数据库,打包程序文件,打包启动项文件到新的服务器。 在新的服务器启动gitlab,可以正常启动,但是却遇到了一个奇葩的问题: git push,git pull 的时候,却提示验证失败。无法识别SSH KEY,尝试过删除了,然后重新添加SSH KEY也不行。 最后经过多层次的Google,才找到以下资料: public-key-authentication-fails-only-when-sshd-is-daemon 一次由SELinux引起的ssh公钥认证失败问题 得到的原因是:是因为.ssh目录没有ssh_home_t标签!! 既然知道了原因,那么接近也比较简单了。 通过下面命令重置: [root@249 ~]# restorecon -r -vv /root/.ssh [root@249 ~]# restorecon -r -vv .ssh restorecon reset /root/.ssh context unconfined_u:object_r:admin_home_t:s0->unconfined_u...

    [阅读更多 →]

  •   
  • MySQL 主从同步部分数据表

    今天来讲讲MySQL主从同步的配置和只同步我们指定的数据表。 惯例,来说说缘由。 因为天津总公司那边需要读取我们南宁公司的ERP的营收数据。 然后我们南宁这边的ERP数据库服务器为了安全是只能内网访问的。 So.这样来解决: Tips: 以下ERP数据库所在的服务器为主服务器A,外网可访问的从服务器为B 一、我们找了另外一台内部的服务器B,开启了外网访问,让天津可以访问到我们的这台服务器。 二、然后需要配置MySQL主从同步,让ERP数据库的特定的几个数据表同步到可以外网访问的服务器B去。 三、开启外网访问,完工。 本篇完~~,哈哈哈。 不扯淡了,开工~ 暂定: 主服务器IP:192.168.1.100 从服务器IP:192.168.1.101 Tips 在配置MySQL主从同步的时候需要保证一下几点: 在服务器上必须开启二进制日志 主服务器的server-id只能是:server-id=1 每一台从服务器都需要配具有唯一性的server-id 开始复制进程之前,需要现在主服务器上记录二进制文件,以及最新位置Position 创建一个从服务器链接主服务器的帐号。(推荐限制一下可访问I...

    [阅读更多 →]

  •   
  • 遇到了 Vuejs 使用 Sortable 进行排序数据更新了 Dom 没更新

    最近在使用 Vuejs 来改写网站博客后台,开始实现前后端完全分离的设计。 后台有一个自定义导航菜单的功能,于是 Sortable 来进行导航菜单拖动排序。 但是却遇到了一个很蛋疼的问题,就是数据更新了,但是 Dom没有更新,或者 Dom 更新出来位置始终是不对的,真是百思不得其姐~~~ 代码如下: <template> <div class="navigation"> <div class="grid-content bg-purple-light"> <div class="drap-list"> <ul id="draggable"> <li v-for="(item,index) in navigations" class="pit-nav-item" :url="item.url" :name="item.name"> ...

    [阅读更多 →]

  •   
  • 解决树莓派从 USB 硬盘启动,同时挂载多块硬盘无法启动的问题

    为什么要从硬盘启动呢?主要的原因是因为如果树莓派有时突然断电,如果内存卡还在写入的话,就会导致文件损坏,然后系统无法启动了。另外还有一点就是,我嫌弃内存卡的读写速度还是太慢了。 所以作为一个喜欢折腾的人,就肯定要折腾一番了,同时这几天买的4T红盘到了,也该把树莓派做成一个NAS来使用了。 好了,我们进入正题,树莓派从USB硬盘启动,那么我们还是脱离不了内存卡,因为树莓派通电后,首先读取的是内存卡的引导分区,然后修改内存卡的启动分区cmdline.txt 文件,让其从硬盘启动。 步骤1,格式化硬盘,同步系统到硬盘: 准备一快硬盘,使用parted进行分区,分区表选择GPT,为了更好的支持UUID挂载,为什么不直接使用:/dev/sda1 这样的形式挂载硬盘?而要使用UUID的方式呢?? 主要考虑到如果引导时指定的是sda1,显然如果有新的存储设备连接到树莓派,开机启动时很可能因为sda被占用而造成不能开机问题,也是本文的重要的中心。 分区的过程略过,可以Google到好多的教程... 最后把分区格式化成ext4的文件系统: //格式化分区 sudo mke2fs -t ext4 ...

    [阅读更多 →]

  •   
  • 自己 DIY 一个树莓派的架子

    最近在折腾把树莓派变成NAS,然后树莓派虽然体积小,但是如果要使用起来需要外接很多的东西,于是就很多线乱七八糟的,外接的设备也很多,设备总共有: 树莓派主板 x1 一块2.5英寸的硬盘 x1 一个USB HUB x1 一个TP Link WR802N 的迷你路由 x1 4T红盘+底座 x1 这堆东西混在一起,感觉很乱,很占地方。 于是想在淘宝找找有没有合适的小机箱之类的东西,但是找来找去,都很不合意。 最后在想我能不能自己DIY一个呢?完全定制,舒适、美观、心情舒畅…… 哈哈,说做就做,首先我们选材,我想到的适合的材料有5种: 材料 优点 缺点 推荐 木板 易于加工 便宜的木板不好看,好看的木板不好加工,成本太贵 ❆❆❆❆ 钢板(厚度0.5cm) 耐高温,硬度大,稳定 不好加工,成本太高 ❆❆❆ 亚克力 相对钢板好加工,价格也适中 比较容易被刮花,不美观 ❆❆❆❆❆ 好吧,这样一对比,最后我还是选择了亚克力这种材质。最后剩下来的就是找万能的某宝了,去定制,去某宝了解了,商家是机床直接根据CAD图加工,好吧,就做一个CAD图: 物料 板子有了,然后我们...

    [阅读更多 →]

  •   
  • 解决硬盘挂载到 Debain 下文件名乱码的问题

    最近在折腾使用树莓派做NAS,因为硬盘格式被我格式化成了Ext4的文件系统,所以需要在windows下读写Ext4文件系统的话,需要先安装Ext2Fsd来挂载Ext4,然后把文件拷贝到一块4T的红盘去的,但是在使用Ext2Fsd来挂载硬盘的时候,忘记选择utf-8编码了,导致编码处是:“自动”,于是在windows下编码就是GB2312的编码。 当把硬盘挂在到树莓派的系统中去的时候,GB2312的文件编码会变成一堆“?????”的形式了。 方法一: 首先想到的解决方法就是修改mount的设置项,修改编码为utf-8: mount -o utf-8 /dev/sdb1 /data 但是发现-o 这个参数在Debain下居然没有,报错: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so ...

    [阅读更多 →]

  •   
  • 1 / 19