潘逸安的博客

潘逸安

mysql主从复制

思路

  • 创建主服务器,配置mysql
  • 创建从服务器,配置mysql
  • 主服务器中创建用户slave,复制master status 的文件名和position
  • 改变从服务器的master配置
  • 开启从服务器的slave

编辑mysql配置

编辑master配置,/Users/pan/code/docker/mysql/master

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mysqld]
## 设置server_id,一般设置为IP,同一局域网内注意要唯一
server_id=100
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=edu-mysql-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

编辑slave配置,/Users/pan/code/docker/mysql/slave

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[mysqld]
## 设置server_id,一般设置为IP,注意要唯一
server_id=101
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## 防止改变数据(除了特殊的线程)
read_only=1

生成服务器

生成主服务器

1
docker run --name mysql_master -v /Users/pan/code/docker/mysql/master:/etc/mysql/conf.d -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

生成从服务器

1
docker run --name mysql_slave -v /Users/pan/code/docker/mysql/slave:/etc/mysql/conf.d -p 33307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

进入主服务器

1
docker exec -it mysql_master /bin/bash

创建mysql用户,授予权限

1
2
3
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
这里主要是要授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限。

获取master 的 file 和position

1
show master status;

进入从服务器

改变从服务器的master连接

1
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=929, master_connect_retry=30;  

命令解释:

  • master_host: Master 的IP地址
  • master_user: 在 Master 中授权的用于数据同步的用户
  • master_password: 同步数据的用户的密码
  • master_port: Master 的数据库的端口号
  • master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
  • master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
  • master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。

在 Slave 的 MySQL 终端执行查看主从同步状态

1
show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 是No,表明 Slave 还没有开始复制过程。相反 SlaveIORunning 和 SlaveSQLRunning 是Yes表明已经开始工作了

执行以下命令,开始开启主从同步:

1
2
start slave;
show slave status \G;

有时start slave的时候会提示caching_sha2_password相关的错误,多试几次貌似就可以了

mysql docker 主从复制实例

思路

  • 创建主服务器 mysql_master,获取ip地址,编辑mysql配置文件
  • 创建从服务器 mysal_slave,获取ip地址,编辑mysql配置文件
  • 主服务器的 mysql 中创建 slave 用户用于主从复制
  • 查看主服务器二进制日志文件的状态信息。记录Position参数
  • 改变mysql_slavemaster
  • 启动mysql_slaveslave
  • 查看slave状态,主从复制成功

配置docker环境

创建主服务器

1
2
3
4
5
6
7
docker run \
--name mysql_master \
-v /Users/panyian/code/docker/mysql_copy/master:/etc/mysql/conf.d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:latest

创建从服务器

1
2
3
4
5
6
7
docker run \
--name mysql_slave \
-v /Users/panyian/code/docker/mysql_copy/slave:/etc/mysql/conf.d \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:latest

命令详解, –name 设置名称,-v设置路径挂载,-p 端口映射,-e 环境变量设置,-d后台运行

修改MySQL配置

1
主服务器`mysql`配置文件``/Users/panyian/code/docker/mysql_copy/master/custom.cnf`

[mysqld]

设置server_id,一般设置为IP,同一局域网内注意要唯一

server_id=100

复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)

log-bin=edu-mysql-bin

为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

1
2

从服务器`mysql`配置文件`/Users/panyian/code/docker/mysql_copy/slave/custom.cnf`

[mysqld]

设置server_id,一般设置为IP,注意要唯一

server_id=101

复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

开启二进制日志功能,以备Slave作为其它Slave的Master时使用

log-bin=edu-mysql-slave1-bin

为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

relay_log配置中继日志

relay_log=edu-mysql-relay-bin

log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1

防止改变数据(除了特殊的线程)

read_only=1


composer阿里云镜像

全局配置(推荐)

所有项目都会使用该镜像地址:

1
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

取消配置:

1
composer config -g --unset repos.packagist

项目配置

仅修改当前工程配置,仅当前工程可使用该镜像地址:

1
composer config repo.packagist composer https://mirrors.aliyun.com/composer/

取消配置:

1
composer config --unset repos.packagist

调试

composer 命令增加 -vvv 可输出详细的信息,命令如下:

1
composer -vvv require alibabacloud/sdk

遇到问题?

  1. 建议先将Composer版本升级到最新:
    1
    composer self-update
  2. 执行诊断命令:
    1
    composer diagnose
  3. 清除缓存:
    1
    composer clear
  4. 若项目之前已通过其他源安装,则需要更新 composer.lock 文件,执行命令:
    1
    composer update --lock

nginx超时配置详解

Nginx的超时timeout配置详解
更新时间:2017年12月31日 10:28:50 作者:南琴浪博客 我要评论
本篇文章主要介绍了Nginx的超时timeout配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍 Nginx 的 超时(timeout)配置。分享给大家,具体如下:

Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。

keepalive_timeout

HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。

如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。

HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。

1
2

配置段: http, server, location

keepalive_timeout 60s;
client_body_timeout

指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。

1
2

配置段: http, server, location

client_body_timeout 20s;
client_header_timeout

客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

1
2

配置段: http, server, location

client_header_timeout 10s;
send_timeout

服务端向客户端传输数据的超时时间。

1
2

配置段: http, server, location

send_timeout 30s;
客户度连接nginx超时, 建议5s内

接收客户端header超时, 默认60s, 如果60s内没有收到完整的http包头, 返回408

1
2
3
4
5
6
Syntax: client_header_timeout time;
Default:
client_header_timeout 60s;
Context: http, server
Defines a timeout for reading client request header. If a client does not transmit the entire header within this time,
the 408 (Request Time-out) error is returned to the client.
接收客户端body超时, 默认60s, 如果连续的60s内没有收到客户端的1个字节, 返回408

1
2
3
4
5
6
7
Syntax: client_body_timeout time;
Default:
client_body_timeout 60s;
Context: http, server, location
Defines a timeout for reading client request body. The timeout is set only for a period between two successive read operations, not for the transmission of the whole request body.
If a client does not transmit anything within this time,
the 408 (Request Time-out) error is returned to the client.
keepalive时间,默认75s,通常keepalive_timeout应该比client_body_timeout大

1
2
3
4
5
6
Syntax: keepalive_timeout timeout [header_timeout];
Default:
keepalive_timeout 75s;
Context: http, server, location
The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections.
The optional second parameter sets a value in the “Keep-Alive: timeout=time” response header field. Two parameters may differ.
The “Keep-Alive: timeout=time” header field is recognized by Mozilla and Konqueror. MSIE closes keep-alive connections by itself in about 60 seconds.

可以理解为TCP连接关闭时的SO_LINGER延时设置,默认5s

1
2
3
4
5
6
7
Syntax: lingering_timeout time;
Default:
lingering_timeout 5s;
Context: http, server, location
When lingering_close is in effect, this directive specifies the maximum waiting time for more client data to arrive. If data are not received during this time,
the connection is closed. Otherwise, the data are read and ignored, and nginx starts waiting for more data again.
The “wait-read-ignore” cycle is repeated, but no longer than specified by the lingering_time directive.
域名解析超时,默认30s

1
2
3
4
5
6
Syntax: resolver_timeout time;
Default:
resolver_timeout 30s;
Context: http, server, location
Sets a timeout for name resolution, for example:
resolver_timeout 5s;
发送数据至客户端超时, 默认60s, 如果连续的60s内客户端没有收到1个字节, 连接关闭

1
2
3
4
5
6
Syntax: send_timeout time;
Default:
send_timeout 60s;
Context: http, server, location
Sets a timeout for transmitting a response to the client. The timeout is set only between two successive write operations,
not for the transmission of the whole response. If the client does not receive anything within this time, the connection is closed.
nginx与upstream server的连接超时时间

1
2
3
4
5
Syntax: proxy_connect_timeout time;
Default:
proxy_connect_timeout 60s;
Context: http, server, location
Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.
nginx接收upstream server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭

1
2
3
4
5
6
Syntax: proxy_read_timeout time;
Default:
proxy_read_timeout 60s;
Context: http, server, location
Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations,
not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.
nginx发送数据至upstream server超时, 默认60s, 如果连续的60s内没有发送1个字节, 连接关闭

1
2
3
4
5
6
Syntax: proxy_send_timeout time;
Default:
proxy_send_timeout 60s;
Context: http, server, location
Sets a timeout for transmitting a request to the proxied server. The timeout is set only between two successive write operations,
not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

使用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); } }

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;
}
}
}

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

xscope精确度量工具介绍

xScope精确度量工具介绍

勤奋的小卫子
1
2018.12.01 23:04:34
字数 677
阅读 1,391
一、xScope简介
这是一款Mac平台的设计精确度量工具,专门为设计师和开发人员创建的一套功能强大的工具,能够检查和测试屏幕上的图形和布局。能够帮助每个设计者快速,精确的完成工作,度量距离,角度的标尺,放大镜,精确垂直,水平标记辅助线,精确阔度,包含以下十个工具:

xScope
Mirro(镜像)
Text(文本)
Dimensions(尺寸)
Ruler(尺子)
Overlay(覆盖)
Screens(屏幕)
Loupe(放大镜)
Guides(指南)
Frames(框架)
Crosshair(十字)
二、功能详解
1.Mirro镜像
Mirro镜像
在Mac上使用这个功能时,可以轻松地在iOS和Apple Watch上查看您的设计和应用程序
这个功能需要从App Store下载配套应用程序才能完成(对开发人员用处不大)

2.Text文本
Text文本
可以使用这个工具来搜索,检查和格式化开发中的字符(感觉对开发人员来说并没什么卵用)

3.Dimensisons外形尺寸
Dimensisons外形尺寸
只需要将鼠标光标放在屏幕上,既可以找到任何屏幕元素的尺寸,非常适合在照片、按钮、界面元素上测量长度(这个功能挺不错)

4.Ruler标尺
Ruler标尺
功能强大的屏幕标尺,用于精确度量像素,包括缩放、旋转和边缘捕捉,可用于测量任何屏幕上的元素

5.Overlay栅格布局检查
Overlay栅格布局检查
适用于web开发,能够检查页面上的元素,支持整页截图,特别是响应式网页设计。

6.UIScreen屏幕
UIScreen屏幕
使用多种屏幕查看你的设计,或者查看在windows平台运行的IE9下的表现,无需将工作转移到其他平台,就能轻松解决这个问题(对设计的同学很有用)

7.放大镜
放大镜
可以精确的放大和检查元素,拾取色值并保存颜色供以后参考,还可以模拟常见的用户视觉问题

8.指南
屏幕快照 2018-12-01 下午10.19.44.png
显示垂直和水平向导,浮动在屏幕上的所有位置,查看是否对齐(不知道为什么我的只显示一根)

9.Framework框架
框架
创建一个自定义标记框,能够将框中内容进行截图,可以设置网格线以及固定比例窗口(一句话来说就是没卵用)

10.十字线
十字线
快速轻松地位和对齐屏幕上可见的任何点,显示当前鼠标位置相对于屏幕左上角的位置