Pkold

image img linux losetup mount

原始的linux挂载多分区镜像

挂载多分区镜像

多分区镜像挂载

  • 查看loop设备
losetup -f
  • 查看起始位置
有cfdisk的话

cfdisk  ./xxx.img

没有cfdisk的话

fdisk  -l  ./xxx.img
  • 起始位置乘以512进行挂载
losetup -o xxx乘以512 /dev/loop0  xxx.img
  • 真正的挂载目录
mount /dev/loop0  xxx
  • 想要卸载
umount 卸载目录


losetup  -d /dev/loop0
cron linux python schedule

schedule python的定时任务神器

python的定时任务

最近需要玩玩定时任务

。=。

上代码

import schedule
import time

def job():
    print("I'm working...")

schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)
eventloop loop python run_in_executor 线程池
aosc arch deepin dmenu i3wm linux rofi ubuntu

i3wm dmenu的优秀替代品 rofi 窗口切换/搜索

i3wm dmenu的优秀替代品 rofi 窗口切换/搜索

rofi

https://github.com/DaveDavenport/rofi/

效果- -还不错

速度很快 比gnome-do之类的要爽的多

上配置文件

bindsym $mod+d exec --no-startup-id "rofi -combi-modi window,drun,run,ssh -show combi -modi combi"

备份一份

~/.config/i3/config

# i3 config file (v4)
# Please see http://i3wm.org/docs/userguide.html for a complete reference!

# Set mod key (Mod1=<Alt>, Mod4=<Super>)
set $mod Mod4

# set default desktop layout (default is tiling)
# workspace_layout tabbed <stacking|tabbed>

# Configure border style <normal|1pixel|pixel xx|none|pixel>
new_window pixel 1
new_float normal

# Hide borders
hide_edge_borders none

# change borders
bindsym $mod+u border none
bindsym $mod+y border pixel 1
bindsym $mod+n border normal

# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font xft:Noto Sans 10

# Use Mouse+$mod to drag floating windows
floating_modifier $mod

# start a terminal
# bindsym $mod+Return exec terminal
bindsym $mod+Return exec terminator

# kill focused window
bindsym $mod+Shift+q kill

# start program launcher
bindsym $mod+Shift+x exec --no-startup-id dmenu-frecency
bindsym $mod+d exec --no-startup-id "rofi -combi-modi window,drun,run,ssh -show combi -modi combi"
# launch categorized menu
bindsym $mod+z exec --no-startup-id morc_menu

################################################################################################
## sound-section - DO NOT EDIT if you wish to automatically upgrade Alsa -> Pulseaudio later! ##
################################################################################################

exec --no-startup-id volumeicon
#bindsym $mod+Ctrl+m exec terminal -e 'alsamixer'
#exec --no-startup-id pulseaudio
#exec --no-startup-id pa-applet
bindsym $mod+Ctrl+m exec pavucontrol

################################################################################################

# Screen brightness controls
bindsym XF86MonBrightnessUp exec "xbacklight -inc 10; notify-send 'brightness up'"
bindsym XF86MonBrightnessDown exec "xbacklight -dec 10; notify-send 'brightness down'"

# Start Applications
bindsym $mod+Ctrl+b exec --no-startup-id terminal -e 'bmenu'
bindsym $mod+F2 exec --no-startup-id firefox
bindsym $mod+F3 exec --no-startup-id pcmanfm
# bindsym $mod+F3 exec ranger
# bindsym $mod+Shift+F3 exec gksu nautilus
bindsym $mod+F5 exec terminator -e 'htop'
bindsym $mod+t exec --no-startup-id pkill compton
bindsym $mod+Ctrl+t exec --no-startup-id compton -b
bindsym $mod+Shift+d --release exec "killall dunst; exec notify-send 'restart dunst'"
bindsym Print exec --no-startup-id ~/.config/scrot/i3-scrot
bindsym $mod+Print exec --no-startup-id ~/.config/scrot/i3-scrot -w
bindsym Shift+Print exec --no-startup-id ~/.config/scrot/i3-scrot -s
bindsym $mod+Shift+h exec xdg-open /usr/share/doc/aosc/i3_help.pdf
bindsym $mod+Ctrl+x --release exec --no-startup-id xkill

# focus_follows_mouse no

# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+odiaeresis focus right

# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+odiaeresis move right

# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

# workspace back and forth (with/without active container)
workspace_auto_back_and_forth yes
bindsym $mod+b workspace back_and_forth
bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth

# split orientation
bindsym $mod+h split h;exec notify-send 'tile horizontally'
bindsym $mod+v split v;exec notify-send 'tile vertically'
bindsym $mod+q split toggle

# toggle fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle

# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split

# toggle tiling / floating
bindsym $mod+Shift+space floating toggle

# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle

# toggle sticky
bindsym $mod+Shift+s sticky toggle

# focus the parent container
bindsym $mod+a focus parent

# move the currently focused window to the scratchpad
bindsym $mod+Shift+minus move scratchpad

# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+minus scratchpad show

#navigate workspaces next / previous
bindsym $mod+Ctrl+Right workspace next
bindsym $mod+Ctrl+Left workspace prev

# Workspace names
# to display names or symbols instead of plain workspace numbers you can use
# something like: set $ws1 1:mail
#                 set $ws2 2:
set $ws1 1
set $ws2 2
set $ws3 3
set $ws4 4
set $ws5 5
set $ws6 6
set $ws7 7
set $ws8 8

# switch to workspace
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8

# Move focused container to workspace
bindsym $mod+Ctrl+1 move container to workspace $ws1
bindsym $mod+Ctrl+2 move container to workspace $ws2
bindsym $mod+Ctrl+3 move container to workspace $ws3
bindsym $mod+Ctrl+4 move container to workspace $ws4
bindsym $mod+Ctrl+5 move container to workspace $ws5
bindsym $mod+Ctrl+6 move container to workspace $ws6
bindsym $mod+Ctrl+7 move container to workspace $ws7
bindsym $mod+Ctrl+8 move container to workspace $ws8

# Move to workspace with focused container
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8

# Open applications on specific workspaces
# assign [class="Thunderbird"] $ws1
# assign [class="Pale moon"] $ws2
# assign [class="Pcmanfm"] $ws3
# assign [class="Skype"] $ws5

# Open specific applications in floating mode
for_window [title="alsamixer"] floating enable border pixel 1
for_window [class="Calamares"] floating enable border normal
for_window [class="Clipgrab"] floating enable
for_window [title="File Transfer*"] floating enable
for_window [class="Galculator"] floating enable border pixel 1
for_window [class="GParted"] floating enable border normal
for_window [title="i3_help"] floating enable sticky enable border normal
for_window [class="Lightdm-gtk-greeter-settings"] floating enable
for_window [class="Lxappearance"] floating enable sticky enable border normal
for_window [title="MuseScore: Play Panel"] floating enable
for_window [class="Nitrogen"] floating enable sticky enable border normal
for_window [class="Oblogout"] fullscreen enable
for_window [class="Pavucontrol"] floating enable
for_window [class="qt5ct"] floating enable sticky enable border normal
for_window [class="Qtconfig-qt4"] floating enable sticky enable border normal
for_window [class="Simple-scan"] floating enable border normal
for_window [class="(?i)System-config-printer.py"] floating enable border normal
for_window [class="Skype"] floating enable border normal
for_window [class="Timeset-gui"] floating enable border normal
for_window [class="(?i)virtualbox"] floating enable border normal
for_window [class="Xfburn"] floating enable

# switch to workspace with urgent window automatically
for_window [urgent=latest] focus

# reload the configuration file
bindsym $mod+Shift+c reload

# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart

# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"

# Set shut down, restart and locking features
bindsym $mod+0 mode "$mode_system"
set $mode_system (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
mode "$mode_system" {
    bindsym l exec --no-startup-id i3exit lock, mode "default"
    bindsym s exec --no-startup-id i3exit suspend, mode "default"
    bindsym u exec --no-startup-id i3exit switch_user, mode "default"
    bindsym e exec --no-startup-id i3exit logout, mode "default"
    bindsym h exec --no-startup-id i3exit hibernate, mode "default"
    bindsym r exec --no-startup-id i3exit reboot, mode "default"
    bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"

    # exit system mode: "Enter" or "Escape"
    bindsym Return mode "default"
    bindsym Escape mode "default"
}

# Resize window (you can also use the mouse for that)
bindsym $mod+r mode "resize"
mode "resize" {
        # These bindings trigger as soon as you enter the resize mode
        # Pressing left will shrink the window’s width.
        # Pressing right will grow the window’s width.
        # Pressing up will shrink the window’s height.
        # Pressing down will grow the window’s height.
        bindsym j resize shrink width 5 px or 5 ppt
        bindsym k resize grow height 5 px or 5 ppt
        bindsym l resize shrink height 5 px or 5 ppt
        bindsym odiaeresis resize grow width 5 px or 5 ppt

        # same bindings, but for the arrow keys
        bindsym Left resize shrink width 5 px or 5 ppt
        bindsym Down resize grow height 5 px or 5 ppt
        bindsym Up resize shrink height 5 px or 5 ppt
        bindsym Right resize grow width 5 px or 5 ppt

        # exit resize mode: Enter or Escape
        bindsym Return mode "default"
        bindsym Escape mode "default"
}

# Lock screen
bindsym $mod+9 exec --no-startup-id i3lock -c 000000

# Autostart applications
# exec --no-startup-id /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec --no-startup-id nitrogen --restore; sleep 1; compton -b
exec --no-startup-id nm-applet
exec --no-startup-id xdg-user-dirs-update

#exec --no-startup-id conky -c ~/.config/conky/conky_cherubim
#exec --no-startup-id conky -c ~/.config/conky/conky_i3shortcuts
#exec --no-startup-id conky -c ~/.config/conky/conky_weather
#exec --no-startup-id conky -c ~/.config/conky/conky_rss
#exec --no-startup-id conky -c ~/.config/conky/conky_status
#exec --no-startup-id conky -c ~/.config/conky/conky_webmonitor
exec --no-startup-id ~/.config/conky/autoconky.py
exec --no-startup-id fcitx -d
exec --no-startup-id guake
# exec --no-startup-id blueman
# exec --no-startup-id xautolock -time 10 -locker blurlock


bar {
        status_command i3blocks
        position top

        colors {
            background #071E31

            focused_workspace #3685e2 #3685e2 #fafafa
            active_workspace #5294e2 #5294e2 #fafafa
            inactive_workspace #404552 #404552 #fafafa
            urgent_workspace #ff5757 #ff5757 #fafafa
        }
}




# Start i3bar to display a workspace bar (plus the system information i3status if available)
#bar {
#   status_command i3status
#   position top

## please set your primary output first. Example: 'xrandr --output eDP1 --primary'
#   tray_output primary
#   tray_output eDP1
#
#   bindsym button4 nop
#   bindsym button5 nop
#   font xft:Noto Sans 10.5
#   strip_workspace_numbers yes

#   colors {
#   background $transparent
#       background #2B2C2B
#                statusline #F9FAF9
#       separator  #454947
#
#                                  border  backgr. text
#       focused_workspace  #F9FAF9 #16A085 #2B2C2B
#       active_workspace   #595B5B #353836 #FDF6E3
#       inactive_workspace #595B5B #353836 #EEE8D5
#       urgent_workspace   #16A085 #FDF6E3 #E5201D
#   }
#}

# hide/unhide i3status bar
bindsym $mod+m bar mode toggle

# Theme colors
# class                 border  backgr. text    indic.  child_border
client.focused          #808280 #808280 #80FFF9 #FDF6E3
client.focused_inactive #434745 #434745 #16A085 #454948
client.unfocused        #434745 #434745 #16A085 #454948
client.urgent           #CB4B16 #FDF6E3 #16A085 #268BD2
client.placeholder      #000000 #0c0c0c #ffffff #000000 #0c0c0c

client.background       #2B2C2B

#############################
### settings for i3-gaps: ###
#############################

# Set inner/outer gaps
#gaps inner 10
#gaps outer -4

# Additionally, you can issue commands with the following syntax. This is useful to bind keys to changing the gap size.
# gaps inner|outer current|all set|plus|minus <px>
# gaps inner all set 10
# gaps outer all plus 5

# Smart gaps (gaps used if only more than one container on the workspace)
#smart_gaps on

# Smart borders (draw borders around container only if it is not the only container on this workspace) 
# on|no_gaps (on=always activate and no_gaps=only activate if the gap size to the edge of the screen is 0)
#smart_borders on

# Press $mod+Shift+g to enter the gap mode. Choose o or i for modifying outer/inner gaps. Press one of + / - (in-/decrement for current workspace) or 0 (remove gaps for current workspace). If you also press Shift with these keys, the change will be global for all workspaces.
#set $mode_gaps Gaps: (o) outer, (i) inner
#set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
#set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
#bindsym $mod+Shift+g mode "$mode_gaps"

#mode "$mode_gaps" {
#        bindsym o      mode "$mode_gaps_outer"
#        bindsym i      mode "$mode_gaps_inner"
#        bindsym Return mode "default"
#        bindsym Escape mode "default"
#}
#mode "$mode_gaps_inner" {
#        bindsym plus  gaps inner current plus 5
#        bindsym minus gaps inner current minus 5
#        bindsym 0     gaps inner current set 0
#
#
#        bindsym Shift+plus  gaps inner all plus 5
#        bindsym Shift+minus gaps inner all minus 5
#        bindsym Shift+0     gaps inner all set 0
#
#        bindsym Return mode "default"
#        bindsym Escape mode "default"
#}
#mode "$mode_gaps_outer" {
#        bindsym plus  gaps outer current plus 5
#        bindsym minus gaps outer current minus 5
#        bindsym 0     gaps outer current set 0
#
#        bindsym Shift+plus  gaps outer all plus 5
#        bindsym Shift+minus gaps outer all minus 5
#        bindsym Shift+0     gaps outer all set 0
#
#        bindsym Return mode "default"
#        bindsym Escape mode "default"
#}

~/.dmenurc

#
# ~/.dmenurc
#

## define the font for dmenu to be used
DMENU_FN="Noto-10.5"

## background colour for unselected menu-items
DMENU_NB="#2B2C2B"

## textcolour for unselected menu-items
DMENU_NF="#F9FAF9"

## background colour for selected menu-items
DMENU_SB="#16A085"

## textcolour for selected menu-items
DMENU_SF="#F9FAF9"

## command for the terminal application to be used:
TERMINAL_CMD="terminal -e"

## export our variables
DMENU_OPTIONS="-fn $DMENU_FN -nb $DMENU_NB -nf $DMENU_NF -sf $DMENU_SF -sb $DMENU_SB"

~/.dmrc

[Desktop]
Language=zh_CN.utf8
Session=i3

~/.i3blocks.conf

# i3blocks config file
#
# Please see man i3blocks for a complete reference!
# The man page is also hosted at http://vivien.github.io/i3blocks
#
# List of valid properties:
#
# align
# color
# command
# full_text
# instance
# interval
# label
# min_width
# name
# separator
# separator_block_width
# short_text
# signal
# urgent

# Global properties
#
# The top properties below are applied to every block, but can be overridden.
# Each block command defaults to the script name to avoid boilerplate.
command=~/.config/blocks/$BLOCK_NAME
separator_block_width=15
markup=none


# Generic media player support
#
# This displays "ARTIST - SONG" if a music is playing.
# Supported players are: spotify, vlc, audacious, xmms2, mplayer, and others.

[bandwidth]
instance=wlp3s0;in
color=#FFD700
label=
interval=3
separator=false

[bandwidth]
instance=wlp3s0;out
color=#FFD700
label=
interval=3
separator=false

[network]
label=
instance=enp4s0f2
interval=10
separator=false

[ssid]
label=
color=#00BFFF
interval=60
separator=false

[network]
label=
color=#00ff00
instance=wlp3s0
interval=10
separator=false

[ip-address]
label=
color=#DB7093
interval=60

[mediaplayer]
#instance=spotify
label=🎵
color=#C62F2F
interval=5
signal=10

[audio]
label=
color=#87CEEB
interval=5
separator=false

[microphone]
label=
color=#87CEEB
interval=5

[packages]
label=
interval=300

[space]
label=
color=#bd93f9
interval=30

[bluetooth]
label=
color=#3365A4
interval=10

[temperature]
instance=Core
label=
color=#FFA500
interval=5

[load]
label=
color=#32CD32
interval=10
separator=false

[cpu]
label=
color=#008DF6
interval=2

[memory]
label=
color=#F0B28A
instance=mem;free
interval=30

[memory]
label=
instance=swap;total
interval=30
#[load_average]
#interval=10

# Battery indicator
#
# The battery instance defaults to 0.
#[battery]
#label=BAT
#label=⚡
#instance=1
#interval=30

[battery]
command=~/.config/blocks/battery/battery
markup=pango
interval=30


# Date Time
#
[time]
label=
command=date '+%Y-%m-%d  %H:%M:%S'
color=#1DE9B6
interval=3

[user]
label=
color=#90CAF9
interval=once

# Key indicators
#
# Add the following bindings to i3 config file:
#
# bindsym --release Caps_Lock exec pkill -SIGRTMIN+11 i3blocks
# bindsym --release Num_Lock  exec pkill -SIGRTMIN+11 i3blocks
#[keyindicator]
#instance=CAPS
#interval=once
#signal=11

#[keyindicator]
#instance=NUM
#interval=once
#signal=11
aosc arch fedora i3 i3-wm linux wm 亮度

装上i3-wm后解决亮度调节

linux屏幕亮度调节解决办法

修改grub

sudo vi /etc/default/grub

修改内容

GRUB_CMDLINE_LINUX="acpi_backlight=vendor"

更新grub.conf

sudo update-grub

设置亮度

echo 500 > /sys/class/backlight/intel_backlight/brightness
cookie error tomcat

解决高版本tomcat cookie的问题

解决高版本tomcat cookie的问题

解决高版本tomcat cookie的问题

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor"/>
</Context>
linux tidb

TiDB Binary 部署方案详解(备份)

TiDB Binary 部署方案详解


title: TiDB Binary 部署方案详解 category: deployment


TiDB Binary 部署指导

概述

一个完整的 TiDB 集群包括 PD,TiKV 以及 TiDB。启动顺序依次是 PD,TiKV 以及 TiDB。在关闭数据库服务时,请按照启动的相反顺序进行逐一关闭服务。

阅读本章前,请先确保阅读 TiDB 整体架构部署建议

本文档描述了三种场景的二进制部署方式:

TiDB 组件及默认端口

1. TiDB 数据库组件(必装)

组件 默认端口 协议 说明
ssh 22 TCP sshd 服务
TiDB 4000 TCP 应用及 DBA 工具访问通信端口
TiDB 10080 TCP TiDB 状态信息上报通信端口
TiKV 20160 TCP TiKV 通信端口
PD 2379 TCP 提供 TiDB 和 PD 通信端口
PD 2380 TCP PD 集群节点间通信端口

2. TiDB 数据库组件(选装)

组件 默认端口 协议 说明
Prometheus 9090 TCP Prometheus 服务通信端口
Pushgateway 9091 TCP TiDB, TiKV, PD 监控聚合和上报端口
Node_exporter 9100 TCP TiDB 集群每个节点的系统信息上报通信端口
Grafana 3000 TCP Web 监控服务对外服务和客户端(浏览器)访问端口
alertmanager 9093 TCP 告警服务端口

TiDB 安装前系统配置与检查

操作系统检查

配置 描述
支持平台 请查看和了解系统部署建议
文件系统 TiDB 部署环境推荐使用 ext4 文件系统
Swap 空间 TiDB 部署推荐关闭 Swap 空间
Disk Block Size 设置系统磁盘 Block 大小为 4096

网络与防火墙

配置 描述
防火墙 / 端口 请查看 TiDB 所需端口在各个节点之间是否能正常访问

操作系统参数

配置 说明
Nice Limits 系统用户 tidb 的 nice 值设置为缺省值 0
min_free_kbytes sysctl.conf 中关于 vm.min_free_kbytes 的设置需要足够高
User Open Files Limit 对数据库管理员 tidb 的 open 文件数设置为 1000000
System Open File Limits 对系统的 open 文件数设置为 1000000
User Process Limits limits.conf 配置的 tidb 用户的 nproc 为 4096
Address Space Limits limits.conf 配置的 tidb 用户空间为 unlimited
File Size Limits limits.conf 配置的 tidb 用户 fsize 为 unlimited
Disk Readahead 设置数据磁盘 readahead 至少为 4096
NTP 服务 为各个节点配置 NTP 时间同步服务
SELinux 关闭各个节点的 SELinux 服务
CPU Frequency Scaling TiDB 推荐打开 CPU 超频
Transparent Hugepages 针对 Red Hat 7+ 和 CentOS 7+ 系统, Transparent Hugepages 必须被设置为 always
I/O Scheduler 设置数据磁盘 I/0 Schedule 设置为 deadline 模式
vm.swappiness 设置 vm.swappiness = 0

注意:请联系系统管理员进行操作系统参数调整。

数据库运行用户设置

配置 说明
LANG 环境设定 设置 LANG = en_US.UTF8
TZ 时区设定 确保所有节点的时区 TZ 设置为一样的值

创建系统数据库运行账户

在 Linux 环境下,在每台安装节点上创建 tidb 作为数据库系统运行用户并设置集群节点之间的 ssh 互信访问。以下是一个示例,具体创建用户与开通 ssh 互信访问请联系系统管理员进行。

# useradd tidb
# usermod -a -G tidb tidb
# su - tidb
Last login: Tue Aug 22 12:06:23 CST 2017 on pts/2
-bash-4.2$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tidb/.ssh/id_rsa):
Created directory '/home/tidb/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tidb/.ssh/id_rsa.
Your public key has been saved in /home/tidb/.ssh/id_rsa.pub.
The key fingerprint is:
5a:00:e6:df:9e:40:25:2c:2d:e2:6e:ee:74:c6:c3:c1 tidb@t001
The key's randomart image is:
+--[ RSA 2048]----+
|    oo. .        |
|  .oo.oo         |
| . ..oo          |
|  .. o o         |
| .  E o S        |
|  oo . = .       |
| o. * . o        |
| ..o .           |
| ..              |
+-----------------+

-bash-4.2$ cd .ssh
-bash-4.2$ cat id_rsa.pub >> authorized_keys
-bash-4.2$ chmod 644 authorized_keys
-bash-4.2$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.100

下载官方 Binary

TiDB 官方提供了支持 Linux 版本的二进制安装包,官方推荐使用 Redhat 7+、CentOS 7+ 以上版本的操作系统,不推荐在 Redhat 6、CentOS 6 上部署 TiDB 集群。

操作系统:Linux ( Redhat 7+,CentOS 7+ )

执行步骤:

# 下载压缩包

wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz
wget http://download.pingcap.org/tidb-latest-linux-amd64.sha256

# 检查文件完整性,返回 ok 则正确
sha256sum -c tidb-latest-linux-amd64.sha256

# 解开压缩包
tar -xzf tidb-latest-linux-amd64.tar.gz
cd tidb-latest-linux-amd64

单节点方式快速部署

在获取 TiDB 二进制文件包后,我们可以在单机上面,运行和测试 TiDB 集群,请按如下步骤依次启动 PD,TiKV,TiDB。

注意:以下启动各个应用程序组件实例的时候,请选择后台启动,避免前台失效后程序自动退出。

步骤一. 启动 PD:

./bin/pd-server --data-dir=pd \
                --log-file=pd.log

步骤二. 启动 TiKV:

./bin/tikv-server --pd="127.0.0.1:2379" \
                  --data-dir=tikv \
                  --log-file=tikv.log

步骤三. 启动 TiDB:

./bin/tidb-server --store=tikv \
                  --path="127.0.0.1:2379" \
                  --log-file=tidb.log

步骤四. 使用 MySQL 客户端连接 TiDB:

mysql -h 127.0.0.1 -P 4000 -u root -D test

功能性测试部署

如果只是对 TiDB 进行测试,并且机器数量有限,我们可以只启动一台 PD 测试整个集群。

这里我们使用四个节点,部署一个 PD,三个 TiKV,以及一个 TiDB,各个节点以及所运行服务信息如下:

Name Host IP Services
node1 192.168.199.113 PD1, TiDB
node2 192.168.199.114 TiKV1
node3 192.168.199.115 TiKV2
node4 192.168.199.116 TiKV3

请按如下步骤依次启动 PD 集群,TiKV 集群以及 TiDB:

注意:以下启动各个应用程序组件实例的时候,请选择后台启动,避免前台失效后程序自动退出。

步骤一. 在 node1 启动 PD:

./bin/pd-server --name=pd1 \
                --data-dir=pd1 \
                --client-urls="http://192.168.199.113:2379" \
                --peer-urls="http://192.168.199.113:2380" \
                --initial-cluster="pd1=http://192.168.199.113:2380" \
                --log-file=pd.log

步骤二. 在 node2,node3,node4 启动 TiKV:

./bin/tikv-server --pd="192.168.199.113:2379" \
                  --addr="192.168.199.114:20160" \
                  --data-dir=tikv1 \
                  --log-file=tikv.log

./bin/tikv-server --pd="192.168.199.113:2379" \
                  --addr="192.168.199.115:20160" \
                  --data-dir=tikv2 \
                  --log-file=tikv.log

./bin/tikv-server --pd="192.168.199.113:2379" \
                  --addr="192.168.199.116:20160" \
                  --data-dir=tikv3 \
                  --log-file=tikv.log

步骤三. 在 node1 启动 TiDB:

./bin/tidb-server --store=tikv \
                  --path="192.168.199.113:2379" \
                  --log-file=tidb.log

步骤四. 使用 MySQL 客户端连接 TiDB:

mysql -h 192.168.199.113 -P 4000 -u root -D test

多节点集群模式部署

在生产环境中,我们推荐多节点部署 TiDB 集群,首先请参考部署建议。

这里我们使用六个节点,部署三个 PD,三个 TiKV,以及一个 TiDB,各个节点以及所运行服务信息如下:

Name Host IP Services
node1 192.168.199.113 PD1, TiDB
node2 192.168.199.114 PD2
node3 192.168.199.115 PD3
node4 192.168.199.116 TiKV1
node5 192.168.199.117 TiKV2
node6 192.168.199.118 TiKV3

请按如下步骤依次启动 PD 集群,TiKV 集群以及 TiDB:

步骤一 . 在 node1,node2,node3 依次启动 PD:

./bin/pd-server --name=pd1 \
                --data-dir=pd1 \
                --client-urls="http://192.168.199.113:2379" \
                --peer-urls="http://192.168.199.113:2380" \
                --initial-cluster="pd1=http://192.168.199.113:2380,pd2=http://192.168.199.114:2380,pd3=http://192.168.199.115:2380" \
                -L "info" \
                --log-file=pd.log

./bin/pd-server --name=pd2 \
                --data-dir=pd2 \
                --client-urls="http://192.168.199.114:2379" \
                --peer-urls="http://192.168.199.114:2380" \
                --initial-cluster="pd1=http://192.168.199.113:2380,pd2=http://192.168.199.114:2380,pd3=http://192.168.199.115:2380" \
                --join="http://192.168.199.113:2379" \
                -L "info" \
                --log-file=pd.log

./bin/pd-server --name=pd3 \
                --data-dir=pd3 \
                --client-urls="http://192.168.199.115:2379" \
                --peer-urls="http://192.168.199.115:2380" \
                --initial-cluster="pd1=http://192.168.199.113:2380,pd2=http://192.168.199.114:2380,pd3=http://192.168.199.115:2380" \
                --join="http://192.168.199.113:2379" \
                -L "info" \
                --log-file=pd.log

步骤二. 在 node4,node5,node6 启动 TiKV:

./bin/tikv-server --pd="192.168.199.113:2379,192.168.199.114:2379,192.168.199.115:2379" \
                  --addr="192.168.199.116:20160" \
                  --data-dir=tikv1 \
                  --log-file=tikv.log

./bin/tikv-server --pd="192.168.199.113:2379,192.168.199.114:2379,192.168.199.115:2379" \
                  --addr="192.168.199.117:20160" \
                  --data-dir=tikv2 \
                  --log-file=tikv.log

./bin/tikv-server --pd="192.168.199.113:2379,192.168.199.114:2379,192.168.199.115:2379" \
                  --addr="192.168.199.118:20160" \
                  --data-dir=tikv3 \
                  --log-file=tikv.log

步骤三. 在 node1 启动 TiDB:

./bin/tidb-server --store=tikv \
                  --path="192.168.199.113:2379,192.168.199.114:2379,192.168.199.115:2379" \
                  --log-file=tidb.log

步骤四. 使用 MySQL 客户端连接 TiDB:

mysql -h 192.168.199.113 -P 4000 -u root -D test

注意:在生产环境中启动 TiKV 时,建议使用 --config 参数指定配置文件路径,如果不设置这个参数,TiKV 不会读取配置文件。同样,在生产环境中部署 PD 时,也建议使用 --config 参数指定配置文件路径。

TiKV 调优参见:TiKV 性能参数调优

注意:如果使用 nohup 在生产环境中启动集群,需要将启动命令放到一个脚本文件里面执行,否则会出现因为 Shell 退出导致 nohup 启动的进程也收到异常信号退出的问题,具体参考进程异常退出。

TiDB 监控和告警环境安装

安装部署监控和告警环境的系统信息如下:

Name Host IP Services
node1 192.168.199.113 node_export, pushgateway, Prometheus, Grafana
node2 192.168.199.114 node_export
node3 192.168.199.115 node_export
node4 192.168.199.116 node_export

获取二进制包

# 下载压缩包
wget https://github.com/prometheus/prometheus/releases/download/v1.5.2/prometheus-1.5.2.linux-amd64.tar.gz
wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0-rc.2/node_exporter-0.14.0-rc.2.linux-amd64.tar.gz
wget https://grafanarel.s3.amazonaws.com/builds/grafana-4.1.2-1486989747.linux-x64.tar.gz
wget https://github.com/prometheus/pushgateway/releases/download/v0.3.1/pushgateway-0.3.1.linux-amd64.tar.gz

# 解开压缩包
tar -xzf prometheus-1.5.2.linux-amd64.tar.gz
tar -xzf node_exporter-0.14.0-rc.1.linux-amd64.tar.gz
tar -xzf grafana-4.1.2-1486989747.linux-x64.tar.gz
tar -xzf pushgateway-0.3.1.linux-amd64.tar.gz

启动监控服务

在 node1,node2,node3,node4 启动 node_exporter

$cd node_exporter-0.14.0-rc.1.linux-amd64

#启动 node_exporter 服务
./node_exporter --web.listen-address=":9100" \
    --log.level="info"

在 node1 启动 pushgateway:

$cd pushgateway-0.3.1.linux-amd64

#启动 pushgateway 服务
./pushgateway \
    --log.level="info" \
    --web.listen-address=":9091"

在 node1 启动 Prometheus:

$cd prometheus-1.5.2.linux-amd64

# 修改配置文件

vi prometheus.yml

...
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.
  evaluation_interval: 15s # By default, scrape targets every 15 seconds.
  # scrape_timeout is set to the global default (10s).
  labels:
    cluster: 'test-cluster'
    monitor: "prometheus"

scrape_configs:
  - job_name: 'overwritten-cluster'
    scrape_interval: 3s
    honor_labels: true # don't overwrite job & instance labels
    static_configs:
      - targets: ['192.168.199.113:9091']

  - job_name: "overwritten-nodes"
    honor_labels: true # don't overwrite job & instance labels
    static_configs:
    - targets:
      - '192.168.199.113:9100'
      - '192.168.199.114:9100'
      - '192.168.199.115:9100'
      - '192.168.199.116:9100'
...

# 启动 Prometheus:
./prometheus \
    --config.file="/data1/tidb/deploy/conf/prometheus.yml" \
    --web.listen-address=":9090" \
    --web.external-url="http://192.168.199.113:9090/" \
    --log.level="info" \
    --storage.local.path="/data1/tidb/deploy/data.metrics" \
    --storage.local.retention="360h0m0s"

在 node1 启动 Grafana:

cd grafana-4.1.2-1486989747.linux-x64

#编辑配置文件

vi grafana.ini

...

# The http port  to use
http_port = 3000

# The public facing domain name used to access grafana from a browser
domain = 192.168.199.113

...

#启动 Grafana 服务
./grafana-server \
    --homepath="/data1/tidb/deploy/opt/grafana" \
    --config="/data1/tidb/deploy/opt/grafana/conf/grafana.ini"
10kb 500 error nginx tomcat

nginx+tomcat上传图片大于10kb就500的异常

nginx+tomcat上传图片大于10kb就500的异常

= = 在本地上传完全没问题

测试服务器上就gg

= = 日狗

一开始以为是tomcat的问题

添加了

maxPostSize="-1" maxHttpHeaderSize="1024000"

没有任何影响= =

玩命谷歌后

和curl 测试

发现是nginx

的问题

在localtion下加入

proxy_buffering off;
client_body_buffer_size 10240K;

client_body_buffer_size 默认的client_body_buffer_size设置,是操作系统页面大小的两倍,8k或者16k

= =

deepin linux stalonetray wine 异常 托盘 无响应

deepin wineqq tim 微信 托盘异常无反应解决= =

stalonetray解决wine程序在deepin下托盘异常

上代码~~~

sudo apt install stalonetray

然后

nano ~/.stalonetrayrc

再然后~~

# background 
background "#777777"

# decorations
# 可选值: all, title, border, none
decorations none

# display # as usual
# dockapp_mode # set dockapp mode, which can be either simple (for
# e.g. OpenBox, wmaker for WindowMaker, or none
# (default). NEW in 0.8.
dockapp_mode none
# fuzzy_edges [] # enable fuzzy edges and set fuzziness level. level
# can be from 0 (disabled) to 3; this setting works
# with tinting and/or transparent and/or pixmap
# backgrounds
fuzzy_edges 0

# geometry 
geometry 1x1+0+0

# grow_gravity # 可选值有:N, S, E, W, NW, NE, SW, SE; 托盘图标的增长方式。
grow_gravity NW

# icon_gravity # 托盘图标的方向: NW, NE, SW, SE
icon_gravity NW

# icon_size # spe
icon_size 24

# log_level # controls the amount of logging output, level can
# be err (default), info, or trace (enabled only
# when stalonetray configured with --enable-debug)
# NEW in 0.8.
log_level err

# kludges kludge[,kludge] # enable specific kludges to work around
# non-conforming WMs and/or stalonetray bugs.
# NEW in 0.8. Argument is a
# comma-separated list of
# * fix_window_pos - fix tray window position on
# erroneous moves by WM
# * force_icon_size - ignore resize events on all
# icons; force their size to be equal to
# icon_size
# * use_icon_hints - use icon window hints to
# dtermine icon size

# max_geometry # maximal tray dimensions; 0 in width/height means
# no limit
max_geometry 0x0

# no_shrink [] # disables shrink-back mode
no_shrink false

# parent_bg [] # whether to use pseudo-transparency
# (looks better when reparented into smth like FvwmButtons)
parent_bg false

# pixmap_bg <path_to_xpm> # use pixmap from specified xpm file for (tiled) background
# pixmap_bg /home/user/.stalonetraybg.xpm

# scrollbars # enable/disable scrollbars; mode is either
# vertical, horizontal, all or none (default)
# NEW in 0.8.
scrollbars none

# scrollbars-size # scrollbars step in pixels; default is slot_size / 4
# scrollbars-step 8

# scrollbars-step # scrollbars step in pixels; default is slot_size / 2
# scrollbars-step 32

# slot_size # specifies size of icon slot, defaults to
# icon_size NEW in 0.8.

# skip_taskbar [] # hide tray`s window from the taskbar
skip_taskbar true

# sticky [] # make a tray`s window sticky across the
# desktops/pages
sticky true

# tint_color # set tinting color
tint_color white

# tint_level # set tinting level; level ranges from 0 (disabled)
# to 255
tint_level 0

# transparent [] # whether to use root-transparency (background
# image must be set with Esetroot or compatible utility)
transparent false

# vertical [] # whether to use vertical layout (horisontal layout
# is used by default)
vertical false

# window_layer # set the EWMH-compatible window layer; one of:
# bootom, normal, top
window_layer normal

# window_strut # enable/disable window struts for tray window (to
# avoid converting of tray window by maximized
# windows); mode defines to which screen border tray
# will be attached; it can be either top, bottom,
# left, right, none or auto (default)
window_strut auto

# window_type # set the EWMH-compatible window type; one of:
# desktop, dock, normal, toolbar, utility
window_type dock

# xsync [] # whether to operate on X server synchronously (SLOOOOW)
xsync false

= = 然而比较蛋疼

python threading timer 定时器

python 定时器 ,还是很好玩的

python起线程定时器

上代码!

from threading import Timer

##循环loop定时器
class LoopTimer(Timer):
    def __init__(self, interval, function, args=[], kwargs={}):
        Timer.__init__(self, interval, function, args, kwargs)
    def run(self):
        while True:
            self.finished.wait(self.interval)
            if self.finished.is_set():
                self.finished.set()
                break
            self.function(*self.args, **self.kwargs)
    #定时执行注解
    def delayed(seconds):
        def decorator(f):
            def wrapper(*args, **kargs):
                t = LoopTimer(seconds, f, args, kargs)
                t.start()
            return wrapper
        return decorator

#单次定时器
class OneTimer(Timer):
    def __init__(self, interval, function, args=[], kwargs={}):
        Timer.__init__(self, interval, function, args, kwargs)

注意

要用的时候

def  a():
    print("aaa")


t = LoopTimer(1,a)

t.start()

#函数要不加括号