哈哈哈哈哈哈
这篇文章不错!
这篇文章不错!
作者对主题的挖掘深入骨髓,展现了非凡的洞察力和理解力。
情感真挚自然,字里行间传递出强烈的感染力。
作者的情感表达细腻入微,让人在阅读中找到了心灵的慰藉。
内容的丰富性和深度让人仿佛置身于知识的海洋,受益匪浅。
# 图片回复
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/93624.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/12554.html
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/82001.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/83913.html
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/82001.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/83913.html
首页
网站统计
关于本站
在线留言
友链申请
高清壁纸
论坛
开往
虫洞
推荐
Linux命令
资源网
Search
1
Typecho Cuteen主题美化
5,129 阅读
2
京东呆瓜搭建青龙面板+xdd-plus机器人+nvjdc配置
4,597 阅读
3
好久不见之网站底部样式
4,237 阅读
4
傻妞机器人最新版安装教程
4,108 阅读
5
Joe 主题 6.xx 底部增强,显示标签及二维码分享
3,114 阅读
Linux
Shell
Mysql
Typecho
网络
其他
Redis
登录
Search
标签搜索
Linux
Typecho
美化
Nginx
Shell
综合架构
Mysql
Joe
源码
Web
数据备份
命令
Ansible
k8s
定时任务
视频
网易云
白嫖
网络
Rsync
小黑
累计撰写
155
篇文章
累计收到
921
条评论
博主
4月14日
在线
首页
栏目
Linux
Shell
Mysql
Typecho
网络
其他
Redis
页面
网站统计
关于本站
在线留言
友链申请
高清壁纸
推荐
Linux命令
资源网
开往
搜索到
36
篇与
Linux
的结果
2023-01-13
K8S部署grafana
{mtitle title="yaml文件"/}apiVersion: v1 kind: PersistentVolumeClaim metadata: name: grafana-pvc namespace: kube-mon spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: nfs-client --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: grafana name: grafana namespace: kube-mon spec: selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: securityContext: fsGroup: 472 supplementalGroups: - 0 containers: - name: grafana image: grafana/grafana:8.4.4 imagePullPolicy: IfNotPresent ports: - containerPort: 3000 name: http-grafana protocol: TCP resources: requests: cpu: 250m memory: 750Mi volumeMounts: - mountPath: /var/lib/grafana name: grafana-pv volumes: - name: grafana-pv persistentVolumeClaim: claimName: grafana-pvc --- apiVersion: v1 kind: Service metadata: name: grafana namespace: kube-mon spec: ports: - port: 3000 protocol: TCP targetPort: http-grafana selector: app: grafana type: NodePort
2023年01月13日
247 阅读
0 评论
0 点赞
2023-01-13
K8S部署nexus
{mtitle title="yaml文件"/}apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nexus-pvc # 自定义 namespace: nexus # 自定义,与本文前后所有命名空间保持一致 labels: pvc: nexus-pvc # 自定义 spec: storageClassName: nfs-client # 创建的StorageClass的名字 accessModes: - ReadWriteOnce resources: requests: storage: 20Gi --- kind: Deployment apiVersion: apps/v1 metadata: name: nexus3 # 自定义 labels: app: nexus3 # 自定义 namespace: nexus # 自定义,与本文前后所有命名空间保持一致 spec: replicas: 1 # 副本的数量 selector: matchLabels: app: nexus3 template: metadata: labels: app: nexus3 spec: containers: - name: nexus3 image: sonatype/nexus3:3.42.0 ports: - name: nexus3-8081 containerPort: 8081 # 容器端口 protocol: TCP resources: limits: memory: 6G cpu: 1000m imagePullPolicy: IfNotPresent volumeMounts: - name: data mountPath: /nexus-data # 数据路径挂载出来 restartPolicy: Always volumes: - name: data persistentVolumeClaim: claimName: nexus-pvc # PVC的名字 readOnly: false #volumes: # - name: nexus-data # nfs: # path: /data/nfs/graph/nexus-data # server: 192.168.58.106 --- kind: Service apiVersion: v1 metadata: name: nexus3 namespace: nexus labels: app: nexus3 spec: type: NodePort ports: - port: 8081 targetPort: 8081 nodePort: 30520 # 对外开发的端口,自定义 selector: app: nexus3
2023年01月13日
386 阅读
2 评论
0 点赞
2022-12-17
部署 KubeSphere
部署 KubeSphere确保您的机器满足安装的前提条件之后,可以按照以下步骤安装 KubeSphere。官方文档:https://kubesphere.io/zh/docs/v3.3/quick-start/minimal-kubesphere-on-k8s/wget https://github.com/kubesphere/ks-installer/releases/download/v3.3.1/kubesphere-installer.yaml wget https://github.com/kubesphere/ks-installer/releases/download/v3.3.1/cluster-configuration.yamlcluster-configuration.yaml 这个文件搜索 devops,改成truekubectl appl -f kubesphere-installer.yaml kubectl appl -f cluster-configuration.yaml检查安装日志:kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f使用 kubectl get pod --all-namespaces 查看所有 Pod 是否在 KubeSphere 的相关命名空间中正常运行。如果是,请通过以下命令检查控制台的端口(默认为 30880):kubectl get svc/ks-console -n kubesphere-system确保在安全组中打开了端口 30880,并通过 NodePort (IP:30880) 使用默认帐户和密码 (admin/P@88w0rd) 访问 Web 控制台。登录控制台后,您可以在系统组件中检查不同组件的状态。如果要使用相关服务,可能需要等待某些组件启动并运行。
2022年12月17日
304 阅读
0 评论
1 点赞
2022-10-27
SSH连接服务器失败
重启sshd服务,导致ssh连接不上服务器,经过排查,查看日志发现出现一下错误Oct 25 12:59:00 kdgcapp-58-106 sshd[7413]: PAM unable to dlopen(/usr/lib64/security/pam_stack.so): /usr/lib64/security/pam_stack.so: cannot open shared obje... directory Oct 25 12:59:00 kdgcapp-58-106 sshd[7413]: PAM adding faulty module: /usr/lib64/security/pam_stack.so解决方法:经过排查发现是ssh rpm 升级后会修改/etc/pam.d/sshd 文件,如下: #%PAM-1.0 auth required pam_stack.so service=system-auth account required pam_nologin.so account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth session required pam_stack.so service=system-auth 修改为之前的即可。修改后的文件如下: #%PAM-1.0 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account include password-auth password include password-aut # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth
2022年10月27日
642 阅读
0 评论
0 点赞
2022-10-11
搭建jsdelivr镜像站
如果不想搞的话,可以用我的 https://jsd.ucbk.cn新建一个网站,然后把下面内容覆盖到nginx配置文件server { listen 80; listen 443 ssl http2; # 请更改为你的证书路径 ssl_certificate fullchain.pem; ssl_certificate_key privkey.pem; # 请更改为你的镜像域名 server_name jsd.ucbk.cn; location / { proxy_pass https://cdn.jsdelivr.net; proxy_set_header Host $proxy_host; proxy_set_header Accept-Encoding ''; proxy_ssl_server_name on; proxy_ssl_name $proxy_host; proxy_redirect / /; # Proxy Cache proxy_cache jsdelivr; proxy_cache_lock on; proxy_cache_lock_timeout 15s; proxy_cache_use_stale updating; proxy_cache_background_update on; proxy_cache_key $host$request_uri; proxy_cache_valid 200 301 302 30d; proxy_cache_valid 500 501 502 503 15s; proxy_cache_valid any 5m; # Replace Domain sub_filter_once off; sub_filter_types application/javascript application/json text/xml text/css; sub_filter '$proxy_host' '$host'; } } # 缓存路径请根据需要更改 proxy_cache_path /var/tmp/nginx/jsdelivr levels=1:2 use_temp_path=off keys_zone=jsdelivr:300m inactive=30d max_size=30g;之后直接把网站涉及到cdn.jsdelivr.net都改成你自己的就可以了,如果不想改的话直接在你网站nginx配置中加以下内容就可以了sub_filter_once off; sub_filter_types application/javascript application/json text/xml text/css; sub_filter 'cdn.jsdelivr.net' 'jsd.ucbk.cn';
2022年10月11日
519 阅读
1 评论
3 点赞
2022-05-27
把程序制作成docker镜像
前言docker相关命令: 点击创建Dockerfile文件先把程序单独放一个目录,这个app目录下面就是程序文件,我在这里面创建Dockerfilecd app vim Dockerfile #(这里第一个字母要大写) FROM ubuntu:21.04 AS runtime #基本镜像 ENV DEBIAN_FRONTEND=noninteractive WORKDIR /app #创建容器的运行目录 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #宿主机和容器时间同步 RUN echo 'Asia/Shanghai' >/etc/timezone #宿主机和容器时间同步,这个可以和上面写在一块 COPY . /app #容器的运行目录 run apt-get update \ #安装程序的相关依赖 && apt-get install -y wget \ && wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \ && dpkg -i packages-microsoft-prod.deb \ && rm -rf packages-microsoft-prod.deb \ && apt-get install -y apt-transport-https \ && apt-get install -y vim \ && apt-get update \ && apt-get install -y dotnet-sdk-3.1 ENV ASPNETCORE_URLS=http://+:1066 EXPOSE 1066 #容器的端口 ENTRYPOINT ["dotnet", "Microsoft365_E5_Renew_X.dll"] #执行程序 PS:参数的含义,自己自行百度吧,这里只大概说一下打包成镜像[root@VM-12-13-centos app]# docker build -t microsoft-365-e5:1.1.0 -f Dockerfile . #docker build -t 镜像名:版本 -f Dockerfile文件 注意这里有个'.' 不要忘记了出现上图说明创建成功,然后看一下docker images创建容器docker run -dit \ -v $PWD/Microsoft365_E5_Renew_X/app/Deploy/Config.xml:/app/Deploy/Config.xml \ -v $PWD/Microsoft365_E5_Renew_X/appdata:/app/appdata \ -p 1066:1066 \ --name Microsoft365 \ --restart always \ microsoft-365-e5:1.1.0上传dockerhub首先我们先创建一下账号 https://hub.docker.com/在Linux中登录docker login输入注册的用户和密码,然后我们先给镜像打个标签,因为上传格式为 用户名/镜像名:版本,其实在build的时候就可以命名成这样docker tag microsoft-365-e5:1.1.0 用户名/microsoft-365-e5:1.1.0创建好之后,push一下,就完成了docker push 用户名/microsoft-365-e5:1.1.0
2022年05月27日
790 阅读
1 评论
0 点赞
2022-05-26
挖矿木马自助清理手册
什么是挖矿木马挖矿木马会占用CPU进行超频运算,从而占用主机大量的CPU资源,严重影响服务器上的其他应用的正常运行。黑客为了得到更多的算力资源,一般都会对全网进行无差别扫描,同时利用SSH爆破和漏洞利用等手段攻击主机。部分挖矿木马还具备蠕虫化的特点,在主机被成功入侵之后,挖矿木马还会向内网渗透,并在被入侵的服务器上持久化驻留以获取最大收益。整体的攻击流程大致如下图所示:二. 挖矿木马中招特征挖矿木马会在用户不知情的情况下利用主机的算力进行挖矿,最明显的特征就是主机的CPU被大量消耗,查看云主机CPU占用率的方法有两种:控制台实例监控主机执行TOP命令如下图所示,通过执行top命令,即可在返回结果中看到当时系统的CPU占用率。top -c如果您的主机CPU占用率居高不下,那么主机很有可能已经被植入了挖矿木马,会影响服务器上的其他应用的正常运行,需要立刻上机排查。三. 清理挖矿木马及时隔离主机部分带有蠕虫功能的挖矿木马在取得主机的控制权后,会继续对公网的其他主机,或者以当前主机作为跳板机对同一局域网内的其他主机进行横向渗透,所以在发现主机被植入挖矿木马后,在不影响业务正常运行的前提下,应该及时隔离受感染的主机,然后进行下一步分析和清除工作。腾讯云主机可以通过设置安全组隔离主机,具体参考如下链接:https://cloud.tencent.com/document/product/215/20089阻断异常网络通信挖矿木马不仅会连接矿池,还有可能会连接黑客的C2服务器,接收并执行C2指令、投递其他恶意木马,所以需要及时进行网络阻断。(1)检查主机防火墙当前生效的iptables规则中是否存在业务范围之外的可疑地址和端口,它们可能是挖矿木马的矿池或C2地址iptables -L -n(2)从iptables规则中清除可疑地址和端口vi /etc/sysconfig/iptables(3)阻断挖矿木马的网络通信iptables -A INPUT -s 可疑地址 -j DROP iptables -A OUTPUT -d 可疑地址 -j DROP清除计划任务大部分挖矿木马会通过在受感染主机中写入计划任务实现持久化,如果仅仅只是清除挖矿进程,无法将其根除,到了预设的时间点,系统会通过计划任务从黑客的C2服务器重新下载并执行挖矿木马。挖矿木马常见的计划任务通常是下载并执行sh脚本,如下图所示:可以通过执行如下命令查看是否存在可疑定时任务,若有,则先保存相关记录用于后续分析,再进行删除:查看系统当前用户的计划任务:crontab -l查看系统特定用户的计划任务:crontab -u username -l查看其他计划任务文件:cat /etc/crontab cat /var/spool/cron cat /etc/anacrontab cat /etc/cron.d/ cat /etc/cron.daily/ cat /etc/cron.hourly/ cat /etc/cron.weekly/ cat /etc/cron.monthly/ cat /var/spool/cron/清除启动项除了计划任务,挖矿木马通过添加启动项同样能实现持久化。可以使用如下命令查看开机启动项中是否有异常的启动服务。CentOS7以下版本:chkconfig –listCentOS7及以上版本:systemctl list-unit-files如果发现有恶意启动项,可以通过如下命令进行关闭:CentOS7以下版本:chkconfig 服务名 offCentOS7及以上版本:systemctl disable 服务名另外,还需要仔细排查以下目录及文件,及时删除可疑的启动项:/usr/lib/systemd/system /usr/lib/systemd/system/multi-user.target.wants /etc/rc.local /etc/inittab /etc/rc0.d/ /etc/rc1.d/ /etc/rc2.d/ /etc/rc3.d/ /etc/rc4.d/ /etc/rc5.d/ /etc/rc6.d/ /etc/rc.d/排查的时候,可以按照文件修改时间来排序,重点排查近期被创建服务项。如下图所示,系统近期被创建了一个名为bot.service的服务,该服务在系统启动时会启动/etc/kinsing这个木马文件,需要关闭bot服务,并删除/etc/kinsing文件。清除预加载so通过配置/etc/ld.so.preload,可以自定义程序运行前优先加载的动态链接库,部分木马通过修改该文件,添加恶意so文件,从而实现挖矿进程的隐藏等恶意功能。检查/etc/ld.so.preload(该文件默认为空),清除异常的动态链接库。可以执行> /etc/ld.so.preload命令进行清除。清除SSH公钥挖矿木马通常还会在~/.ssh/authoruzed_keys文件中写入黑客的SSH公钥,这样子就算用户将挖矿木马清除得一干二净,黑客还是可以免密登陆该主机,这也是常见的保持服务器控制权的手段。排查~/.ssh/authorized_keys文件,如果发现可疑的SSH公钥,直接删除。清除挖矿木马(1)清除挖矿进程挖矿木马最大的特点就是会在用户不知情的情况下,利用主机的算力进行挖矿,从而消耗主机大量的CPU资源,所以,通过执行如下命令排查系统中占用大量CPU资源的进程。top -c ps -ef确认相关进程为挖矿进程后,按照如下步骤将其清除:获取并记录挖矿进程的文件路径:ls -l /proc/$PID/exe杀死挖矿进程:kill -9 $PID删除挖矿进程对应的文件(2)清除其它相关恶意进程恶意进程与外部的C2服务器进行通信时,往往会开启端口进行监听。执行如下命令,查看服务器是否有未被授权的端口被监听。netstat -antp若有未授权进程,按照如下步骤将其清除:获取并记录未授权进程的文件路径:ls -l /proc/$PID/exe杀死未授权进程:kill -9 $PID删除未授权进程对应的文件还可以通过如下命令排查近期新增的文件,清除相关木马 find /etc -ctime -2 (这里指定目录为/etc,获取近2天内的新增文件) lsof -c kinsing (这里要查看文件名为kinsing的相关进程信息)风险排查、安全加固对系统进行风险排查和安全加固,避免挖矿木马卷土重来,详情可参考如下链接:https://cloud.tencent.com/document/product/296/9604四. 常见问题明明刚刚清理了挖矿木马,没过多久就又卷土重来?很多用户会反馈挖矿木马老是清理不干净,明明已经Kill了进程,删除了木马文件,没过多久,CPU占用率又上来了。究其根本,还是因为清除得不够彻底。大部分用户都只是Kill掉挖矿进程和对应文件,却没有清理计划任务和守护进程。一般建议先清除计划任务、启动项、守护进程,再清除挖矿进程和其他恶意进程。如何判定可疑进程是否为恶意进程?如下图所示,未知进程kinsing监听本地31458端口,非常可疑,可通过如下方法判定:(1)执行ls -al /proc/$PID/exe确认可疑进程对应的文件;(2)若文件未被删除,则直接上传文件到Virustotal进行检测,或者计算出文件对应的md5,使用md5去Virustotal进行查询;若文件已被删除,可执行cat /proc/$PID/exe > /tmp/t.bin将进程dump到特定目录,再上传文件到Virustotal或者计算dump文件对应的md5到Virustotal进行查询。如果有多款杀毒引擎同时检出,那基本可以判定该进程为恶意进程。Virustotal地址:https://www.virustotal.com/gui/s为什么系统CPU占用率接近100%,却看不到是哪个进程导致的?如下图所示,系统CPU占用率接近100%,却看不到是哪个进程导致的,这种情况一般是因为系统命令被木马篡改了,从而隐藏了木马进程的踪迹,让用户无法进行溯源分析。命令篡改有多种方式,分别如下:(1)top源文件被篡改,恶意进程信息被过滤后返回通过执行如下命令即可复原:rm -rf /usr/bin/top && mv /usr/bin/top.original /usr/bin/top【相关文章】https://blog.csdn.net/chenmozhe22/article/details/112578057(2)篡改预加载so文件,ls、top、ps等命令已经被木马的动态链接库劫持,无法获得木马进程相关的信息通过执行如下命令即可复原:> /etc/ld.so.preload && rm -rf 恶意so文件路径复制 【相关文章】https://cloud.tencent.com/developer/article/1744547(3)通过其他未知手段篡改系统命令可分别尝试如下两种方案解决:i.从其他相同版本系统中拷贝命令源文件到当前系统中进行覆盖;可使用uname -a命令查看当前系统版本;ii.或者安装busybox来对系统进行排查。busybox是一个集成了300多个最常用Linux命令和工具的软件,可以使用busybox替代系统命令对系统进行排查; yum -y install wget make gcc perl glibc-static ncurses-devel libgcrypt-devel wget http://busybox.net/downloads/busybox-1.33.0.tar.bz2 tar -jxvf busybox-1.33.0.tar.bz2 cd busybox-1.33.0 && make && make install【相关文章】https://www.cnblogs.com/angryprogrammer/p/13456681.html
2022年05月26日
273 阅读
0 评论
0 点赞
2022-04-02
docker容器打包成镜像
先查看镜像docker images格式# docker commit [OPTIONS] CONTAINER(容器名称或者ID) [REPOSITORY[:TAG]] -a : 提交的镜像作者 -c : 使用Dockerfile指令来创建镜像 -m : 描述 -p : 在commit时,将容器暂停 docker commit -a xiaohei -m "容器名" 镜像名 镜像标签 docker commit -a xiaohei -m "ql" qinglong qinglong:2.12dokcer 重新命名标签docker tag 镜像名 用户名/镜像名 docker tag qinglong:2.12 moexiaohei/qinglong:2.12 docker save -o qinglong.tar qinglong:2.12
2022年04月02日
328 阅读
0 评论
0 点赞
2022-02-15
centos7 防火墙firewall命令
基本使用启动:systemctl start firewalld 关闭:systemctl stop firewalld 查看状态:systemctl status firewalld 开机禁用:systemctl disable firewalld 开机启用:systemctl enable firewalld配置firewalld-cmd查看版本:firewall-cmd --version 查看帮助:firewall-cmd --help 显示状态:firewall-cmd --state 查看所有打开的端口:firewall-cmd --zone=public --list-ports 更新防火墙规则:firewall-cmd --reload端口开放添加:firewall-cmd --zone=public --add-port=80/tcp --permanent 重新载入:firewall-cmd --reload 删除:firewall-cmd --zone= public --remove-port=80/tcp --permanent端口转发添加(例如3306 -> 3336):firewall-cmd --permanent --zone=public --add-forward-port=port=3336:proto=tcp:toport=3306:toaddr=删除:firewall-cmd --permanent --remove-forward-port=port=3306:proto=tcp:toport=3336:toaddr=查看转发的端口:firewall-cmd --list-forward-ports查看当前开了哪些端口其实一个服务对应一个端口,每个服务对应/usr/lib/firewalld/services下面一个xml文件。firewall-cmd --list-services查看还有哪些服务可以打开firewall-cmd --get-services查看所有打开的端口:firewall-cmd --zone=public --list-ports更新防火墙规则:firewall-cmd --reload添加多个端口firewall-cmd --permanent --zone=public --add-port=8080-8083/tcp删除某个端口firewall-cmd --permanent --zone=public --remove-port=81/tcp针对某个 IP开放端口firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="6379" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.233" accept"删除某个IPfirewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.51" accept"针对一个ip段访问firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="9200" accept"添加操作后别忘了执行重载firewall-cmd --reload
2022年02月15日
324 阅读
0 评论
0 点赞
2022-01-26
Linux 误删文件恢复命令及方法!
前言无论在哪个系统中,删除文件都是必须谨慎的操作。因为如果不小心删除了重要文件,就会导致个人或公司出现重大的损失。类似于windows系统误删了文件,可以使用一些软件进行恢复操作。Linux也是有几款软件可以做到误删恢复的。注意事项:虽然有软件可以对误删的数据进行恢复,但是完全恢复数据的概率并不是百分百的。因此,使用rm命令删除文件的时候,一定要小心;重要的数据一定要有备份;并且恢复删除的数据前,删除文件的目录内不能往进存放新东西,否则覆盖掉的信息无法找回。下面介绍的就是对Linux中误删文件的恢复操作。1、lsof原理:这个命令实际上并不能直接用来恢复文件,不过它可以列出被各种进程打开的文件信息。配合其他命令,从/proc目录下的信息中恢复“文件已删除,但进程仍保持打开该文件的状态”的文件。/proc目录是挂载的是在内存中所映射的一块区域,当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。因此,当我们对文件进行读取或写入时(即有进程正使用文件时),哪怕硬盘中的该文件已删除,还可以从内存中的信息恢复文件。注意:必须以 root 用户的权限运行, 因为lsof 需要访问核心内存和各种文件。只能恢复“文件已删除,但进程仍保持打开该文件的状态”的文件。如果误删了目录,目录中的其他文件未被进程打开,没有进行使用的文件将无法使用此方法恢复。lsof输出信息的意义:COMMAND 进程的PID(进程标识符) USER 进程所有者 FD 用来识别该文件(文件描述符) DEVICE 指定磁盘的名称 SIZE 文件的大小 NODE 索引节点(文件在磁盘上的标识) NAME 打开文件的确切名称最常用参数: -c 显示某进程现在打开的文件 -p 显示哪些文件被某pid进程打开 -g 显示归属某gid的进程情况 -d 显示目录下被进程开启的文件 -d 显示使用fd为4的进程 -i:80 显示打开80端口的进恢复文件操作环境:在/mnt下有一些文件,其中一个文件train.less正在被查看,然后另一个终端将其删除【1】lsof查看查看正在使用删除文件的进程号lsof /mnt【2】恢复切换到/proc下,删除文件对应的进程的pid下的文件描述符中的目录中;将对应的内容重定向或cp到其他文件中 重点关注:PID 与 FD cd /proc/31284/fd/ cat 4 > /mnt/ferris_train.less2、extundelete原理:使用存储在分区日志中的信息,尝试恢复已从ext3或ext4的分区中删除的文件优点:相比于ext3grep只能恢复ext3文件系统的文件,其适用范围更广,恢复速度更快extundelete官方地址(官方文档):http://extundelete.sourceforge.netextundelete下载地址:http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 (最新版本的extundelete是0.2.4,于2013年1月发布)注意:在数据删除之后,要卸载被删除数据所在的磁盘或是分区如果是系统根分区遭到误删除,就要进入单用户模式,将根分区以只读的方式挂载,尽可能避免数据被覆盖数据被覆盖后无法找回恢复仍有一定的机率失败,平时应对重要数据作备份,小心使用rm1、依赖安装centos安装操作yum install e2fsprogs-devel e2fsprogs* gcc*ubuntu安装操作apt-get install build-essential e2fslibs-dev e2fslibs-dev2、编译安装wget http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 tar xf extundelete-0.2.4.tar.bz2 cd extundelete-0.2.4 ./configure make make installcd /root/extundelete-0.2.4/srcextundelete -v执行make命令会在src目录下生成extundelete可执行文件,可在此直接执行恢复命令。执行make install会将程序安装在/usr/local/bin/下恢复文件操作执行extundelete命令的当前目录必须是可写的。1、查看要恢复文件的分区的文件系统df -Th2、对要恢复文件的分区解除挂载umount /mnt3、查看可以恢复的数据指定误删文件的分区进行查找 最后一列标记为Deleted的文件,即为删除了的文件extundelete /dev/vdb1 --inode 2 (根分区的inode值是2)4、恢复单个目录指定要恢复的目录名 如果是空目录,则不会恢复extundelete /dev/vdb1 --restore-directory ferris当执行恢复文件的命令后,会在执行命令的当前的目录下生成RECOVERED_FILES目录,恢复的文件都会放入此目录中。如未生成目录,即为失败。5、恢复单个文件指定要恢复的文件名 如果几k大小的小文件,有很大几率恢复失败extundelete /dev/vdb1 --restore-file openssh-7.7p1.tar.gz6、恢复全部删除的文件无需指定文件名或目录名,恢复全部删除的数据extundelete /dev/vdb1 --restore-all
2022年01月26日
300 阅读
0 评论
0 点赞
2021-10-17
Redhat8.0本地Yum源配置方法
由于redhat系统的yum源需要注册后再使用(也就是要花钱买),我们可以自己创建一个yum的源来解决。问题提示:system is not registered with an entitlement server. You can use subscription-manager to register1、挂载系统光盘到/mnt/cdrom目录mkdir -p /mnt/cdrom mount /dev/sr0 /mnt/cdrom2、设置系统启动后自动挂载/mnt/cdrom# blkid #查看文件类型就是下面的iso9660 echo "/dev/sr0 /mnt/cdrom iso9660 defaults 0 0" >>/etc/fstab3、创建RHEL8.repovi /etc/yum.repos.d/RHEL8.repo [BaseOS] name=BaseOS baseurl=file:///mnt/cdrom/BaseOS enabled=1 gpgcheck=0 [AppStream] name=AppStream baseurl=file:///mnt/cdrom/AppStream enabled=1 gpgcheck=04、测试yum配置是否可用 yum install -y lrzsz 或者dnf -y install lrzszPS:dnf是新一代的rpm包管理器,取代了Yum包管理器,但是原来的yum命令依旧可以用
2021年10月17日
599 阅读
0 评论
2 点赞
2021-09-16
Linux一键重装脚本,Centos、Debain、Ubuntu随意选择
今天分享一下脚本,可以一键安装Centos、Debain、Ubuntu三种系统,而且可以选择各种版本的系统,同时还支持自定义系统,有需要的朋友可以试试.支持重装的系统Debian 9/10 Ubuntu 18.04/16.04 CentOS 6/7特点自动获取IP地址、网关、子网掩码自动判断网络环境,选择国内/外镜像,再也不用担心卡半天了超级懒人一键化,无需复杂的命令解决萌咖脚本中一些导致安装错误的问题CentOS 7 镜像抛弃LVM,回归ext4,减少不稳定因素一键脚本wget --no-check-certificate -O AutoReinstall.sh https://git.io/AutoReinstall.sh && bash AutoReinstall.sh执行效果如下,可以选择各种Linux发行版本,8是自定义系统
2021年09月16日
495 阅读
0 评论
1 点赞
2021-08-25
MySQL备份恢复
mysqldump命令{alert type="info"}逻辑备份工具。文本形式保存备份,可读性较强。备份逻辑: 将建库、建表、数据插入语句导出,包存至一个sql文件中。比较适合于:数据量较小的场景,单表数据行千万级别以内。百G以内的小型数据库.跨版本、跨平台迁移。可以本地、可以远程备份。注意: 一般情况下,恢复需要耗费的时间是备份耗费时间的3-5倍。{/alert}连接参数:mysqldump -u -p -S -h -P{message type="info" content="-u 用户-p 密码-S 指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock-h IP地址-P 端口(默认3306)"/}备份参数:-A:全备份[root@cs ~]# mysqldump -uroot -p123 -A >/data/backup/full.sql-B:单库或者多库备份[root@cs ~]# mysqldump -uroot -p123 -B test cs >/data/backup/db.sql单表或者多表备份[root@cs ~]# mysqldump -uroot -p123 -B world city country >/data/backup/biao.sql{alert type="warning"}注意:-A 和 -B 都带有了 create database 和use 语句,直接恢复即可单表或多表备份方式, 没有 create database 和use 语句,所以要手工进行建库和use,再恢复数据。{/alert}高级功能参数参数一: --master-data=2自动记录binlog位置点 b. 自动加GRL锁(FTWRL ,flush tables with read lock) c. 配合--single-transaction ,减少锁的时间。参数二: single-transaction对于InnoDB表,利用MVCC中一致性快照进行备份。备份数据时,不加锁 b. 备份期间如果出现DDL操作,导致备份数据不一致 问题: mysqldump是严格意义上的热备吗? 8.0 之后 master-data和single-transaction,对于InnoDB数据备份时是快照备份的. 备份表结构等数据时,还是FTWRL过程备份. --single-transaction 只是针对InnoDB表数据进行一致性快照备份。 问题: mysqldump备份需要锁表吗? 是有的。global read lock参数三: -R -E --triggers 备份特殊对象存储过程 函数 触发器 事件参数四: --max_allowed_packet=64M最大允许数据包的大小。标准化备份[root@cs backup]# mysqldump -uroot -p -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M >/data/backup/full_`date +%F`.sql Enter password: 实验:通过mysqldump全备+binlog实现PIT数据恢复{alert type="info"}环境背景: 小型的业务数据库,50G,每天23:00全备,定期binlog异地备份。故障场景: 周三下午2点,开发Navicat连接数据库实例错误,导致生产数据被误删除(DROP)恢复思路:挂维护页。检查备份、日志可用。如果只是部分损坏,建议找一个应急库进行恢复全备恢复日志截取并恢复恢复后数据校验 (业务测试部门验证)立即备份(停机冷备)恢复架构系统撤维护页,恢复业务{/alert}环境搭建mysql> create database mdb; Query OK, 1 row affected (0.00 sec) mysql> use mdb; Database changed mysql> create table t1 (id int); Query OK, 0 rows affected (0.03 sec) mysql> create table t2 (id int); Query OK, 0 rows affected (0.03 sec) mysql> create table t3 (id int); Query OK, 0 rows affected (0.03 sec) mysql> insert into t1 values(1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> insert into t2 values(1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> insert into t3 values(1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> commit; Query OK, 0 rows affected (0.00 sec) [root@cs ~]# mysqldump -uroot -p -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M >/tmp/full_`date +%F`.sql Enter password: mysql> create table t4 (id int); Query OK, 0 rows affected (0.09 sec) mysql> insert into t4 values (1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> drop database mdb; Query OK, 4 rows affected (0.06 sec)恢复过程查看备份获取二进制位置点mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 177 | | mysql-bin.000002 | 201 | | mysql-bin.000003 | 201 | | mysql-bin.000004 | 3513 | +------------------+-----------+ 4 rows in set (0.00 sec) mysql> show binlog events in 'mysql-bin.000004'; +------------------+------+----------------+-----------+-------------+---------------------------------- | Log_name | Pos | Event_type | Server_id | End_log_pos | Info +------------------+------+----------------+-----------+-------------+---------------------------------- |........................................................................................................ | mysql-bin.000004 | 1580 | Query | 1 | 1671 | create database mdb | | mysql-bin.000004 | 1671 | Anonymous_Gtid | 1 | 1736 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 1736 | Query | 1 | 1832 | use `mdb`; create table t1 (id int) | | mysql-bin.000004 | 1832 | Anonymous_Gtid | 1 | 1897 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 1897 | Query | 1 | 1993 | use `mdb`; create table t2 (id int) | | mysql-bin.000004 | 1993 | Anonymous_Gtid | 1 | 2058 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 2058 | Query | 1 | 2154 | use `mdb`; create table t3 (id int) | | mysql-bin.000004 | 2154 | Anonymous_Gtid | 1 | 2219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 2219 | Query | 1 | 2290 | BEGIN | | mysql-bin.000004 | 2290 | Table_map | 1 | 2334 | table_id: 131 (mdb.t1) | | mysql-bin.000004 | 2334 | Write_rows | 1 | 2384 | table_id: 131 flags: STMT_END_F | | mysql-bin.000004 | 2384 | Xid | 1 | 2415 | COMMIT /* xid=1405 */ | | mysql-bin.000004 | 2415 | Anonymous_Gtid | 1 | 2480 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 2480 | Query | 1 | 2551 | BEGIN | | mysql-bin.000004 | 2551 | Table_map | 1 | 2595 | table_id: 132 (mdb.t2) | | mysql-bin.000004 | 2595 | Write_rows | 1 | 2645 | table_id: 132 flags: STMT_END_F | | mysql-bin.000004 | 2645 | Xid | 1 | 2676 | COMMIT /* xid=1406 */ | | mysql-bin.000004 | 2676 | Anonymous_Gtid | 1 | 2741 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 2741 | Query | 1 | 2812 | BEGIN | | mysql-bin.000004 | 2812 | Table_map | 1 | 2856 | table_id: 133 (mdb.t3) | | mysql-bin.000004 | 2856 | Write_rows | 1 | 2906 | table_id: 133 flags: STMT_END_F | | mysql-bin.000004 | 2906 | Xid | 1 | 2937 | COMMIT /* xid=1407 */ | | mysql-bin.000004 | 2937 | Anonymous_Gtid | 1 | 3002 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 3002 | Query | 1 | 3098 | use `mdb`; create table t4 (id int) | | mysql-bin.000004 | 3098 | Anonymous_Gtid | 1 | 3163 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 3163 | Query | 1 | 3234 | BEGIN | | mysql-bin.000004 | 3234 | Table_map | 1 | 3278 | table_id: 366 (mdb.t4) | | mysql-bin.000004 | 3278 | Write_rows | 1 | 3328 | table_id: 366 flags: STMT_END_F | | mysql-bin.000004 | 3328 | Xid | 1 | 3359 | COMMIT /* xid=4749 */ | | mysql-bin.000004 | 3359 | Anonymous_Gtid | 1 | 3424 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 3424 | Query | 1 | 3513 | drop database mdb | +------------------+------+----------------+-----------+-------------+---------------------------------------+ 恢复备份 mysql> source /tmp/full_2021-08-25.sql; 二进制恢复 [root@cs tmp]# mysqlbinlog --skip-gtids --start-position=1580 --stop-position=3424 /var/lib/mysql/mysql-bin.000004 >/tmp/bin1.sql mysql> set sql_log_bin=0; mysql> source /tmp/bin.sql mysql> set sql_log_bin=1;{alert type="warning"}100G mysqldump全备恢复时间很长,误删除的表10M大小 ,有什么思路可以快速恢复?思路: a. 从全备中,将单表 建表语句和insert语句提取出来 ,进行恢复 sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `oldguo`/!d;q' /data/backup/mdp/full.sql>/data/createtable.sql grep -i 'INSERT INTO `oldguo`' /data/backup/mdp/full.sql >/data/data.sql b. 从binlog中单独截取单表的所有binlog,进行恢复。 binlog2sql 截取单表binlog,恢复。{/alert}物理备份工具使用-Percona Xtrabackup(PXB){alert type="info"}物理备份工具,支持全备和增量备份。备份逻辑:数据库运行期间,拷贝数据表空间.拷贝的同时,会将备份期间的redo进行备份恢复逻辑 :模拟了InnoDB Crash Recovery 功能,需要要将备份进行处理(前滚和回滚)后才能恢复{/alert}安装yum 源[root@cs ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y安装XtraBackup 2.4版本的[root@cs ~]# yum install -y percona-xtrabackup-24.x86_641.全量备份[root@cs backup]# innobackupex --user=root --password=123 /tmp/backup &>/tmp/xbk.log自主定制备份路径名[root@cs backup]# innobackupex --user=root --password=123 --no-timestamp /data/backup/full &>/tmp/xbk.log全备的恢复准备备份(Prepared)将redo进行重做,已提交的写到数据文件,未提交的使用undo回滚掉。模拟了CSR的过程[root@cs lib]# innobackupex --apply-log /tmp/backup/full/恢复备份前提:1、被恢复的目录是空 2、被恢复的数据库的实例是关闭 systemctl stop mysqld创建新目录[root@cs backup]# mkdir /var/lib/mysql数据拷贝[root@cs lib]# innobackupex --copy-back /tmp/backup/full/启动数据库systemctl start mysqldinnobackupex 增量备份(incremental)(1)增量备份的方式,是基于上一次备份进行增量。 (2)增量备份无法单独恢复。必须基于全备进行恢复。 (3)所有增量必须要按顺序合并到全备中。前期准备mysql> create database test charset utf8; Query OK, 1 row affected (0.01 sec) mysql> use test; Database changed mysql> create table t1 (id int); Query OK, 0 rows affected (0.03 sec) mysql> insert into t1 values(1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from t1; +------+ | id | +------+ | 1 | | 2 | | 3 | +------+ 3 rows in set (0.00 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec)增量备份命令# 全备 (周日) [root@cs tmp]# innobackupex --user=root --password=123 --no-timestamp /tmp/backup/full &> /tmp/xbk.log # 模拟数据变化 (周一) mysql> create database cs; Query OK, 1 row affected (0.00 sec) mysql> use cs; Database changed mysql> create table t1 (id int); Query OK, 0 rows affected (0.03 sec) mysql> insert into t1 values (1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> commit; Query OK, 0 rows affected (0.00 sec) #周一备份 [root@cs tmp]# innobackupex --user=root --password=123 --no-timestamp --incremental /tmp/backup/inc1 --incremental-basedir=/tmp/backup/full &>/tmp/inc1.log #模拟周二数据(cs) mysql> create table t2 (id int); Query OK, 0 rows affected (0.03 sec) mysql> insert into t2 values(1),(2),(3); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> commit; Query OK, 0 rows affected (0.00 sec) #周二备份 [root@cs backup]# innobackupex --user=root --password=123 --no-timestamp --incremental /tmp/backup/inc2 --incremental-basedir=/tmp/backup/inc1 &>/tmp/inc2.log # 模拟周三数据变化 mysql> create table t3 (id int); Query OK, 0 rows affected (0.02 sec) mysql> insert into t3 values(1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> drop database cs; Query OK, 3 rows affected (0.04 sec)恢复到周三误drop之前的数据状态恢复思路: 1. 挂出维护页,停止当天的自动备份脚本 2. 检查备份:周日full+周一inc1+周二inc2,周三的完整二进制日志 3. 进行备份整理(细节),截取关键的二进制日志(从备份——误删除之前) 4. 测试库进行备份恢复及日志恢复 5. 应用进行测试无误,开启业务 6. 此次工作的总结开始恢复(1) 全备的整理 [root@cs backup]# innobackupex --apply-log --redo-only /tmp/backup/full/ (2) 合并inc1到full中 [root@cs backup]# innobackupex --apply-log --redo-only --incremental-dir=/tmp/backup/inc1 /tmp/backup/full/ (3) 合并inc2到full中 [root@cs backup]# innobackupex --apply-log --incremental-dir=/tmp/backup/inc2 /tmp/backup/full/ (4) 最后一次整理全备 [root@cs backup]# innobackupex --apply-log /tmp/backup/full (5) 二进制截取 判断起点 [root@cs backup]# cat inc2/xtrabackup_binlog_info mysql-bin.000001 2463 判断终点 mysql> show binlog events in 'mysql-bin.000001'; +------------------+------+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+------+----------------+-----------+-------------+---------------------------------------+ | mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.34-log, Binlog ver: 4 | | mysql-bin.000001 | 123 | Previous_gtids | 1 | 154 | | | mysql-bin.000001 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 219 | Query | 1 | 326 | create database test charset utf8 | | mysql-bin.000001 | 326 | Anonymous_Gtid | 1 | 391 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 391 | Query | 1 | 489 | use `test`; create table t1 (id int) | | mysql-bin.000001 | 489 | Anonymous_Gtid | 1 | 554 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 554 | Query | 1 | 626 | BEGIN | | mysql-bin.000001 | 626 | Table_map | 1 | 671 | table_id: 122 (test.t1) | | mysql-bin.000001 | 671 | Write_rows | 1 | 721 | table_id: 122 flags: STMT_END_F | | mysql-bin.000001 | 721 | Xid | 1 | 752 | COMMIT /* xid=68 */ | | mysql-bin.000001 | 752 | Anonymous_Gtid | 1 | 817 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 817 | Query | 1 | 905 | create database cs | | mysql-bin.000001 | 905 | Anonymous_Gtid | 1 | 970 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 970 | Query | 1 | 1064 | use `cs`; create table t1 (id int) | | mysql-bin.000001 | 1064 | Anonymous_Gtid | 1 | 1129 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 1129 | Query | 1 | 1199 | BEGIN | | mysql-bin.000001 | 1199 | Table_map | 1 | 1242 | table_id: 123 (cs.t1) | | mysql-bin.000001 | 1242 | Write_rows | 1 | 1292 | table_id: 123 flags: STMT_END_F | | mysql-bin.000001 | 1292 | Xid | 1 | 1323 | COMMIT /* xid=81 */ | | mysql-bin.000001 | 1323 | Anonymous_Gtid | 1 | 1388 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 1388 | Query | 1 | 1474 | drop database cs | | mysql-bin.000001 | 1474 | Anonymous_Gtid | 1 | 1539 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 1539 | Query | 1 | 1627 | create database cs | | mysql-bin.000001 | 1627 | Anonymous_Gtid | 1 | 1692 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 1692 | Query | 1 | 1786 | use `cs`; create table t1 (id int) | | mysql-bin.000001 | 1786 | Anonymous_Gtid | 1 | 1851 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 1851 | Query | 1 | 1921 | BEGIN | | mysql-bin.000001 | 1921 | Table_map | 1 | 1964 | table_id: 423 (cs.t1) | | mysql-bin.000001 | 1964 | Write_rows | 1 | 2014 | table_id: 423 flags: STMT_END_F | | mysql-bin.000001 | 2014 | Xid | 1 | 2045 | COMMIT /* xid=113 */ | | mysql-bin.000001 | 2045 | Anonymous_Gtid | 1 | 2110 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 2110 | Query | 1 | 2204 | use `cs`; create table t2 (id int) | | mysql-bin.000001 | 2204 | Anonymous_Gtid | 1 | 2269 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 2269 | Query | 1 | 2339 | BEGIN | | mysql-bin.000001 | 2339 | Table_map | 1 | 2382 | table_id: 728 (cs.t2) | | mysql-bin.000001 | 2382 | Write_rows | 1 | 2432 | table_id: 728 flags: STMT_END_F | | mysql-bin.000001 | 2432 | Xid | 1 | 2463 | COMMIT /* xid=136 */ | | mysql-bin.000001 | 2463 | Anonymous_Gtid | 1 | 2528 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 2528 | Query | 1 | 2622 | use `cs`; create table t3 (id int) | | mysql-bin.000001 | 2622 | Anonymous_Gtid | 1 | 2687 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 2687 | Query | 1 | 2757 | BEGIN | | mysql-bin.000001 | 2757 | Table_map | 1 | 2800 | table_id: 1034 (cs.t3) | | mysql-bin.000001 | 2800 | Write_rows | 1 | 2850 | table_id: 1034 flags: STMT_END_F | | mysql-bin.000001 | 2850 | Xid | 1 | 2881 | COMMIT /* xid=159 */ | | mysql-bin.000001 | 2881 | Anonymous_Gtid | 1 | 2946 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000001 | 2946 | Query | 1 | 3032 | drop database cs | +-----------------+------+----------------+-----------+-------------+---------------------------------------+ 恢复3. 截取周二 23:00 到drop 之前的 binlog [root@cs backup]# mysqlbinlog --start-position=2463 --stop-position=2946 /var/lib/mysql/mysql-bin.000001 >/tmp/backup/bin.sql 4. 进行恢复 [root@cs lib]# innobackupex --copy-back /tmp/backup/full/ [root@cs lib]# chown -R mysql.mysql mysql [root@cs lib]# systemctl start mysqld 二进制恢复 mysql> set sql_log_bin=0; Query OK, 0 rows affected (0.00 sec) mysql> source /tmp/backup/bin.sql; Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Database changed Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Charset changed Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.03 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> show tables; +--------------+ | Tables_in_cs | +--------------+ | t1 | | t2 | | t3 | +--------------+ 3 rows in set (0.00 sec) mysql> set sql_log_bin=1;
2021年08月25日
522 阅读
1 评论
1 点赞
2021-08-21
MySQL二进制日志截取和恢复
作用数据恢复和主从配置开启二进制日志vim /etc/my.conf [mysqld] server-id=1 #(1~65535) log-bin=/var/lib/mysql/mysql-bin log_bin_index=/var/lib/mysql/mysql-bin.index binlog_format=row sync_binlog=1 //每次事务提交都立即刷写binlog到磁盘 mysql> show variables like '%log_bin%'; +---------------------------------+--------------------------------+ | Variable_name | Value | +---------------------------------+--------------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/mysql-bin | | log_bin_index | /var/lib/mysql/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+--------------------------------+ 6 rows in set (0.00 sec)PS:binlog_format=(row、statement、mixed)statement:SBR,语句模式记录日志,做什么命令,记录什么命令. 可读性较强,对于范围操作日志量少,但是可能会出现记录不准确的情况:insert into xx values (1,'sa',now()). row :RBR,行模式,数据行的变化。可读性较弱,对于范围操作日志大,不会出现记录错误.对高可用环境中的新特性要依赖于RBR(5.7版本默认) mixed :MBR,混合模式查看二进制日志位置:mysql> show variables like '%log_bin%'; # flush logs; 每执行一次就多一个日志 +---------------------------------+--------------------------------+ | Variable_name | Value | +---------------------------------+--------------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/mysql-bin | | log_bin_index | /var/lib/mysql/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+--------------------------------+ 6 rows in set (0.01 sec) mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 177 | | mysql-bin.000002 | 154 | +------------------+-----------+ 2 rows in set (0.00 sec) mysql> flush logs; Query OK, 0 rows affected (0.01 sec) mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 177 | | mysql-bin.000002 | 201 | | mysql-bin.000003 | 154 | +------------------+-----------+ 3 rows in set (0.00 sec)查看现存的二进制日志show binary logs;查看二进制日志事件show binlog events in 'mysql-bin.000003' limit 5; +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | mysql-bin.000003 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.34-log, Binlog ver: 4 | | mysql-bin.000003 | 123 | Previous_gtids | 1 | 154 | | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 2 rows in set (0.00 sec)在打印出来的信息中可以看到event事件的开始和结束号码,它可以方便我们从日志中截取想要的日志事件查看二进制日志内容[root@cs mysql]# mysqlbinlog mysql-bin.000003 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #210822 10:27:13 server id 1 end_log_pos 123 CRC32 0x98688dd8 Start: binlog v 4, server v 5.7.34-log created 210822 10:27:13 # Warning: this binlog is either in use or was not closed properly. BINLOG ' AbYhYQ8BAAAAdwAAAHsAAAABAAQANS43LjM0LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA AdiNaJg= '/*!*/; # at 123 #210822 10:27:13 server id 1 end_log_pos 154 CRC32 0x1ae7a1b6 Previous-GTIDs # [empty] SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;查看和分析binlogmysql> show binary logs; mysql> show master status ; mysql> show binlog events in 'binlog.000003'; [root@cs mysql]# mysqlbinlog mysql-bin.000003 [root@cs mysql]# mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000003模拟数据恢复mysql> flush logs; mysql> create database cs; mysql> use cs; Database changed mysql> create table t1 (id int); Query OK, 0 rows affected (0.05 sec) mysql> insert into t1 values(1); Query OK, 1 row affected (0.01 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values(2); Query OK, 1 row affected (0.01 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values(3); Query OK, 1 row affected (0.01 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> drop cs; 开始恢复 mysql> show master status; #当前的二进制文件 +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 1364 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql> show binlog events in 'mysql-bin.000004'; #查看二进制日志事件(重要的是创建数据库和删除数据库的Pos值) +------------------+------+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+------+----------------+-----------+-------------+---------------------------------------+ | mysql-bin.000004 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.34-log, Binlog ver: 4 | | mysql-bin.000004 | 123 | Previous_gtids | 1 | 154 | | | mysql-bin.000004 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 219 | Query | 1 | 307 | create database cs | | mysql-bin.000004 | 307 | Anonymous_Gtid | 1 | 372 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 372 | Query | 1 | 466 | use `cs`; create table t1 (id int) | | mysql-bin.000004 | 466 | Anonymous_Gtid | 1 | 531 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 531 | Query | 1 | 601 | BEGIN | | mysql-bin.000004 | 601 | Table_map | 1 | 644 | table_id: 115 (cs.t1) | | mysql-bin.000004 | 644 | Write_rows | 1 | 684 | table_id: 115 flags: STMT_END_F | | mysql-bin.000004 | 684 | Xid | 1 | 715 | COMMIT /* xid=349 */ | | mysql-bin.000004 | 715 | Anonymous_Gtid | 1 | 780 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 780 | Query | 1 | 850 | BEGIN | | mysql-bin.000004 | 850 | Table_map | 1 | 893 | table_id: 115 (cs.t1) | | mysql-bin.000004 | 893 | Write_rows | 1 | 933 | table_id: 115 flags: STMT_END_F | | mysql-bin.000004 | 933 | Xid | 1 | 964 | COMMIT /* xid=351 */ | | mysql-bin.000004 | 964 | Anonymous_Gtid | 1 | 1029 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 1029 | Query | 1 | 1099 | BEGIN | | mysql-bin.000004 | 1099 | Table_map | 1 | 1142 | table_id: 115 (cs.t1) | | mysql-bin.000004 | 1142 | Write_rows | 1 | 1182 | table_id: 115 flags: STMT_END_F | | mysql-bin.000004 | 1182 | Xid | 1 | 1213 | COMMIT /* xid=353 */ | | mysql-bin.000004 | 1213 | Anonymous_Gtid | 1 | 1278 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql-bin.000004 | 1278 | Query | 1 | 1364 | drop database cs | +------------------+------+----------------+-----------+-------------+---------------------------------------+ 23 rows in set (0.00 sec) [root@cs mysql]# mysqlbinlog --start-position=219 --stop-position=1278 /var/lib/mysql/mysql-bin.000004 >/tmp/bin.sql mysql> set sql_log_bin=0; #下面操作不会被记录到二进制文件(慎用) Query OK, 0 rows affected (0.00 sec) mysql> source /tmp/bin.sql; Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) Charset changed Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 1 row affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Database changed Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> set sql_log_bin=1; Query OK, 0 rows affected (0.00 sec) mysql> use cs; Database changed mysql> show tables; +--------------+ | Tables_in_cs | +--------------+ | t1 | +--------------+ 1 row in set (0.00 sec) mysql> select * from t1; +------+ | id | +------+ | 1 | | 2 | | 3 | +------+ 3 rows in set (0.00 sec)
2021年08月21日
354 阅读
0 评论
0 点赞
2021-08-20
MySQL开启慢查询日志
前言数据库日志记录了用户对数据库的各种操作及数据库发生的各种事件。能帮助数据库管理员追踪、分析问题。MySQL提供了错误日志、二进制日志、查询日志、慢查询日志。MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。默认情况下,MySQL不启动慢查询日志。本文简单介绍如何开启慢查询日志,如何用mysqldumpslow分析慢查询。参数说明:slow_query_log #慢查询开启状态,ON开启,OFF关闭 slow_query_log_file #慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) long_query_time #查询超过多少秒才记录 默认10s ,查询命令 SHOW VARIABLES LIKE 'long_query_time'; log_queries_not_using_indexes = 1 #表明记录没有使用索引的 SQL 语句重点说明:开启慢日志版本要高,低版本无法支持,本次版本是: 5.7.34SELECT VERSION(); #查询版本号 或者 show variables like '%version%'配置开启慢查询编辑MySQL配置文件my.cnf在【mysqld】字段下加入:long_query_time=1 #表示记录查询超过1s的sql slow_launch_time=1 #表示如果建立线程花费了比这个值更长的时间,slow_launch_threads 计数器将增加 slow_query_log=ON #开启慢查询日志 slow_query_log_file=/var/lib/mysql/slow_queries.log #慢查询日志记录文件{message type="warning" content="注意:慢查询的日志记录文件对于mysql用户必须可写!!"/}mysql> show variables like 'slow_query%'; +---------------------+---------------------------------+ | Variable_name | Value | +---------------------+---------------------------------+ | slow_query_log | ON | | slow_query_log_file | /var/lib/mysql/slow_queries.log | +---------------------+---------------------------------+ 2 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'long_query_time'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 1.000000 | +-----------------+----------+ 1 row in set (0.00 sec)测试mysql> select sleep(2); +----------+ | sleep(2) | +----------+ | 0 | +----------+ 1 row in set (2.02 sec)[root@cs ~]# cat /var/lib/mysql/slow_queries.log /usr/sbin/mysqld, Version: 5.7.34-log (MySQL Community Server (GPL)). started with: Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock Time Id Command Argument # Time: 2021-08-20T10:01:18.841053Z # User@Host: root[root] @ localhost [] Id: 3 # Query_time: 2.023306 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1629453678; select sleep(2);删除慢查询日志慢查询日志的删除方法与通用日志的删除方法是一样的。可以使用 mysqladmin 命令来删除。也可以使用手工方式来删除。mysqladmin 命令的语法如下:mysqladmin -uroot -p flush-logs执行该命令后,命令行会提示输入密码。输入正确密码后,将执行删除操作。新的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除。数据库管理员也可以手工删除慢查询日志,删除之后需要重新启动 MySQL 服务。{message type="warning" content="注意:通用查询日志和慢查询日志都是使用这个命令,使用时一定要注意,一旦执行这个命令,通用查询日志和慢查询日志都只存在新的日志文件中。如果需要备份旧的慢查询日志文件,必须先将旧的日志改名,然后重启 MySQL 服务或执行 mysqladmin 命令。"/}
2021年08月20日
419 阅读
3 评论
1 点赞
1
2
3