December 15, 2016
Linux系统排查
"\u003cp\u003e常见工作中,计算机系统的资源主要包括CPU,内存,硬盘以及网络,过度使用这些资源将使系统陷入困境。本系列一共四篇博文,结合我在实习期间的学习,介绍一些常见的Linux系统排障工具及方法。\u003c/p\u003e\n\u003cp\u003e第1篇—— \u003ca href=\"http://www.cnblogs.com/Security-Darren/p/4685629.html\"\u003e内存篇\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e第2篇—— \u003ca href=\"http://www.cnblogs.com/Security-Darren/p/4700384.html\"\u003eCPU篇\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e第3篇—— \u003ca href=\"http://www.cnblogs.com/Security-Darren/p/4700386.html\"\u003e磁盘I/O篇\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e第4篇—— \u003ca href=\"http://www.cnblogs.com/Security-Darren/p/4700387.html\"\u003e网络篇\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e事实上,当上述服务器系统资源中的任何一个遭遇瓶颈,都会带来服务器性能的下降,典型的症状就是系统运行迟缓。\u003c/p\u003e\n\u003cp\u003e本文从以下几个角度介绍Linux系统内存相关的排查。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e内存的使用率如何查看,使用率真的很高吗\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e内存用在哪里了\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e内存优化可以有哪些手段\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e"
December 12, 2016
使用Gitlab一键安装包后的日常备份恢复与迁移
"\u003ch4 id=\"gitlab-创建备份\"\u003e\u003cstrong\u003eGitlab 创建备份\u003c/strong\u003e\u003c/h4\u003e\n\u003cp\u003e使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egitlab-rake gitlab:backup:create\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e使用以上命令会在\u003ccode\u003e/var/opt/gitlab/backups\u003c/code\u003e目录下创建一个名称类似为\u003ccode\u003e1393513186_gitlab_backup.tar\u003c/code\u003e的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的\u003ccode\u003e1393513186\u003c/code\u003e是备份创建的日期.\u003c/p\u003e\n\u003ch4 id=\"gitlab-修改备份文件默认目录\"\u003e\u003cstrong\u003eGitlab 修改备份文件默认目录\u003c/strong\u003e\u003c/h4\u003e\n\u003cp\u003e你也可以通过修改\u003ccode\u003e/etc/gitlab/gitlab.rb\u003c/code\u003e来修改默认存放备份文件的目录:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egitlab_rails[\u0026#39;backup_path\u0026#39;] = \u0026#39;/mnt/backups\u0026#39;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode\u003e/mnt/backups\u003c/code\u003e修改为你想存放备份的目录即可, 修改完成之后使用\u003ccode\u003egitlab-ctl reconfigure\u003c/code\u003e命令重载配置文件即可.\u003c/p\u003e\n\u003ch4 id=\"gitlab-自动备份\"\u003e\u003cstrong\u003eGitlab 自动备份\u003c/strong\u003e\u003c/h4\u003e\n\u003cp\u003e也可以通过\u003ccode\u003ecrontab\u003c/code\u003e使用备份命令实现自动备份:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo su -\ncrontab -e\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e加入以下, 实现每天凌 …\u003c/p\u003e"
December 6, 2016
[Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by的解决办法
"\u003cp\u003e线上用的MySQL版本为5.7.11,线下用的5.6版本,发现将程序上线后,有些地方报这个错误\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003eONLY_FULL_GROUP_BY:\u003c/strong\u003e\n对于GROUP BY聚合操作,若select中的列没有在group by中出现,那么这句SQL是不合法的。\u003c/p\u003e\n\u003cp\u003e解决办法下my.cnf中添加以下几行\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[mysqld] …\u003c/code\u003e\u003c/pre\u003e"
December 3, 2016
Linux下安装MySQL多实例
"\u003cp\u003e\u003cstrong\u003e环境说明:\u003c/strong\u003e\nCentos 6.6 64位\nmysql 使用最新版本5.7.16版本\u003c/p\u003e\n\u003cp\u003e这里安装两个MySQL实例,分别使用3306/3307端口号\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e目录结构:\u003c/strong\u003e\n/data/mysql/mysql3306\n/data/mysql/mysql3306/data\n/data/mysql/mysql3307/log\n/data/mysql/mysql3306/tmp\u003c/p\u003e\n\u003cp\u003e执行命令:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003emkdir -p /data/mysql/mysql3306/{data,tmp,log}\nmkdir -p /data/mysql/mysql3307/{data,tmp,log}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e为了方便我们先配置mysql3306实例,配置成功后,再复制一份到3307即可。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003etar zxvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz\ncp -rf mysql-5.7.16-linux-glibc2.5-x86_64/* /data/mysql/mysql3306/\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e权限修改\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003echown -R mysql:mysql /data/mysql/mysql3306\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e配置my.cnf\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecd …\u003c/code\u003e\u003c/pre\u003e"
November 30, 2016
Percona XtraBackup备份mysql数据库 技术手册
"\u003cp\u003e\u003ca href=\"https://www.percona.com/doc/percona-xtrabackup/2.4/index.html\"\u003ehttps://www.percona.com/doc/percona-xtrabackup/2.4/index.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e下载地址: \u003ca href=\"https://www.percona.com/downloads/XtraBackup/LATEST/\"\u003ehttps://www.percona.com/downloads/XtraBackup/LATEST/\u003c/a\u003e\n一、安装两个必需库\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo yum -y install libdv perl-DBD-MySQL\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e如果libev库在yum源找不到的话,需要在rpmfind.net网站下载自行安装。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm\nrpm libev-4.15-1.el6.rf.x86_64.rpm\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e二、安装percona-xtrabackup\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewget …\u003c/code\u003e\u003c/pre\u003e"
November 26, 2016
linux screen 命令详解
"\u003cp\u003e\u003cstrong\u003e一、背景\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、简介\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eGNU Screen\u003c/strong\u003e是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。\u003c/p\u003e\n\u003cp\u003eGNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e会话恢复\u003c/strong\u003e\n: 只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行\u003cstrong\u003escreen -r\u003c/strong\u003e就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令\u003cstrong\u003edetach\u003c/strong\u003e,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e …\u003c/strong\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e"
November 25, 2016
MySQL高可用架构几种方案
"\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2016/11/mysql_ha.jpeg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2016/11/mysql_ha.jpeg\" alt=\"mysql_ha\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eMySQL高可用架构之MHA \u003ca href=\"http://www.cnblogs.com/gomysql/p/3675429.html\"\u003ehttp://www.cnblogs.com/gomysql/p/3675429.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e基于PXC的MySQL高可用架构探索 \u003ca href=\"http://www.infoq.com/cn/presentations/mysql-high-availability-architecture-exploration-based-on-pxc\"\u003ehttp://www.infoq.com/cn/presentations/mysql-high-availability-architecture-exploration-based-on-pxc\u003c/a\u003e\u003c/p\u003e"
November 25, 2016
Laravel中的异常处理
"\u003cp\u003eEloquent try/catch on duplicate key Exception and delete?\u003c/p\u003e\n\u003cp\u003eI’ve a form for a new vendor where the controller listens for its POST.\nFrom there on I’m creating a new endor and the equivalential login for this vendor.\u003c/p\u003e\n\u003cp\u003eController :\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$vendor = Vendor::create( $request-\u0026gt;all() );\n$login = Vendor::createLogin($vendor-\u0026gt;vendor_id);\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ethe \u003cem\u003ecreateLogin\u003c/em\u003e function :\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epublic static function createLogin($lid){\n $name = self::find($lid)-\u0026gt;vendor_name;\n $name = explode(\u0026#39; \u0026#39;, $name); …\u003c/code\u003e\u003c/pre\u003e"
November 24, 2016
MySQL的InnoDB引擎强烈建议使用自增主键的原因
"\u003cp\u003e1)InnoDB使用聚集索引,数据记录本身被存于主索引的叶子节点上,这就要求同一个叶子节点内的各条数据记录按主键顺序存放,因此每当一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子,则开辟一个新的页(节点)。\u003c/p\u003e\n\u003cp\u003e如果表使用自增主键,那么每次插入新的记录时,记录就会顺序添加到当前索引节点后续位置,当一页写满,就会自动开辟一个新的页。这样就就会形成一个紧凑的索引结构,近似顺序填满,由于每次插入时也不需要移动所有数据,因此效率很高,也不会增加很多额外的开销维护索引。\u003c/p\u003e\n\u003cp\u003e如果使用非自增主键,由于每次插入主键的值近乎于随机,因此每次新纪录都要被插到现有索引页的中间某个位置,此时MySQL不得不为了将新纪录插到合适位置而移动数据,甚至目标页面可能已经被写到磁盘而从缓存中清除,这增加了很多额外开销,同时频繁的移动,分页造成了大量的碎片,得到不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建并优化填充页面。\u003c/p\u003e\n\u003cp\u003e2)由于MySQL从磁盘读取数据时一块一块来读取的,同时,根据局部性原理,MySQL引擎会选择预读一部分和你当前读数据所在内存相邻的数据块,这个 …\u003c/p\u003e"
November 23, 2016
[MySQL优化案例]系列 — slave延迟很大优化方法
"\u003cp\u003e\u003ca href=\"http://imysql.cn/2015/04/12/mysql-optimization-case-howto-resolve-slave-delay.shtml\"\u003ehttp://imysql.cn/2015/04/12/mysql-optimization-case-howto-resolve-slave-delay.shtml\u003c/a\u003e\u003c/p\u003e"
November 22, 2016
MySQL数据库的高可用性分析
"\u003cp\u003e\u003ca href=\"https://www.qcloud.com/community/article/203\"\u003ehttps://www.qcloud.com/community/article/203\u003c/a\u003e\u003c/p\u003e"
November 21, 2016
mysql中数据类型与占用空间大小的关系
"\u003cp\u003e1、 如一个表有10个int类型的字段,那么每行数据大小为\u003c/p\u003e\n\u003cp\u003e4(每个int类型占用4字节byte) * 10 = 40Bytes\u003c/p\u003e\n\u003cp\u003e[\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/mysql_int_datatype.png\" alt=\"mysql_int_datatype\"\u003e][1]\u003c/p\u003e\n\u003cp\u003e2、 如一个表有10个varchar(20)的字段,编码为utf8,那每行占用大小为\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3(每个汉字占用3字节) * 20 * 10 = 600Bytes\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e如果是英文字符的话,则为\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e1(1个字符占用1个字节) * 20 * 10 = 200Bytes\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e[\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/mysql_varchar_datatype.png\" alt=\"mysql_varchar_datatype\"\u003e][2]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e则以上两种情况 ,每行的数据均\u0026lt;8K (1024byte * 8) ,符合以下规则( 1024byte = 1KB)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e[\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/mysql.png\" alt=\"mysql\"\u003e]\u003c/p\u003e"
November 21, 2016
mysql压力测试工具spcc-mysql
"\u003cp\u003e\u003ca href=\"http://imysql.cn/2014/10/10/tpcc-mysql-full-user-manual.shtml\"\u003ehttp://imysql.cn/2014/10/10/tpcc-mysql-full-user-manual.shtml\u003c/a\u003e \u003ca href=\"http://imysql.com/tag/%E5%8E%8B%E6%B5%8B\"\u003ehttp://imysql.com/tag/压测\u003c/a\u003e\u003c/p\u003e"
November 18, 2016
Laravel框架数据库CURD操作、连贯操作使用方法
"\u003cp\u003eLaravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、Selects\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e检索表中的所有行\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$users = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;get();\nforeach ($users as $user)\n{\nvar_dump($user-\u0026gt;name);\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e从表检索单个行\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$user = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;where(\u0026#39;name\u0026#39;, \u0026#39;John\u0026#39;)-\u0026gt;first();\nvar_dump($user-\u0026gt;name);\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e检索单个列的行\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$name = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;where(\u0026#39;name\u0026#39;, \u0026#39;John\u0026#39;)-\u0026gt;pluck(\u0026#39;name\u0026#39;);\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e检索一个列值列表\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$roles = …\u003c/code\u003e\u003c/pre\u003e"
November 13, 2016
PHP中的max_input_vars指令
"\u003cp\u003e今天接到客服部工作人员反馈的一个问题,客户使用产品系统是允许用户添加产品属性的,而每个属性是由多个表单域组成 ,这样当每添加一个属性就等于添加了n个表单域,这个客户添加的非常的多,发现在提交保存的时候总是失败,提示其中一个表单元素的索引值不存在,经测试是发现服务端接收的一些表单域丢失了一部分。起初分析的是服务器接收的数据超出了php设置的max_post_size(其实当时已经设置了8M,足够使用了),修改了测试发现此问题仍然存在。后来将用户原来的一些添加的表单元素进行删除,再重新添加同样数据库表单域可以成功,但一旦超出一定数量的表单域就会发生丢失的情况,这个时候首先怀疑的是apache是否有类似限制接收隐藏域的指令,找了没有找到,紧接着在php中批到一个max_input_vars这个指令,意思就是说php中允许接收的最大表单域数据,到目前为止基本上是确定这个原因引起的了,奖其修改为2000,重启Apache,发现一切正常。\u003c/p\u003e\n\u003cp\u003e总结:提起php中的max_input_vars 估计很少人知道这个这个指令,因为他的使用场景实在是太少了,在php.ini中这个指令的定义是指服务端最大可以接 …\u003c/p\u003e"