查询linux当前各个状态的连接数量
- 查询各个连接状态的连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
- 统计80端口连接数
netstat -nat|grep -i "80"|wc -l
- 统计httpd协议连接数
ps -ef|grep httpd|wc -l
- 统计已连接上的,状态为 established 的连接数
netstat -na|grep ESTABLISHED|wc -l
- 查出哪个IP地址连接最多
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r
netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r
mysql随机取一条数据
FROM `tablename` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `tablename`)-(SELECT MIN(id) FROM `tablename`))+(SELECT MIN(id) FROM `tablename`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;
mysql查询哪个表占用空间大
- mysql数据库中information_schema 数据库存储了数据库很多信息,可以通过查询tables表来获得所需要的表相关信息。
mysql> select table_name,table_rows from tables order by table_rows desc limit 10;
mysql更改sock文件位置
- 由于Mysql在有时会出现mysql.sock定位误差,会造成不连接数据库。
[client]
socket = /tmp/mysql.sock
[mysqld]
socket = /tmp/mysql.sock
没有[client]的话。自己加入~
mysql不停机修改最大连接数
- gdb是一个工具,需要yum安装一下
然后找到mysql.pid文件所在位置
ps -ef | grep mysql
mysql 1310 1 99 12月09 ? 4-19:39:03 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
然后使用gdb修改连接数即可
gdb -p $(cat /var/run/mysqld/mysqld.pid) -ex "set max_connections=500" -batch
mysql的sock文件丢失
sock文件丢失,造成数据库无法启动,日志中显示mysql_safe之类的提示,但没有error
mysql日志:
160608 09:18:25 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
160608 09:18:25 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
160608 09:18:26 mysqld_safe mysqld from pid file /var/run/mariadb/mariadb.pid ended-
解决方法
$/usr/local/bin/mysql_install_db //到bin目录执行,重建授权表$/usr/local/bin/mysqld_safe &
linux清除缓存
- 这个文件可以设置的值分别为1、2、3。它们所表示的含义为:
echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象。
docker清理空间
- 该指令默认只会清除悬空镜像,未被使用的镜像不会被删除
docker system prune -a
删除任何未被容器关联引用的卷
docker volume rm $(docker volume ls -qf dangling=true)
复制文件进docker
-
docker ps -a
找出我们想要的容器名字
查找容器长ID
docker inspect -f '{{.ID}}' python
docker cp 本地路径 容器长ID:容器路径**[备注:其实容器ID用短ID就可以]**
docker cp /etc/localtime 38ef22f922704b32cf2650407e16b146bf61c221e6b8ef679989486d6ad9e856:/etc/localtime
- 从docker往外面复制文件,也一样的,把路径对换一下就好了
查询比较耗时的SQL
select * from information_schema.processlist where time >3 and state='Sending data';
linux耗时操作防止终端挂起
- 在新session执行命令(使进程不属于接受 HUP 信号的终端的子进程,那么就不会受到 HUP 信号的影响)
- setsid ./shell.sh
linux删除文件名乱码的文件
- ls -i 找到节点编号
- find -inum 33333 -delete 根据节点编号找到并删除文件
-
锁定网卡配置文件
- 锁定文件
cd /etc/sysconfig/network-scripts/
chattr +i ifcfg-eth0
- 解锁文件
chattr -i ifcfg-eth0
docker部署jenkins
- docker run -p 8080:8080 -p 50000:50000 -v /home/docker/jenkins:/var/jenkins_home jenkins
- 应该会报如下错误
touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
需要给目录增加jenkins权限 chown -R 1000:1000 /home/docker/jenkins
- 默认密码的查找方式 docker exec -it dc68ae9d6603 cat /var/jenkins_home/secrets/initialAdminPassword
- 解决“Getting Started”卡死问题 jenkins_home/jenkins/updates$ vim default.json
将"http://www.google.com/",修改为"connectionCheckUrl":"http://www.baidu.com/"
修改完成后如果重启docker服务,上面这个配置会被还原,以后再跟进一下看看
docker容器支持真正的root权限
- --privileged=true
docker里的程序(php)需要访问磁盘文件的时候可能会没有权限
- 需要给目录增加jenkins权限 chown -R 1000:1000 /wwwroot
docker容器里安装软件无法启动(报错:Failed to get D-Bus connection: Operation not permitted
)
- 这个的原因是因为dbus-daemon没能启动。其实systemctl并不是不可以使用。将你的CMD或者entrypoint设置为/usr/sbin/init即可。会自动将dbus等服务启动起来。
docker run -itd -name mysql mysql-yum-install /usr/sbin/init
docker exec -it mysql /bin/bash
gitlab docker构建镜像报如下错误
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied
- 原因是:docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。
- 设置一下用户权限
usermod -aG docker gitlab-runner
pgsql 备份与还原
备份:pg_dump -h localhost -p 5432 -U postgres -W -F c -b -v -f "/databak/database.backup" database
恢复:pg_restore -h localhost -p 5432 -U postgres -W -d database -v "/databak/database.backup"
docker里的程序控制台日志太大的问题
- 是因为控制台输出的日志系统会记录在一个文件里,当输出内容太多的时候,这个日志文件就会特别大,在启动参数里增加下面两个参数即可
--log-opt max-size=10m --log-opt max-file=3
windows下不安装第三方工具抓包
- 首先开始抓包(注意:命令行需要管理员权限启动),这个命令下面还有很多参数,详细的自己百度吧
netsh trace start capture=yes scenario=NetConnection tracefile=C:\net.etl maxSize=200M
- 然后停止抓包
netsh trace stop
- C盘根目录下会出现两个文件 net.etl 和 net.cab ,cab文件里包含里系统非常全面的配置信息,etl可以用“Microsoft Message Analyzer“工具打开
swarm灰度发布
- image 指定要更新的镜像
- update-parallelism 指定最大同步更新的任务数
- update-delay 指定更新间隔
docker service update --image image-name --update-delay 15s --update-parallelism 1 service-name
CentOS7里network和NetworkManager
CentOS里提供了两套网络管理工具network和NetworkManager,但是我们在实际使用过程中发现他两个会有冲突,目前NetworkManager版本也比较低,比较适合于桌面端,在服务器上关闭掉并使用network就好了
chkconfig NetworkManager off
chkconfig network on
service NetworkManager stop
service network start
swarm添加管理节点
docker swarm join-token manager
docker build添加代理
docker build . \
--build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
--build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
--build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
-t your/image:tag
防火墙规则
新增防火墙规则(允许指定ip访问指定端口):
firewall-cmd --permanent --add-rich-rule=" \
rule family="ipv4" \
source address="192.168.1.11" \
port protocol="tcp" \
port="8080" \
accept"
删除防火墙规则:
firewall-cmd --permanent --remove-rich-rule=" \
rule family="ipv4" \
source address="192.168.1.11" \
port protocol="tcp" \
port="8080" \
accept"
允许10.0.0.55访问所有端口(允许指定ip访问所有端口):
firewall-cmd --zone=public --permanent --add-rich-rule=" \
rule family="ipv4" \
source address="10.0.0.55" \
accept"
移除10.0.0.55访问所有端口:
firewall-cmd --zone=public --permanent --remove-rich-rule=" \
rule family="ipv4" \
source address="10.0.0.55" \
accept"