1. 程式人生 > 實用技巧 >程序、虛擬環境、mysql

程序、虛擬環境、mysql

ICMP協議 ---> ping使用的

檢視程序 ps

ps[options]

支援的命令格式

  • unix格式,如:-h -e
  • BSD格式,如:a,x,u
  • GNU長格式,如: --help

選項

#ps
PIDTTYTIMECMD
28019pts/400:00:00ps
83674pts/400:00:00bash
pid終端當前命令佔用cpu的時間命令

a所有的終端
x包括不連線終端的程序(系統自動開啟的)
u顯示程序詳細資訊
f顯示程序樹
k指定排序方式,預設是遞增,如果想遞減,則需要在排序的欄位上加上-
psaux-k%cpu
o指定顯示的屬性,不能跟u同時使用,多個屬性用,分隔
L獲取支援的選項,

-L顯示執行緒
-e相當於ax
-f顯示詳細資訊,相當於u
-F顯示更詳細資訊
-H顯示樹狀結構
-Uusername獲取指定的使用者資訊
常用選項:aux-ef-eFH

ps輸出屬性

VSZ 虛擬記憶體(程式認為可以獲取到的)

RSS 實際記憶體

psr cpu的編號

STAT 狀態

%cpu cpu的佔用率

%mem 記憶體的佔用率

根據名稱來查詢程序

pidofname

#
pidofpython
1169825

系統工具

uptime

#uptime
09:17:40up1day,22:19,5users,loadaverage:2.14,1.59,0.84
當前時間當前伺服器執行時長當前的線上使用者數cpu的負載1分鐘5分鐘15分鐘

cpu平均負載:在特定時間之內cpu執行的平均程序數,不超過cpu核心數的2倍認為為良好

top

選項:

-d 重新整理時間

-b

顯示所有的資訊

-n #指定重新整理#次後退出

首部資訊

  • uptime資訊。按 l:顯示與隱藏
  • tasks :程序總數,執行,睡眠數,停止數,殭屍程序。 t
  • cpu資訊:
%Cpu(s):0.3us,4.6sy,0.0ni,95.0id,0.0wa,0.0hi,0.0si,0.0st

使用者空間系統空間nice值空閒等待硬中斷軟中斷虛擬機器偷走時間
  • 記憶體資訊。m
  • cpu分別顯示 。1(數字)

排序:

預設是cpu的佔用率。P

M:記憶體佔用率

T: cpu的佔用時間

退出:q

修改重新整理頻率:s,預設是3秒

殺死程序:k,預設是第一個

W 儲存檔案

htop

在epel源中

效能分析

free

-b位元組
-kkb
-mmb
-ggb
-h人類易讀方式
-c#重新整理次數

vmstat

vmstat[options][delay[count]]

#
vmstat13每秒重新整理一次,重新整理3次
procs-----------memory-------------swap-------io-----system--------cpu-----
rbswpdfreebuffcachesisobiboincsussyidwast
1037028162708080858800863434029700

procs:
r:正在執行的程序個數
b:阻塞佇列的長度

memory:
swap:虛擬內容大小
free:空閒實體記憶體的大小
buff:用於buff的大小
cache:使用者cache的大小

swap:
si:從磁碟交換到記憶體的資料速率(kb/s)
so:從記憶體交換到磁碟的資料速率(kb/s)

io:
bi:從磁碟讀取到系統的速率(kb/s)
bo:從系統寫入到磁碟的速率(kb/s)

system:
in:中斷頻率
cs:程序之前切換的頻率

cpu:
us
sy
id
wa
st

iostat

檢視磁碟讀寫速度

iostat 1 10 重新整理頻率與次數

dstat 檢視所有

-ccpu
-d硬碟
-m記憶體
-n網路
-p程序
-rio請求
-sswap
--top-cpu顯示佔用cpu最多的程序
--top-io顯示佔用io最多的程序
--top-mem顯示佔用記憶體最多的程序
--tcp顯示tcp的資訊
--udp顯示udp的資訊

iftop 顯示網絡卡的流量

程序的管理工具

kill:向程序傳送訊號,實現對程序的管理,每個訊號,對應不同的值,對應不同的含義,不區分大小寫

查詢可用訊號:kill -l

常用訊號:

  • sighub 不需要關閉程式,重新載入配置檔案
  • sigint 終止程序,相當於ctrl+c
  • sigkill 強制殺死程序
  • sigterm 終止正在執行的程序
  • sigcont 繼續執行
  • sigstop 後臺休眠

按照pid: kill-n pid

按照名稱:killall -n name

按照名稱:pkill -n name

作業管理

前臺作業:一直佔用終端的作業

後臺作業:不佔用當前的終端

讓作業運行於後臺:

  • ctrl+z 對於啟動中
  • command & 也會輸出到終端

脫離終端:

  • nohup command &>/dev/null &
  • screen
-list檢視所有的screen視窗
-r進入

安全

防火牆

綠盟、深信服、啟明星辰、飛塔、思科、華為、華三等等

4表5鏈
iptables-L檢視防火牆策略
iptables-F清空防火牆
systemctldisablefirewalld開機並啟動
systemctlstopfirewalled
selinux

一般將其關閉:進入配置檔案,修改SELINUX=disabled

  • 配置檔案 /etc/selinux/config
  • setenforce 0 臨時生效
  • getenforce 檢視selinux的狀態

Linux中編譯後的軟體如果想刪除,直接刪除編譯生成到目錄就可以

虛擬環境

安裝:

pip3installvirtualenv-ihttps://pypi.tuna.tsinghua.edu.cn/simple

建立虛擬環境:

virtualenv--no-site-packagesenvdir_name

--no-site-packages建立一個全新的python環境
--python指定以哪個python來建立虛擬環境

進入虛擬環境:

sourceenvdir/bin/activate

退出虛擬環境:

deactivate

將Windows中的專案放在Linux中執行,確保環境一致:

在windows上執行如下命令:
#將windows上安裝的包做快照
pipfreeze>requirement.txt
#將requirement.txt傳送到linux上
#切換虛擬機器
pipinstall-rrequirement.txt-ihttps://pypi.tuna.tsinghua.edu.cn/simple

virtualenvwrapper

為了解決虛擬環境管理的問題,因為虛擬環境可以在任何目錄下建立

1.安裝
pip3installvirtualenvwrapper-ihttps://pypi.tuna.tsinghua.edu.cn/simple

2.修改檔案
vim~/.bashrc
exportWORKON_HOME=/envdir#設定virtualenv的統一管理目錄
exportVIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'#新增virtualenvwrapper的引數,生成乾淨隔絕的環境
exportVIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3#指定python直譯器
source/opt/python36/bin/virtualenvwrapper.sh#執行virtualenvwrapper安裝指令碼

3.載入~/.bashrc
source~/.bashrc

4.建立環境
mkvirtualenvdjango11建立並切換
5.進入虛擬環境
workonname
6.切換到當前虛擬環境的資料夾
cdvirtualenv
7.切換到當前虛擬環境的第三方包的資料夾
cdsitepackages
8.退出
deactivate
9.列出當前管理的虛擬環境
lsvirtualenv
10.列出當前虛擬環境的第三方包
lssitepackages
11.刪除虛擬環境
rmvirtualenv必須要退出才能刪除

mysql

mariadb是mysql的分支,可以直接在官方網站下載。

下載:

wgethttp://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar

解壓:

tarxfMySQL-5.6.44-1.el7.x86_64.rpm-bundle.tar

安裝:

yuminstall-y*.rpm

預設安裝位置:/var/lib/mysql,配置檔案/etc/my.cnf

為mysql系統使用者增加讀寫許可權chown mysql -R /mydata/mysql

其中mydata目錄是mysql資料儲存位置,可在配置檔案中檢視與修改。

啟動服務systemctl start mysqld

報錯資訊:

2019-08-30T11:18:22.976635Z0[Warning]Can'tcreatetestfile/mydata/mysql/localhost.lower-test
2019-08-30T11:18:22.976687Z0[Note]/usr/sbin/mysqld(mysqld5.7.27)startingasprocess2788...
2019-08-30T11:18:22.980289Z0[Warning]Can'tcreatetestfile/mydata/mysql/localhost.lower-test
2019-08-30T11:18:22.980338Z0[Warning]Can'tcreatetestfile/mydata/mysql/localhost.lower-test
原因:selinux
解決辦法:setenforce0

重置密碼

日誌檔案/var/log/mysqld.log

預設密碼:
grep'pass'/var/log/mysqld.log

#
初識化密碼
mysql_secure_installation
輸入root密碼
是否要修改密碼
是否要修改root密碼(大小寫、數字、特殊字元)
是否要刪除匿名使用者
是否禁止root遠端登入
是否要刪除test資料庫
是否要重新整理表的許可權

密碼校驗規則

設定密碼的校驗規則
mysql>setglobalvalidate_password_policy=0;
0校驗級別最低,只校驗密碼的長度,長度可以設定
1必須包括大寫字母、小寫字母、數字、特殊字元
2必須滿足上面兩條,並追加,對於密碼中任意連續的4個(或者4個以上)字元不能是字典中的單詞
mysql>setglobalvalidate_password_length=3;修改密碼的最短長度

建立使用者

createuser'username'@'ip'identifiedby'password';
全部ip的話則是%

檢視許可權

showgrants;

使用者授權

mysql>grantallon*.*to'root'@'%'identifiedby'1234';
QueryOK,0rowsaffected,1warning(0.00sec)

mysql>
flushprivileges;
QueryOK,0rowsaffected(0.00sec)

mysql主從

主伺服器上配置如下,進入配置檔案/etc/my.cnf

server-id=1設定id
log-bin=/mydata/log/master-bin啟動binlog日誌
sync_binlog=1確保主從複製事務安全

主伺服器執行如下sql

mysql>grantreplicationslaveon*.*to'slave'@'192.168.21.131'identifiedby'1234';
QueryOK,0rowsaffected,1warning(0.00sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.01sec)
showmasterstatus\G

從服務配置如下:

server-id=12
relay_log=/mydata/log/slave-log
sync_binlog=1
read-only=ON

從伺服器執行如下sql

CHANGEMASTERTO
MASTER_HOST='master2.example.com',
MASTER_USER='replication',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='master2-bin.001',
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;#監控主伺服器的時間
#連線主庫
changemastertomaster_host='192.168.21.128',master_user='slave',master_password='1234';
#啟動程序
startslave;
#檢視狀態
showslavestatus\G

問題:

Last_IO_Error:Fatalerror:TheslaveI/OthreadstopsbecausemasterandslavehaveequalMySQLserverUUIDs;theseUUIDsmustbedifferentforreplicationtowork.
解決辦法:
rm-rf/mydata/mysql/auto.cnf
systemctlrestartmysqld

mysql備份與恢復

備份

mysqldump

  • 鎖表
  • 備份特別慢,適用於資料量較小
  • 不可以做增量備份
  • 單執行緒
-A,--all-databases所有的庫
-B指定備份的庫
—F備份前重新整理日誌
--flush-privileges重新整理授權表
-p密碼
-u使用者
-P埠
觸發器
儲存過程和儲存函式
##備份
mysqldump-uroot-S/mydata/mysql/mysql.sock-A-p>mysql.sql
##恢復一
直接在資料庫裡面sourcemysql.sql檔案
##恢復二
mysql-uroot-p<mysql.sql

xtrabackup

  • 多程序
  • 支援增量備份
  • 鎖行
安裝
yuminstallhttps://repo.percona.com/yum/percona-release-latest.noarch.rpm#安裝yum倉庫
yuminstall-ypercona-xtrabackup-24
--target-dir=name#指定備份生成的目錄
--backup備份
--prepare準備
--databases=namefilteringbylistofdatabases.
--databases-file=name配置檔案

建立一個使用者

mysql>createuser'backup'@'localhost'identifiedby'backup';
QueryOK,0rowsaffected(0.00sec)

mysql>
grantreload,locktables,process,replicationclienton*.*to'backup'@'localhost';
QueryOK,0rowsaffected(0.00sec)

mysql>
flushprivileges;
QueryOK,0rowsaffected(0.00sec)

備份

xtrabackup--backup--target-dir=/mydata/backup/base-ubackup-pbackup--socket=/mydata/mysql/mysql.sock
###看得如下資訊,代表成功
xtrabackup:Transactionlogoflsn(5480853)to(5480862)wascopied.
19090209:25:09completedOK!

恢復

準備檔案

xtrabackup--prepare--target-dir=/mydata/backup/base
InnoDB:Startingshutdown...
InnoDB:Shutdowncompleted;logsequencenumber5482536
19090209:28:12completedOK!

恢復檔案

cd/mydata/backup/base
cp-rfhello/mydata/mysql/
chownmysql.mysql/mydata/mysql/hello/-R

恢復全部檔案

xtrabackup--copy-back--target-dir=/mydata/backup/base
chownmysql.mysql*-R

增量備份

xtrabackup--backup--target-dir=/mydata/backup/t1--incremental-basedir=/mydata/backup/base-uroot-p--socket=/mydata/mysql/mysql.sock
--incremental-dir全備的路徑
xtrabackup--backup--target-dir=/mydata/backup/t2--incremental-basedir=/mydata/backup/t1-uroot-p--socket=/mydata/mysql/mysql.sock
--incremental-basedir應該是上一次的增量備份目錄
xtrabackup--prepare--apply-log-only--target-dir=/mydata/backup/base

恢復(只能全部刪除以後再恢復)

xtrabackup--prepare--apply-log-only--target-dir=/mydata/backup/base
xtrabackup--prepare--apply-log-only--target-dir=/mydata/backup/base--incremental-dir=/mydata/backup/t1
xtrabackup--prepare--apply-log-only--target-dir=/mydata/backup/base--incremental-dir=/mydata/backup/t2
xtrabackup--copy-back--target-dir=/mydata/backup/base
chownmysql.mysql*-R
systemctlrestartmysqld