MySQL地理围栏数据处理实践

Publish: April 15, 2020 Category: 编程,代码分享 1 Comment

我们本次实践的主要内容

  • 地理围栏数据构建
  • mysql 如何使用geo相关字段类型
  • 围栏算法计算

地理围栏数据构建

使用DDL创建一个数据库模式:

CREATE TABLE `geo_1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fence_point` point NOT NULL COMMENT '中心点',
  `fence_polygon` polygon NOT NULL COMMENT '单个围栏',
  `fence_multipolygon` multipolygon NOT NULL COMMENT '多围栏',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

使用原生sql语句插入几条数据

INSERT INTO `geo_1`(
    `id`,
    `fence_point`,
    `fence_polygon`,
    `fence_multipolygon`
)
VALUES(
    NULL,
    GEOMFROMTEXT('POINT(117.134516 36.672215)'),
    GEOMFROMTEXT(
        'POLYGON((117.147711 36.692958,117.152174 36.664804,117.120588 36.659434,117.116297 36.678848,117.147711 36.692958))'
    ),
    GEOMFROMTEXT(
        'MULTIPOLYGON(((117.143528 36.678686,117.144215 36.676758,117.142927 36.67669,117.142412 36.677997,117.143528 36.678686)),((117.144837 36.675829,117.144794 36.674487,117.143743 36.674659,117.14385 36.675881,117.144837 36.675829)),((117.127574 36.670235,117.124227 36.668858,117.124785 36.666448,117.13075 36.667412,117.127574 36.670235)))'
    )
);

特别要注意的几点:

  • POINT类型是单个点,构建只需要一个POINT类型数据即可
  • POLYGON类型或者MULTIPOLYGON中的数据必须是首位相连,也就是第一组数据和最后一组数据是相同的,以构成一个闭合的多边形。

阅读剩余部分...

LNMP下单独使用let's encrypt签ssl证书和nginx配置

Publish: April 13, 2020 Category: 运维 No Comments

lnmp本身支持自签证书,这里只说使用用acme.sh脚本单独签发证书。

lnmp环境由于修改了原生nginx的一些规则,需要稍作修改。本文只记录我自己签发证书过程。

安装acme.sh

curl https://get.acme.sh | sh

生成证书

lnmp 环境下做了部分配置变更,不建议直接使用--nginx方式验证和生成。


acme.sh --issue -d www.evenvi.com --webroot /home/wwwroot/www.evenvi.com/public/

证书安装

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

acme.sh --installcert -d www.evenvi.com --key-file /home/wwwroot/www.evenvi.com/cert/key.pem --fullchain-file /home/wwwroot/www.evenvi.com/cert/cert.pem --reloadcmd "/etc/init.d/nginx reload"








阅读剩余部分...

mysql bin-log日志占满磁盘问题解决

Publish: April 7, 2020 Category: 运维 No Comments

开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,最终导致服务器磁盘空间被binlog日志占满,导致MySQL数据库出错。

正常情况下(磁盘没有被完全占满)我们按照此情况处理即可,直接修改日志过期时间,重启服务

/etc/my.cnf  #配置文件位置

expire_logs_days = 3  #自动删除3天前的日志。默认值为0,表示从不删除。

log-bin=mysql-bin   #注释掉之后,会关闭binlog日志

binlog_format=mixed   #注释掉之后,会关闭binlog日志

:wq!  #保存退出

如果磁盘已经完全被占满,这时候mysql服务可能起不来。
需要手动删除一部分日志数据。

比如我们的日志目录在:

root@iZ8vbbdf6epai4kh5einddZ:/usr/local/mysql/var#

删掉一个比较旧的日志文件

rm mysql-bin.000051
 
然后启动服务
/etc/init.d/mysql start

再用df命令看下磁盘空间

df -h

此方法只适用于单机部署下的mysql日志清理。集群请参考其他文章。