Linux 多条命令同时执行的一些姿势

命令之间用 ; 隔开

说明:各命令的执行结果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。

root@ubuntu:/# echo $HOME; echo $LANG
/root
en_US.UTF-8

命令之间用 && 隔开

说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。

root@ubuntu:~# cd Cloud && mkdir test
root@ubuntu:~/Cloud# ls
test
root@ubuntu:~/Cloud# cd Cloudaaa && mkdir test
-bash: cd: Cloudaaa: No such file or directory

命令之间用 || 隔开

说明:|| 是或的意思,只有前面的命令执行失败后才去执行下一条命令

/* && 不会输出 123 */
root@ubuntu:~/Cloud# cd Cloudaaa && echo '123'
-bash: cd: Cloudaaa: No such file or directory
/* 用 || 可以输出 123,因为 cd Cloudaaa 失败了 */
root@ubuntu:~/Cloud# cd Cloudaaa || echo '123'
-bash: cd: Cloudaaa: No such file or directory
123

命令之间用 | 隔开

说明:在命令行中,| 表示管道,管道可以将一个命令的输出导向另一个命令的输入,从而让两个(或者更多命令)像流水线一样连续工作,不断地处理文本流。

root@ubuntu:~/Cloud# env | grep LANG
LANG=en_US.UTF-8
LANGUAGE=en_US:

env 获取所有环境变量将结果传给下一个命令,所以用 grep 搜索 LANG 就会有结果显示。

Mysql开启慢查询记录耗时SQL语句

简述

  网站数据达到一定的数量级,就会有页面卡,出现50x等各种问题,mysql服务器CPU居高不下等症状。因为sql缓慢导致php缓慢,导致超时。这个时候应该先从mysql入手。就像看病一样,要先找病根,记录慢查询日志,就是观察期,观察到迹象我们就可以对症下药了。

配置参数说明

  主要靠三个参数来配置,我们用通俗的话来解释。

  1. 开关(不多说,关闭就不记录了)
    slow_query_log
  2. log存储位置(记录下来,我得知道你在哪吧,一般将它存放到mysql数据目录,也就是和你创建的数据库在同级目录)
    slow_query_log_file
  3. 超时时间 (我得让你知道多慢我忍不了)
    long_query_time

设置方法

方法一:全局变量设置

  1. 将 slow_query_log 全局变量设置为“ON”状态
    mysql> set global slow_query_log='ON'; 
  2. 设置慢查询日志存放的位置(默认在 mysql data 目录下)
    mysql> set global slow_query_log_file='slow.log';
  3. 记录超时1秒的sql语句
    mysql> set global long_query_time=1;

    注意:无需重启即可生效,但重启会失效。set global 改的参数是暂时的,想重启不变请配合修改mysql配置文件。

- 阅读全文 -

本地 Git 项目推送至码云或GitHub

使用场景:本地有版本库,云端还没有,正打算push到云端。

  1. 命令 git init 初始化git仓库
  2. 命令 git add . (保存到缓存区)
  3. 命令 git commit -m "注释" (推送到本地库中)
  4. 在码云上新建版本仓库;
  5. 命令 git remote add origin + 仓库地址 (码云上新建项目点进去克隆或复制的链接)
  6. 命令 git pull origin master (把分支上的文件拉下来)
    可能遇到的问题:git pull 失败 ,提示:fatal: refusing to merge unrelated histories
    git pull origin master --allow-unrelated-histories
  7. 命令 git push origin master (推送到远端仓库也就是码云上)
    git push --set-upstream origin master 设置默认的云端仓库,以后只用 git push 即可!

Nginx 502 upstream sent too big header while reading response header from upstream

  线上部署的一个项目,通过OAuth登录完成之后,跳转回来就会出现502错误,错误必现。必现错误不用慌,从log里面仔细排查这个时间段的每一条记录,access log里面一般不会记录具体原因,只会记录502请求状态,想要查看具体原因还得看error log,如果log配置没搞好的话,建议先配置好log,然后再触发一次错误,这样就可以分析错误了。

nginx错误日志error_log日志级别

解决方法:在配置文件中加入这两个配置

location ~ .php$ {
    fastcgi_buffer_size 128k;
    fastcgi_buffers 32 32k;
}

重新加载Nginx,继续测试,正常没有报错!

Mysql错误 Index column size too large. The maximum column size is 767 bytes

  起因:准备上线一个phphub5的项目,本地是mysql5.7,数据库是没有问题的,线上环境5.5,版本较低,导入的时候出错,现在记录一下解决过程。

[Err] 1709 - Index column size too large. The maximum column size is 767 bytes.

错误原因是因为索引的字段太长,在 stack overflow 上找到了答案。查看原地址

原来SQL:

ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

修改之后SQL:

ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

解决方法:在 CREATE TABLE 语句后面加上 ROW_FORMAT=DYNAMIC 就可以了。