nginx配置解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
nginx
# 使用的用户和组
user www www;
# 指定工作衍生进程数
worker_processes 2;
# 指定 pid 存放的路径
pid /var/run/nginx.pid;
# [ debug | info | notice | warn | error | crit ]
# 可以在下方直接使用 [ debug | info | notice | warn | error | crit ] 参数
error_log /var/log/nginx.error_log info;
events {
# 允许的连接数
connections 2000;
# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;
# 具体内容查看 http://wiki.codemongers.com/事件模型
use kqueue;
}
http {
include conf/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';

log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
client_header_timeout 3m; # 客户端向服务端发送一个完整的 request header 的超时时间
client_body_timeout 3m; # 客户端与服务端建立连接后发送 request body 的超时时间
send_timeout 3m; # 服务端向客户端传输数据的超时时间。
client_max_body_size 10m; # 允许客户端请求的最大单文件字节数
client_header_buffer_size 1k; # 缓冲区代理缓冲用户端请求的最大字节数
large_client_header_buffers 4 4k;

gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;

output_buffers 1 32k;
postpone_output 1460;
# 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
sendfile on;
tcp_nopush on;
tcp_nodelay on;
send_lowat 12000;

# 长连接超时时间
keepalive_timeout 75 20;

#lingering_time 30;
#lingering_timeout 10;
#reset_timedout_connection on;

server {
listen one.example.com;
server_name one.example.com www.one.example.com;

access_log /var/log/nginx.access_log main;

location / {
proxy_pass http://127.0.0.1/;
proxy_redirect off;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size 10m;
client_body_buffer_size 128k;

client_body_temp_path /var/nginx/client_body_temp;

proxy_connect_timeout 70;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_send_lowat 12000;

proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

proxy_temp_path /var/nginx/proxy_temp;

charset koi8-r;
}

error_page 404 /404.html;

location = /404.html {
root /spool/www;
}

location /old_stuff/ {
rewrite ^/old_stuff/(.*)$ /new_stuff/$1 permanent;
}

location /download/ {

valid_referers none blocked server_names *.example.com;

if ($invalid_referer) {
#rewrite ^/ http://www.example.com/;
return 403;
}

#rewrite_log on;

# rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3
rewrite ^/(download/.*)/mp3/(.*)\..*$
/$1/mp3/$2.mp3 break;

root /spool/www;
#autoindex on;
access_log /var/log/nginx-download.access_log download;
}

location ~* \.(jpg|jpeg|gif)$ {
root /spool/www;
access_log off;
expires 30d;
}
}
}

使用macro扩展laravel

使用宏(Macro)来扩展 Laravel 的数据库请求构建器
英文原文 / 翻译 / 3259 / 3 / 发布于 1年前

file

习惯了编写 SQL 语句的开发人员可能对 Laravel 的 ORM / Query Builder 并不是很了解。 当我们在需要用到查询构造器没有实现的方法时,通常会使用 select(DB::raw(…)) 来组装 SQL 表达式。

现在我们可以使用 Laravel 的 “Macros” 以更加灵活的方式来编写这些语句。 我将要执行的操作命名为 “insertOrUpdateMany” ,它将使用单个方法来构建和执行自定义 SQL 语句。

定义宏:
为了保证代码的清晰可读性,我将绑定到宏的查询生成器实例和回调的参数 “$rows” 传递到一个新的宏实例。

use Illuminate\Database\Query\Builder;
use App\Macros\InsertOrUpdateMany;
Builder::macro(‘insertOrUpdateMany’, function(array $rows){
return with(new InsertOrUpdateMany($this, $rows))->execute();
});
我们可以将这些定义放在 Laravel 的服务提供者里。

使用 Macro
我们的 Macro 功能类似于 Laravel 自带的 insert() 函数,返回结果是数据库影响的行数:

$affectedRowCount = DB::table(‘users’)->insertOrUpdateMany(array(
array(
‘id’ => 1,
‘name’ => ‘Test 1’,
‘email’ => ‘test1@test.local‘,
‘password’ => ‘XXX’
),
array(‘id’ => 2,
‘name’ => ‘Test 2’,
‘email’ => ‘test2@test.local‘,
‘password’ => ‘XXX’
),
array(
‘id’ => 3,
‘name’ => ‘Test 3’,
‘email’ => ‘test3@test.local‘,
‘password’ => ‘XXX’
),
));
dd($affectedRowCount);
数据库查询类
数据库查询类 InsertOrUpdateMany 里将处理各种的 SQL 拼接和查询处理。类的构建函数里我们将获取到 Builder 和 PDO 连接,剩下的一切就变得很容易了,PDO 的 affectingStatement 直接就可返回数据库影响的行数。很容易吧,下面是完整的类代码:

InsertOrUpdateMany.php

builder = $builder; $this->entries = $entries; $this->pdo = $this->builder->getConnection()->getPdo(); $this->prepareValues(); $this->assembleStatement(); } /** * Prepare the values. * @return void */ private function prepareValues() { //获取 Columns Array $this->columnsArray = $this->getColumnsArray(); //构建 Columns 字串 $this->columnsString = $this->collapse($this->columnsArray); //构建数据 $this->valuesString = $this->collapse(array_map(function ($row) { return $this->encase($this->collapse($this->escape($row))); }, $this->entries)); //构建更新的字串 $this->updateString = $this->collapse(array_map(function ($value) { return "$value = VALUES($value)"; }, $this->columnsArray)); } /** * 组合 SQL 语句 * @return void */ private function assembleStatement() { $this->sql = "INSERT INTO {$this->builder->from} ({$this->columnsString}) VALUES {$this->valuesString} ON DUPLICATE KEY UPDATE {$this->updateString}"; } /** * 获取表结构数组 * @return array */ private function getColumnsArray() { return array_keys(reset($this->entries)); } /** * 处理数组 * @param array $values * @return array */ private function escape(array $values) { return array_map(function ($value) { return $value ? $this->pdo->quote($value) : 'NULL'; }, $values); } /** * 合并数组 * @param array $values * @return string */ private function collapse(array $values) { return implode(',', $values); } /** * 封装字串 * @param string $value * @return string */ private function encase(string $value) { return '(' . $value . ')'; } /** * 执行语句 * @return int */ public function execute() { return $this->builder->getConnection()->affectingStatement($this->sql); } }

laravel获取表字段

1
2
3
4
5
6
7
8
\DB::setDefaultConnection('jshop');
\DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
$manager = \DB::getDoctrineSchemaManager();
$tableNames = $manager->listTableNames();
$tables = [];
foreach ($tableNames as $name) {
$columns = array_sort($manager->listTableColumns($name));
}

redis事务机制实现秒杀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$client = new \Predis\Client();
// 监视键
$client->watch('sale_goods_1');
// 获取键
$res = $client->get('sale_goods_1');
$count = 3;

if ($res >= $count) {
dump($res);
exit('结束');
} else {
// 开始事务
$client->multi();
// 自增销量
$client->incr('sale_goods_1');

// 发送更新销量到队列


// 提交事务
$client->exec();
return '成功';
}

laravel

EventServiceProvider$listen编写监听文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 记录当前的开单详情
* @package App\Listeners
*/
class LogCustomOrder implements ShouldQueue
{
public $connection = 'redis';

/**
* 任务最大尝试次数
*
* @var int
*/
public $tries = 2;


/**
* 任务运行的超时时间。
*
* @var int
*/
public $timeout = 500;
}

队列要开启 php artisan queue:work redis
然后即可以

触发事件

1
event(new CustomOrderPaid($customOrder));

CentOS7.4 搭建ngrok 内网穿透

CentOS7.4 搭建ngrok 内网穿透
Qin07 Qin07 发布于 2018/11/09 14:51 字数 632 阅读 8K 收藏 10 点赞 2 评论 0
ngrokCentOSLinux
#1、安装git

安装git

yum install git
#2、安装GO语言环境

安装GO语言环境

yum install golang
#检查下go的env环境变量
go env
#3、下载ngrok

github.com 下载 ngrok源码

cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
#4、生成证书

域名xxx.com 换成自己的

cd /usr/local/ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj “/CN=xxx.com” -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj “/CN=xxx.com” -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
#5、 拷贝证书覆盖ngrok原来的证书

过程会让你输入y 回车

cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
编译生成服务端

编译生成服务端

cd /usr/local/ngrok/
GOOS=linux GOARCH=amd64 make release-server
编译生成客户端

32位linux客户端:

GOOS=linux GOARCH=386 make release-client

64位linux客户端:

GOOS=linux GOARCH=amd64 make release-client

#32位windows客户端:
GOOS=windows GOARCH=386 make release-client

#64位windows客户端:
GOOS=windows GOARCH=amd64 make release-client

#32位mac平台客户端:
GOOS=darwin GOARCH=386 make release-client

#64位mac平台客户端:
GOOS=darwin GOARCH=amd64 make release-client

#ARM平台linux客户端:
GOOS=linux GOARCH=arm make release-client

生成客户端文件位置

/usr/local/ngrok/bin
启动服务器端
cd /usr/local/ngrok/bin

./ngrokd -domain=”xxx.com” -httpAddr=”:800” -httpsAddr=”:801” -tunnelAddr=”:8443”

指定TLS证书和密钥

./ngrokd -tlsKey=”/path/to/tls.key” -tlsCrt=”/path/to/tls.crt” -domain=”xxx.com” -httpAddr=”:800” -httpsAddr=”:801” -tunnelAddr=”:8443”
客户端配置文件ngrok.yml

新建ngrok.yml

server_addr: xxx.com:8443
trust_host_root_certs: false
本地启动客户端

目录下打开命令行

然后使用以下任一命令运行ngrok:

ngrok -config ngrok.yml 8080
ngrok -config ngrok.yml -subdomain wx 8080 # 或者指定域名 wx.xxx.com

ngrok 加入系统服务 开机启动
vi /usr/lib/systemd/system/ngrok.service

在CentOS 7上利用systemctl添加自定义系统服务

[Unit]
Description=ngrok
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=1min
ExecStart=/usr/local/ngrok/bin/ngrokd -domain=xqzgg.cn -httpAddr=:800 -httpsAddr=:801 -tunnelAddr=:8443 %i
ExecStop=/usr/bin/killall ngrok
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重载系统服务:

systemctl daemon-reload

设置开机启动

systemctl enable ngrok.service

启动服务

systemctl start ngrok.service
常用命令
#设置开机启动:
systemctl enable ngrok.service
#启动服务:
systemctl start ngrok.service
#停止服务:
systemctl stop ngrok.service
附带一份 nginx.conf 配置文件

ngrok

upstream ngrok {
server 127.0.0.1:800;
keepalive 64;
}

ngrok 穿透

server {
listen 80;
server_name *.xxx.com;

location / {
    proxy_pass http://ngrok;
    proxy_redirect off;
    proxy_set_header Host $http_host:800;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    expires 5s;
}

}

Supervisor配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[program:flask]
# [program:程序名]
command=python /Users/pan/code/python/learn_flask/app.py ; 程序启动命令
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒,非必填
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启,true表示无条件重启
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/Users/pan/logs/flask.out


;process_name= ;进程名称,默认 %(program_name)s 非必填
;numprocs= ;进程数,默认1,非必填
;numprocs_start= ;启动进程数,默认0,非必填
;priority=999 ; 进程启动优先级,默认999,值小的优先启动,非必填
;autostart=true ; 在supervisord启动的时候也自动启动,默认true,非必填
;startretries=3 ; 启动失败自动重试次数,默认是3,非必填
;user=pan ; 用哪个用户启动进程,默认是root
;stopsignal= ; 请求停止时用来终止程序的信号。这可以是TERM(终止)、HUP(平滑启动)、INT(退出)、QUIT(退出)、KILL(强制终止)、USR1或USR2中的任意一个。默认TERM,非必填
;stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程,非必须设置
;killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程,非必须设置
;redirect_stderr=true ; 如果为true,则stderr的日志会被写入stdout日志文件中默认为false,非必须设置
;stdout_logfile=/a/path ; 子进程的stdout的日志路径,可以指定路径,AUTO,none等三个选项。设置为none的话,将没有日志产生。设置为AUTO的话,将随机找一个地方生成日志文件,而且当supervisord重新启动的时候,以前的日志文件会被清空。当 redirect_stderr=true的时候,sterr也会写进这个志文件
;stdout_logfile_maxbytes=1MB ; 日志文件最大大小,和[supervisord]中定义的一样。默认为50
;stdout_logfile_backups=10 ; 和[supervisord]定义的一样。默认10
;stdout_capture_maxbytes=1MB ; 这个东西是设定capture管道的大小,当值不为0的时候,子进程可以从stdout发送信息,而supervisor可以根据信息,发送相应的event。默认为0,为0的时候表达关闭管道。。。非必须项
;stdout_events_enabled=false ; 当设置为ture的时候,当子进程由stdout向文件描述符中写日志的时候,将触发supervisord发送PROCESS_LOG_STDOUT类型的event默认为false。。。非必须设置

;stderr_logfile=/a/path ; 这个东西是设置stderr写的日志路径,当redirect_stderr=true。这个就不用设置了,设置了也是白搭。因为它会被写入stdout_logfile的同一个文件中默认为AUTO,也就是随便找个地存,supervisord重启被清空。。非必须设置
;stderr_logfile_maxbytes=1MB ; 这个出现好几次了,就不重复了
;stderr_logfile_backups=10 ; 这个也是
;stderr_capture_maxbytes=1MB ; 这个一样,和stdout_capture一样。 默认为0,关闭状态
;stderr_events_enabled=false ; 这个也是一样,默认为false

;environment= ; 子进程环境变量
;serverurl= ; 子项目 UNIX socket路径
1
2
3
4
5
6
7
8
[program:da_tang_yun]
# [program:程序名]
command=php artisan queue:work redis ; 程序启动命令
directory=/home/wwwroot/da_tang_yun
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒,非必填
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启,true表示无条件重启
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile=/home/wwwlogs/supervisor/da_tang_yun.log

Intervention image 中文文档

创建

  • cache() 创建缓存的图像
  • canvas() 创建一个新的空图像资源
  • backup() 备份当前图像状态
  • make() 创建新的图像资源

插入

  • circle() 画一个圆
  • ellipse() 绘制椭圆
  • fill() 填充
  • insert(mixed $source, string $position = ‘top-left’, int $x = 0, int $y = 0) 插入
  • line() 画一条线
  • pixel() 绘制单个像素
  • polygon() 绘制多边形
  • rectangle() 绘制一个矩形
  • text() 插入文本

修改

  • blur() 模糊图像
  • brightness() 更改图像的亮度
  • colorize() 更改图像的色彩平衡
  • contrast()更改图像的对比度
  • crop() 裁剪图像
  • flip() 翻转
  • gamma() 应用伽玛校正
  • greyscale() 将图像转换为灰度版本
  • fit() 合并裁剪和调整大小
  • heighten() 按给定高度按比例调整图像大小
  • invert() 反转图像的颜色
  • mask() 对图像应用Alpha遮罩
  • opacity() 设置图像的不透明度
  • orientate() 自动调整图像方向
  • pixelate() 将图像像素化
  • reset() 重置图像实例
  • resize() 调整当前图像的大小
  • resizeCanvas() 调整图像边界大小
  • rotate() 旋转图像
  • sharpen() 锐化图像
  • stream() 获取流
  • trim() 修减掉图像的一部分
  • widen() 按给定宽度按比例调整图像大小

获取

  • encode() 编码图像
  • exif() 从图像读取Exif数据
  • filesize() 文件大小
  • filter() 筛选器
  • getCore() 读取图像的核心实例
  • height() 获取图像的高度
  • interlace() 切换隔行扫描模式
  • iptc() 从图像读取IPTC元数据
  • limitColors() 设置最大颜色数
  • mime() 获取MIME类型
  • pickColor() 从图像中挑选一种颜色
  • response() 将图像附加到新的HTTP响应
  • save() 保存
  • width() 获取宽度

删除

  • destroy() 销毁图像—释放内存

Sketch 快捷键

Insert 插入
New rtboard 新画板 A
Slice 切片 S
Rectangle 矩形 R
Rounded Rectangle 圆角矩形 U
Oval 椭圆形 O
Line 直线 L
Vector Point 路径 V
Pencil 铅笔 P
Text 文本 T
Type 字符
Bold 粗体 Cmd + B
Italic 斜体 Cmd + I
Underline 下划线 Cmd + U
Increase Font Size 放大字体 Alt + Cmd (+) +
Decrease Font Size 缩小字体 Alt + Cmd (+) –
Increase Character Spacing 放大字距 Alt + Control + L
Decrease Character Spacing 缩小字距 Alt + Control + T
Change Font 选择字体 Cmd + T
Convert Text to Outlines 将文本转换为大纲 Shift + Cmd + O
Align Left 左对齐 Cmd + Shift + {
Align Center居中对齐 Cmd + Shift +
Align Right 右对齐 Cmd + Shift + }
Special Characters 表情字符 Control + Cmd + Space

Table Relations 表关系

⌘   3

Table Info 表信息

⌘   4

Custom Query 自定义查询

⌘   5

Table Triggers 表触发器

⌘   6

General Shortcuts 常用快捷键


New Window (Connection File) 新窗口(连接文件)

⌘   N

New Tab(Connection File) 新标签(连接文件)

⌘   T

Add Connection To Favorites 添加连接到收藏夹

⇧   ⌘   A

Open (Connection File or SQL File) 打开(连接文件或者SQL文件)

⌘   O

Open current Connection File in New Window在新窗口打开当前连接

⌥   ⌘   O

Save (Connection File)保存(连接文件)

⌘   S

Save As (Connection File) 另存为(连接文件)

⇧  ⌘   S

Save Query保存查询

^  ⌘   S

Close (Connection File)关闭(连接)

⌘   W

Close All (Connection File) 关闭所有(连接)

⌥   ⌘   W

Print打印

⌘   P

Import 导入

⇧   ⌘   I 

Show Console Window 显示控制台

⇧   ⌘   K

Clear Console 清空控制台

⌘   K 

Back in History 后退

⌃   ⌥   ←

Forward in History 向前

⌃   ⌥   →

Select Next Tab 选择下一个标签

⌃   ⇥

Select Previous Tab 选择上一个标签

⌃   ⇧   ⇥ 

Insert NULL value 插入NULL

⌃   ⇧   N

Copy Create Table Syntax 复制创建表语法

⇧   ⌘   C

Show Create Table Syntax 显示创建表语法

⌥   ⌘   S

Refresh Databases 刷新数据库

⇧   ⌘   R

Choose Database 选择数据库

⇧   ⌘   D

Show Server Variables 显示服务器变量

⇧   ⌘   V

Show Server Processes 显示服务器进程

⌥   ⌘   P

Refresh Tables 刷新数据表

⌃   ⌘   R

Flush Privileges 刷新权限

⇧   ⌘   F

User Accounts… 用户账号

⌘   U

Copy selection / Copy selected row(s) 复制选择/复制选中的行

⌘   C

Copy selected row(s) with column names 复制选中的行包括列名

⌥   ⌘   C

Copy selected row(s) as SQL INSERT 复制选中的行包括插入语句

⌃   ⌥   ⌘   C

Show/Hide Toolbar 显示/隐藏工具栏

⇧   ⌘   T

Filter Table Content 过滤表内容

⌃   ⌘   F

Filter Tables 过滤表

⌃   ⌥   ⌘   F

Bundle Editor 构建编辑器

⌃   ⌥   ⌘   B

Navigator 导航

⌃   ⌥   ⌘   N

Select 选择


Select current word 选择当前单词

⌃   W 

Select current line 选择当前行

⌃   L

Select enclosing brackets 选择括号内

⇧   ⌘   B

Select all 选择所有

⌘   A

Table Structure Tab 表结构标签


Add a new field 新增字段

⌥   ⌘   A

Delete selected field 删除所选字段

Duplicate selected field 选中字段的副本

⌘   D

Refresh table structure 刷新表结构

⌘   R

Edit table details 编辑表详情

⌘   4

Table Content Tab 表内容标签


Add a new row 新增行

⌥   ⌘   A

Delete selected row(s) 删除选中行

Duplicate selected row 选中行的副本

⌘   D

Refresh table contents 刷新表内容

⌘   R

Custom Query Tab 自定义查询标签


Version 1.0 and later 1.0版本以后

Run all queries 运行所有查询

⌥   ⌘   R

Run current query or selection 运行当前或者选中查询

⌅ or ⌘   R

Versions 0.9.9.1 and earlier 1.0版本以前

Run all queries 运行所有查询

⌅ or ⌘   R

Run current query or selection 运行当前或者选中查询

⌥   ⌘   R

Shift line or selection rightwards 左缩进

⌘   [

Shift line or selection leftwards 右缩进

⌘   ]

(Un)Comment line or selection 注释选中行

⌘   /

(Un)Comment current query 注释当前查询

⌥   ⌘   /

Completion (narrow-down list / fuzzy search) 完成(模糊查询)

    Insertion of an item 插入项目

↩ , ⇥ , Double-Click

    Insertion full schema reference

⇧ + ↩ , ⇧   ⇥ , ⇧   Double-Click

    Keep Window Open after Insertion 保存窗口打开后插入

holding down ⌃while insertion

    Fuzzy Search 模糊查询

⌃   ⎋

    Close Window 关闭窗口

Spell Checker Completion (narrow-down list) 拼写检查

F5

Select current query 选择当前查询

⌃   Y

Show MySQL help for current word or selection 显示当前单词或者选择的mysql帮助

⌃   H

Open query favorites popup menu 打开查询收藏夹弹窗

⌥   ⌘   F

Open query history popup menu 打开查询纪录弹窗

⌥   ⌘   Y

Insert previous history item (successively) 插入上一个语句(连续的)

⌃ +  ↑

Insert next history item (successively) 插入下一个语句(连续的)

⌃   ↓

Show all database names as completion list 显示所有数据库名到补齐列表

⌥   ⌘   1

Show all table and view names as completion list 显示所有表名到补齐列表

⌥   ⌘   2

Show all table names from current database as completion list 显示当前数据库的所有表名到补齐列表

⌥   ⌘   3