Archive

Archive for the ‘零敲碎打’ Category

[zsh]oh-my-zsh插件git目录卡顿的情况处理

April 1st, 2020 No comments

oh-my-zsh在git目录下执行命令会卡顿明显,简单的cd和ls都会
经查是agnoster主题的问题,会读取git的配置信息,如果项目目录下有太多的文件,卡顿会非常明显。
果然美观和性能最后都是二选一

可以使用以下命令禁止zsh自动获取git信息,解决卡顿问题

git config --global oh-my-zsh.hide-status 1

如果针对单个目录,可以在 git 项目目录执行

设置 oh-my-zsh 不读取文件变化信息

git config --add oh-my-zsh.hide-dirty 1

可以再设置 oh-my-zsh 不读取任何 git 信息

git config --add oh-my-zsh.hide-status 1

参考
https://my.oschina.net/u/614511/blog/646012

Categories: 零敲碎打 Tags:

[Ubuntu] Ubuntu17.04 安装curl

April 1st, 2020 No comments

Ubuntu 17.04 安装完毕后,没有curl,需要手动安装curl

sudo apt-get install curl

报错:没有这个软件、

尝试使用添加ppa方式,结果Ubuntu 17.04下无效

sudo add-apt-repository ppa:costamagnagianfranco/ettercap-stable-backports 
sudo apt-get update 
sudo apt-get install curl

最后改为使用源代码方式安装
源代码

#下载
wget https://curl.haxx.se/download/curl-7.58.0.tar.gz
#解压
tar xvf curl-7.58.0.tar.gz
#配置
cd curl-7.58.0
./configure
#编译
make
#安装
sudo make install

奇怪的是Ubuntu17.04 上 libcurl是有的,为啥去掉curl,不知道基于何种考虑

Categories: 系统管理, 零敲碎打 Tags:

[Ubuntu]使用open-iscsi发起iscsi连接Target

January 19th, 2020 No comments

名下有多台VPS服务器放在不同的云供应商那里,定期备份服务器数据成了很棘手的问题。
习惯上会使用挂载nfs方式,使用s3fs-fuse先将S3的Bucket挂载到本机分区,然后向该分区写入需要备份的文件,

但是近期S3的接入稳定性确实很差,即使是AWS的老家美国,使用s3fs-fuse挂载的分区,也不能有比较稳定的读写。
碰到大量文件和持续读写的情况,效果非常不理想

近期发现使用 AWS Storage Gateway可以直接让虚拟机连接到iscsi的target,然后操作相应的LUN和卷。iscsi协议因为使用了比HTTP/S更低的TCP/IP协议,相对s3fs方式可以更稳定。

另外 AWS Storage Gateway的传入流量是免费的,只收取存储到S3,EBS的的存储费用。

服务器版本:Ubuntu18.04 LTS
设备目标:/dev/sdc

一、安装和配置iscsi发起端程序
1.安装open-scsi和utils

#安装open-scsi和utils
sudo apt-get install open-iscsi open-iscsi-utils

2.发现iscsi target

#发现iscsi target
sudo iscsiadm -m discovery -t sendtargets -p XXX.XXX.XXX.XXX:3260

3.登陆target

#登陆target
sudo iscsiadm -m node --targetname iqn.1997-05.com.amazon.XXXXXX -p XXX.XXX.XXX.XXX:3260 --login

二、挂载硬盘

1.发现并分区格式化磁盘

fdisk -l

2.分区格式化LUN

fdisk /dev/sdc
mkfs.ext4 /dev/sdc1

3.挂载到指定

sudo mkdir /mnt/backup
sudo mount /dev/sdc1 /mnt/backup

4.卸载硬盘

sudo unmount /mnt/backup

三、开机自动连接到LUN,挂载硬盘

1.开机自动登陆target
修改/etc/iscsi/iscsid.conf,开启自动登陆到Gateway

vi /etc/iscsi/iscsid.conf
#自动开启
node.startup = automatic

2.修改/etc/fstab,实现开机自动挂载

#获取文件系统的UUID
tune2fs -l

修改/etc/fstab,实现开机自动挂载

#修改/etc/fstab
sudo vi /etc/fstab

#在/etc/fstab中添加

UUID=6dba31ff-xxxx-4430-bbd2-c1a932a53308 /backup ext4 _netdev 0 0

几个需要注意的地方:
1.如果跟AWS Storage Gateway连接期间发生未知中断,可以试试强制刷新设备

udevadm test /sys/block/sdc

2.如果发生连接超时的情况,通常跟网络质量有关,AWS推荐可以修改iscsid.conf

vi /etc/iscsi/iscsid.conf
# 修改连接超时参数
node.session.timeo.replacement_timeout = 600 
node.conn[0].timeo.noop_out_interval = 60
node.conn[0].timeo.noop_out_timeout = 600

参考
https://docs.aws.amazon.com/storagegateway/latest/userguide/initiator-connection-common.html#CustomizeLinuxiSCSISettings

Categories: 系统管理, 零敲碎打 Tags:

PostgreSQL使用PL/SQL和游标实现按日期批量执行

March 26th, 2019 No comments

现有的DWH系统的是按天创建数据表的,使得定期维护变得麻烦,例如每个月底需要将按当月产生的临时表archive。

方式1.批量生成SQL,按固定的日期值生成一堆SQL,SQL生成方法多样。但是需要确认全部sql是否正确。

方式2.编写PL/SQL function,使用游标方式批量执行。

DROP FUNCTION fun_datecursor(from_date text,to_date text,cond text);
CREATE OR REPLACE FUNCTION fun_datecursor(from_date text,to_date text,cond text) RETURNS text
AS $ 
DECLARE
    cur_date refcursor;
    buffer text := '';
    var_day DATE;
BEGIN
OPEN cur_date FOR EXECUTE 'SELECT generate_series('''|| from_date ||'''::date,'''|| to_date ||'''::date,'''|| cond ||''')'; 
    loop  --开始循环
        fetch cur_date INTO var_day;  --将游标指定的值赋值给变量
        IF found THEN 
             ---------------------------------------
             --任意的逻辑,或调用其他function
             ---------------------------------------
            buffer:= buffer || to_char(var_day,'yyyyMMdd'); 
           ELSE 
            exit; 
            END IF; 
    END loop;  --结束循环
close cur_date;  --关闭游标
RETURN buffer;
END
$ LANGUAGE plpgsql;

执行function

SELECT fun_datecursor('2008-03-01','2008-03-31','1 day’);
Categories: 零敲碎打 Tags: , ,

PostgreSQL创建ReadOnly只读用户

March 26th, 2019 No comments

PostgreSQL可以通过schema和table级别对数据表进行只读控制
一般会使用PostgreSQL创建只读用户,然后给予相应的只读权限方式实现

通过使用

-- 创建readonly_user用户,密码为readonly_password
CREATE USER readonly_user WITH encrypted password 'readonly_password';
-- 设置readonly_user用户为只读事务
ALTER USER readonly_user SET default_transaction_read_only=ON;
-- 授予usage权限给到readonly_user用户
GRANT usage ON schema "public" TO readonly_user;
-- 将默认"public"schema下新建表的读取权限授予给readonly_user
ALTER DEFAULT privileges IN schema "public" GRANT SELECT ON TABLES TO readonly_user;
-- 授予select权限给到readonly_user用户
GRANT SELECT ON ALL TABLES IN schema "public" TO readonly_user;
GRANT SELECT ON ALL sequences IN schema "public" TO readonly_user;
-- 允许readonly_user用户连接到指定数据库
GRANT CONNECT ON DATABASE splrp_dev TO readonly_user;

注意:
已有的数据表进行readonly设置,可以通过

-- 授予usage权限给到readonly_user用户
GRANT usage ON schema "public" TO readonly_user;
-- 授予select权限给到readonly_user用户
GRANT SELECT ON ALL TABLES IN schema "public" TO readonly_user;
GRANT SELECT ON ALL sequences IN schema "public" TO readonly_user;

对于将来创建的新表,则需要通过

-- 将默认"public"schema下新建表的读取权限授予给readonly_user
ALTER DEFAULT privileges IN schema "public" GRANT SELECT ON TABLES TO readonly_user;

可以讲以后创建的table也赋予readonly_user只读权限。

Categories: 零敲碎打 Tags: ,

[VBA]Base64编码和Base64解码

March 26th, 2019 No comments

VBA实现Base64编码和Base64解码,用于处理加密的URL非常方便。

VBA Base64 编码/加密函数:

'VBA Base64 编码/加密函数:
Function Base64Encode(StrA As String) As String                                  'Base64 编码
    On Error GoTo over                                                          '排错
    Dim buf() As Byte, length As Long, mods As Long
    Dim Str() As Byte
    Dim i, kk As Integer
    kk = Len(StrA) - 1
    ReDim Str(kk)
    For i = 0 To kk
        Str(i) = Asc(Mid(StrA, i + 1, 1))
    Next i
    Const B64_CHAR_DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
    mods = (UBound(Str) + 1) Mod 3   '除以3的余数
    length = UBound(Str) + 1 - mods
    ReDim buf(length / 3 * 4 + IIf(mods <> 0, 4, 0) - 1)
    For i = 0 To length - 1 Step 3
        buf(i / 3 * 4) = (Str(i) And &HFC) / &H4
        buf(i / 3 * 4 + 1) = (Str(i) And &H3) * &H10 + (Str(i + 1) And &HF0) / &H10
        buf(i / 3 * 4 + 2) = (Str(i + 1) And &HF) * &H4 + (Str(i + 2) And &HC0) / &H40
        buf(i / 3 * 4 + 3) = Str(i + 2) And &H3F
    Next
    If mods = 1 Then
        buf(length / 3 * 4) = (Str(length) And &HFC) / &H4
        buf(length / 3 * 4 + 1) = (Str(length) And &H3) * &H10
        buf(length / 3 * 4 + 2) = 64
        buf(length / 3 * 4 + 3) = 64
    ElseIf mods = 2 Then
        buf(length / 3 * 4) = (Str(length) And &HFC) / &H4
        buf(length / 3 * 4 + 1) = (Str(length) And &H3) * &H10 + (Str(length + 1) And &HF0) / &H10
        buf(length / 3 * 4 + 2) = (Str(length + 1) And &HF) * &H4
        buf(length / 3 * 4 + 3) = 64
    End If
    For i = 0 To UBound(buf)
        Base64Encode = Base64Encode + Mid(B64_CHAR_DICT, buf(i) + 1, 1)
    Next
over:
End Function

Read more…

Categories: 零敲碎打 Tags: , ,

Nginx HTTP站点使用301跳转HTTPS

November 12th, 2018 No comments

方法一,使用Return方式,适用于全站HTTPS

server_name  www.lidaren.com lidaren.com;
return       301 https://www.lidaren.com$request_uri;

方法二,rewirte方式转发特定目录,适用于子目录HTTPS化
location 使用 ·/· 根目录则全站跳转
location 使用 ·/XXX目录· 子目录则跳转指定子目录

location / {
    rewrite ^(.*) https://www.lidaren.com$1 permanent
}

完整参考

server {
    listen       80;
    server_name  www.lidaren.com lidaren.com;
 
# 方法一,使用Return方式,适用于全站HTTPS
    return       301 https://www.lidaren.com$request_uri;
 
# 方法二,rewirte方式转发特定目录,适用于子目录HTTPS化
# location 使用/根目录则全站跳转
#    location / {
#        rewrite ^(.*) https://www.lidaren.com$1 permanent
#    }
}
Categories: 系统管理, 零敲碎打 Tags: