牛啊!!!
很好看啊,博主交换友链吗
# 图片回复
看看
F12美化代码呢
谢谢分享 一直在找
来看看
看看
看看
来看看
# 图片回复
# 图片回复
# 图片回复
首页
网站统计
订阅本站
关于本站
在线留言
友链申请
高清壁纸
论坛
开往
虫洞
推荐
Linux命令
资源网
Search
1
京东呆瓜搭建青龙面板+xdd-plus机器人+nvjdc配置
2,412 阅读
2
Joe 主题 6.xx 底部增强,显示标签及二维码分享
2,086 阅读
3
Typecho Cuteen主题美化
2,005 阅读
4
编辑器测试
1,344 阅读
5
好久不见之网站底部样式
1,302 阅读
Linux
Shell
Mysql
Typecho
网络
其他
Redis
登录
Search
标签搜索
Linux
Typecho
美化
Shell
综合架构
Nginx
Mysql
Joe
源码
Web
数据备份
命令
Ansible
定时任务
视频
网易云
网络
Rsync
Redis
NoSQL
小黑
累计撰写
142
篇文章
累计收到
734
条评论
博主
昨天 16:23
在线
首页
栏目
Linux
Shell
Mysql
Typecho
网络
其他
Redis
页面
网站统计
订阅本站
关于本站
在线留言
友链申请
高清壁纸
推荐
Linux命令
资源网
搜索到
31
篇与
Linux
的结果
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日
64 阅读
0 评论
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日
17 阅读
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日
16 阅读
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日
114 阅读
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日
144 阅读
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日
215 阅读
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日
241 阅读
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日
337 阅读
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日
142 阅读
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日
193 阅读
3 评论
1 点赞
2021-08-16
Nginx 的配置文件 nginx.conf
Nginx 的配置文件 nginx.conf#user nobody; #主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行 worker_processes 1; #指定Nginx要开启的进程数 error_log logs/error.log; #用来定义全局错设日志文件的路径和日志名称 #error_log logs/error.log notice; #error_log logs/error.log info; #日志输出级别有debug(最详细),info,notice,warn,error(默认),crit(严重的,最少) 可供选择 #pid logs/nginx.pid; #用来指定进程id的存储文件位置 events { #设定nginx的工作模式(默认epoll)及连接数上限 worker_connections 1024; } #以上这块配置代码是对nginx全局属性的配置 #下面部分是nginx对http服务器相关属性的设置 http { include mime.types; #文件扩展名与文件类型映射表 #default_type application/octet-stream; #默认文件类型,当文件类型未定义时候就使用这类设置的 default_type text/html; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #指定nginx日志的格式 access_log logs/access.log main; #设置日志存储路径/文件名 日志的格式 sendfile on; # 开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝 #tcp_nopush on; #开启tcp_nopush套接字(sendfile开启时有用) #keepalive_timeout 0; #客户端连接超时时间 keepalive_timeout 65; #gzip on; #设置是否开启gzip模块 #下面是server段虚拟主机的配置 server { listen 80; #虚拟主机的服务端口 #listen 80 default_server; #配置成默认端口 server_name localhost; # 用来指定ip或者域名,多个域名用空格分开 #charset koi8-r; access_log logs/host.access.log main; location / { root html; #虚拟主机的网页根目录 index index.html; #默认访问首页文件 } #include /etc/nginx/*.conf; #可以将server写在外面 #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
2021年08月16日
135 阅读
0 评论
1 点赞
2021-08-16
NGINX日志切割
前言Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。access.log 记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log 记录服务器错误的日志;设置access.log在nginx.conf文件里面配置access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; #设置访问日志 access_log off; #关闭访问日志path 指定日志的存放位置。format 指定日志的格式。默认使用预定义的combined。buffer 用来指定日志写入时的缓存大小。默认是64k。gzip 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。flush 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空。if 条件判断。如果指定的条件计算为0或空字符串,那么该请求不会写入日志。另外,还有一个特殊的值off。如果指定了该值,当前作用域下的所有的请求日志都被关闭。示例http { ... ##日志格式使用默认的combined;指定日志的缓存大小为32k;日志写入前启用gzip进行压缩,压缩比使用默认值1;缓存数据有效时间为1分钟。 access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m; ... }access_log指令的作用域分别有http,server,location。log_format自定义格式默认的日志格式log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';tail -f /var/log/nginx/access.log设置error_log错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。错误日志不支持自定义。error_log path [level];path参数指定日志的写入位置。level参数指定日志的级别。level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值(等级从低到高排列)。只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error。error_log logs/error.log; error_log logs/error_notice.log notice; error_log logs/error_info.log info; ##可以将不同的错误类型分开存储日志切割测试按分钟分割编写脚本vim logaccess.sh #!/bin/bash #设置日志文件保存目录 LOG_PATH=/var/log/nginx/ #备份文件名称 LOG_BAK="$(date -d "last_minute" + %Y%m%d%H%M)" #重命名日志文件 mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${LOG_BAK}.log # mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${LOG_BAK}.log #向nginx主进程发信号重新打开日志 kill -USR1 `cat /run/nginx.pid`chmod +x logaccess.sh设置定时任务crontab -e #每分钟进行日志切割 */1 * * * * sh /root/logaccess.sh > /dev/null 2>&1按日切割:vim log2.sh #!/bin/bash #设置日志文件保存目录 LOG_PATH=/var/log/nginx/ #备份文件名称 LOG_PATH_BAK="$(date -d "yesterday" +%Y%m%d)" #重命名日志文件 mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${LOG_BAK}.log # mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${LOG_BAK}.log #向nginx主进程发信号重新打开日志 kill -USR1 `cat /run/nginx.pid`设置定时任务crontab -e #每天23:59分开始执行 59 23 * * * sh /root/logaccess.sh > /dev/null 2>&1
2021年08月16日
186 阅读
0 评论
1 点赞
2021-08-13
Linux top命令详解 -- 罗小黑
top 命令是Linux下常用的性能分析工具,能够实时显示各个进程的占用状况 {mtitle title="详解"/}第一行:系统时间 21:53:29、运行时间:up 8 day、当前连接数:1 user 、 负载均衡(uptime): load average:0.052,0.32,0.35average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了第二行:Tasks — 任务(进程)总进程:115 total、运行;1 running、休眠:111 sleep 、停止: 0 stopped 、僵尸进程:1 zombie第三行:CPU状态1.7%us【user space】 ——用户空间占用CPU的百分比 0.7%sy【sysctl】 ——内核空间占用CPU的百分比 0.0%ni【】 ——改变优先级的进程占用CPU百分比 97.6%id【idolt】 ——空间CPU百分比 0.0%hi【Hardware IRQ】 ——硬中断占用CPU百分比 0.0%si【Software interrupts】 ——软中断占用CPU百分比第四行:内存状态1014684 total, 94888 free, 481152 used, 438644 buff/cache 【缓存的内存量】第五行:swap交换分区信息1049596 total, 889852 free, 159744 used,93376 buff/cache【缓冲的交换分区量】{message type="info" content="备注:PS:可用内存=free + buffer + cached对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。"/}第七行:各进程(任务)的状态监控ID — 进程idUSER — 进程所有者PR — 进程优先级NI — nice值。负值表示高优先级,正值表示低优先级VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESRES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATASHR — 共享内存大小,单位kbS —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程%CPU — 上次更新到现在的CPU时间占用百分比%MEM — 进程使用的物理内存百分比TIME+ — 进程使用的CPU时间总计,单位1/100秒COMMAND — 进程名称(命令名/命令行)详解VIRT:virtual memory usage 虚拟内存1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:resident memory usage 常驻内存1、进程当前使用的内存大小,但不包括swap out2、包含其他进程的共享3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反4、关于库占用内存的情况,它只统计加载的库文件所占内存大小SHR:shared memory 共享内存1、除了自身进程的共享内存,也包括其他进程的共享内存2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小3、计算某个进程所占的物理内存大小公式:RES – SHR4、swap out后,它将会降下来DATA1、数据占用的内存。如果top没有显示,按f键可以显示出来。2、真正的该程序要求的数据空间,是真正在运行中要使用的。top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下:s – 改变画面更新频率l – 关闭或开启第一部分第一行 top 信息的表示t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示N – 以 PID 的大小的顺序排列表示进程列表P – 以 CPU 占用率大小的顺序排列进程列表M – 以内存占用率大小的顺序排列进程列表h – 显示帮助n – 设置在进程列表所显示进程的数量q – 退出 tops – 改变画面更新周期{mtitle title="top使用方法"/}使用格式:top [-] [d] [p] [q] [c] [C] [S] [s] [n]参数说明:d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。p:通过指定监控进程ID来仅仅监控某个进程的状态。q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级行。S:指定累计模式。s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。i:使top不显示任何闲置或者僵死进程。c:显示整个命令行而不只是显示命令名。常用命令说明Ctrl+L:擦除并且重写屏幕K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。i:忽略闲置和僵死进程。这是一个开关式命令。q:退出程序r:重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。S:切换到累计模式。s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。f或者F:从当前显示中添加或者删除项目。o或者O:改变显示项目的顺序l:切换显示平均负载和启动时间信息。m:切换显示内存信息。t:切换显示进程和CPU状态信息。c:切换显示命令名称和完整命令行。M:根据驻留内存大小进行排序。P:根据CPU使用百分比大小进行排序。T:根据时间/累计时间进行排序。W:将当前设置写入~/.toprc文件中。查看多核CPU命令mpstat -P ALL 和 sar -P ALL ps:yum install sysstat说明 sar -P ALL >111.txt 重定向内容到111.txtmpstat -P ALLsar -P ALLLinux查看物理CPU个数、核数、逻辑CPU个数# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l #查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c #查看内 存信息 cat /proc/meminfo
2021年08月13日
329 阅读
0 评论
2 点赞
2021-07-19
编译安装MySQL5.7
1.MySQL源码包获取在MySQL官网下载你需要的二进制包版本。官网下载链接:https://downloads.mysql.com/archives/community/本文是以mysql-5.7.28版本为例,所以也可以直接下载我这个版本。链接:https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.28.tar.gz2.编译安装MySQL2.1 下载源码包wget https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.28.tar.gz2.2 安装依赖yum -y install gcc gcc-c++ cmake openssl openssl-devel ncurses-devel autoconf2.3 解压源码包tar xf mysql-boost-5.7.28.tar.gz2.4 创建程序目录mkdir -p /application2.5 预编译和编译安装预编译,生成Makefile文件cd mysql-5.7.28 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.28 \ -DMYSQL_DATADIR=/application/mysql-5.7.28/data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.7.28/tmp/mysql.sock \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=./boost/boost_1_59_0/ \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITH_ZLIB=bundled \ -DWITH_SSL=system \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0 编译安装make && make install2.6 创建软连接(也可以直接复制过去)ln -s /application/mysql-5.7.28/ /application/mysql2.7 创建数据库管理用户useradd -M -s /sbin/nologin mysql2.8 授权数据库目录chown -R mysql.mysql /application/mysql-5.7.28/ chown -R mysql.mysql /application/mysql/2.9 拷贝配置文件和启动脚本cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld2.10 编写配置文件[root@db05 ~]# vim /etc/my.cnf [mysqld] datadir=/application/mysql/data socket=/application/mysql/tmp/mysql.sock [client] socket=/application/mysql/tmp/mysql.sock2.11 创建相关目录,并授权mkdir /application/mysql/{tmp,log} chown -R mysql:mysql /application/mysql2.12 初始化数据库初始化/application/mysql/bin/mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data获取密码初始化成功后,在命令行输出的最后一行会显示密码3.启动数据库3.1 使用启动脚本启动mysql启动/etc/init.d/mysqld start关闭/etc/init.d/mysqld stop3.2 使用systemd管理mysql服务新建一个mysql服务的unit文件[root@db02 ~]# vim /usr/lib/systemd/system/mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000重载系统的unit文件systemctl daemon-reload启动服务systemctl start mysqld3.3 检查mysql服务是否启动查看mysql的进程[root@db02 ~]# ps -ef | grep [m]ysql mysql 42951 1 0 14:48 ? 00:00:00 /application/mysql/bin/mysqld --defaults-file=/etc/my.cnf查看端口[root@db02 ~]# netstat -lntp | grep 3306 tcp6 0 0 :::3306 :::* LISTEN 42951/mysqld 3.4 登录数据库使用绝对路径登录[root@db02 ~]# /application/msyql/bin/msyql配置环境变量,直接使用mysql命令因为系统中/usr/bin/或者/usr/sbin/目录下默认是mysql的命令的,修改下PATH变量,让其可以直接使用mysql命令添加环境变量脚本echo "export PATH=/application/mysql/bin:\$PATH" > /etc/profile.d/mysql.sh #重新加载环境变量 source /etc/profile登录mysql[root@db02 ~]# mysql -uroot -p
2021年07月19日
263 阅读
1 评论
0 点赞
2021-07-15
[Linux]利用Linux上传Github
前言我们在上传Github中会遇到,手上没电脑,或者没有电脑,但是手上却有一台服务器,Linux操作系统,那么我们就可以利用Linux上传Githun教程先登录到Github先等你的用户名和邮箱git config --global user.name "你GitHub的用户名"git config --global user.email "你GitHub的邮箱"本地生成密钥ssh-keygen -t rsa -C "注册Github用的邮箱"生成完成后,输入一下会获得一窜秘钥cd ~/.ssh cat id_rsa.pu复制然后GitHub中加入进去先在GitHub个人中心中选择,在选择SSH and GPG keys然后选择New SSH key,然然后添加刚刚生成的秘钥添加进去然后会让你输入一下登录密码,即可输入以下命令检查是否配置成功ssh -T git@github.com只要显示GitHub名称就可以这样基本就配置完成了配置仓库先cd到一个目录,随意目录,都行然后使用以下命令初始化本地仓库git init然后使用以下命令打包文件!git add .在使用以下命令提交说明git commit -m "提交文件"上传文件先去复制仓库地址关联仓库git remote add origin 你的仓库地址关联成功之后就可以愉快的上传了git push -u origin master如果这个地方报错了这个问题是因为远程库与本地库不一致造成的,那么我们把远程库同步到本地库就可以了git pull --rebase origin master就可以了我这边没有报错所以无法测试但是可以使用好了我们可以去看仓库是否长传成功结束本教程百分百原创如果有纰漏请评论谢谢手机写的所以可能有点糙{callout color="#ef6d4d"}转载来源: {abtn color="#ff0d00" href="https://www.pigax.cn/archives/linux-li-yong-linux-shang-chuan-github" content="花语阁"/}{/callout}
2021年07月15日
311 阅读
1 评论
0 点赞
1
2
3