数据库突然无法链接,无法访问

在公司运行的项目里,数据库突然无法链接,无法访问。利用工具链接数据库一样访问失效。
不排除:黑客串改了链接信息 或 直接删库 【当然这个是最严重结局】
这是我用finalshell 链接到项目的服务器查看。
首先服务器内部看看mysql是否在运行

1
mysql -u[username] -p

发现指令执行失败,mysql未被启动。
当下可以初步确定mysql进程中断了,需要重启。

1
/etc/ini.d mysql restart

报错:
ERROR! MySQL server PID file could not be found!

mysql 无法启动,那就要看看其他因素导致mysql启动不了,如系统内存不够导致无法启动程序。

1
2
3
#这将显示以MB为单位的内存使用情况,包括已用内存、可用内存、缓冲区和交换空间。
#在终端中输入以下命令可以查看服务器的内存使用情况:
free -m

发现交换空间为0,好家伙虚拟内存被冲爆了,那就是内存不够了。

连忙查看进程,因为该系统都是php在运行,所以先看看php进程

1
ps -aux|grep php

发现一列列的php进程。
基本确定就是php进程堆积导致mysql无法启动

1
2
3
4
5
# 杀死所有PHP进程
killall php-fpm

#重启php进程
/etc/init.d/php-fpm restart

重启后再次查看交换空间 发现直接归零了,再次重启mysql

1
/etc/init.d/mysql restart

启动成功,访问项目运行再次正常了。

后面就是优化该项目系统,系统项目执行进程很多时间过长导致僵尸进程一直保留,优化代码很有必要。(该项目特老旧,还是一个小白写的代码后面懒猫改差点没魂升天)

新项目上线出现的小问题

有个新项目,是一个小伙伴负责,当前也要提交线上了。(给他练练手一个新的服务器,本地运行都ok,部署到线上发现很多问题)以下是我帮忙查看最后解决问题,新手小白很容易出错的

  1. 因为两套域名访问,导致提交忘记修复 【以后的处理是,该类配置文件不放到提交代码内,直接提交服务器】

  2. m端域名解析,nginx要处理好伪静态,否则是无法访问的

  3. 控制器的访问本地没有大小写问题,但到了线上就有【下次一定要注意】

  4. 如果访问不是404,而是php 内错误页面,要打开php错误访问 【快速清晰的判断,并合理利用工具】

VUE编译访问域名后带#

vue 如何编译 不带域名后面#

在Vue中,可以使用vue-router来处理路由。默认情况下,当我们点击链接时,URL会被添加到历史记录并且页面将重新加载。
要想去除URL中的域名部分(包括#),需要进行配置。首先,确保已经安装了vue-router库。然后,按照以下步骤操作:
创建一个新文件 router/index.js,该文件将存放路由相关的配置信息。

最重要的就是要更改路由模式,由hash(哈希)变为history(历史模式)

导入所需模块:

1
2
import Vue from 'vue'
import Router from 'vue-router'

注册路由器:

1
Vue.use(Router)

定义路由表:

1
2
3
const routes = [
{ path: '/', component: Home }, // 这里的Home为组件名称或者对应的组件引用
]

创建路由实例:

1
2
3
4
5
export default new Router({
mode: 'history', // 设置路由模式为 history
base: process.env.BASE_URL, // 基本 URL,根据项目需求修改
routes
})

nginx配置修改

在指定的访问域名下配置.conf里加入

1
2
3
location / {  
try_files $uri $uri/ /index.html;
}

移动端如何浏览EXCEL、word、ppt、pdf等文件在线预览?

简单的前端处理方式 (不建议)

或者JS
window.open(文档地址); //新建窗口打开链接预览
window.location.href = 文档地址; //本页面内跳转链接实现预览

这种方式在不同浏览器上表现不一样,部份手机浏览器直接不能直接不能打开或是表现为下载,基本不实用,如果预览PDF,可以使pdf.js这样的纯JS库但是实际场景用时要做各种格式判断浏览判断麻烦死了。

如果是微信小程序,可以使用微信接口:downloadFile和openDocument

1
2
3
4
5
6
7
8
9
10
11
12
13
wx.downloadFile({
// 示例 url,实际不存在
url: 'http://test.com/testfile.pdf',
success: function (res) {
const filePath = res.tempFilePath
wx.openDocument({
filePath: filePath,
success: function (res) {
console.log('打开文档成功')
}
})
}
})

如果明确只有微信使用可以考虑,只是如果有浏览直接使用或钉钉之类不行,而且如果后面更换到浏览器或WEBAPP又要更换也挺麻烦的。

pfile的文件预览工具 (举荐)

1
window.open('http://www.pfile.com.cn/api/profile/onlinePreview?url='+encodeURIComponent(“文档地址”));

其实本质是用 http://www.pfile.com.cn网址,他做的工具,打开使用页面十分干净清晰。
唯一要说的缺点,那只能是打开的不是我们自己的域名,没发二次开发。

UniApp集成PDF在线预览功能

  1. 导入PDF.js库:首先,在UniApp项目中引入PDF.js库,这是一个开源的JavaScript库,用于在网页中渲染和预览PDF文件。
  2. 实现PDF预览组件:在UniApp项目中创建一个PDF预览组件,该组件包含了PDF.js库所需的相关代码和样式,用于展示PDF文件内容。
  3. 调用PDF预览组件:在需要预览PDF文件的页面中,通过调用PDF预览组件,并传入PDF文件的URL或二进制数据,即可在应用内实现PDF文件的在线预览功能。

麒麟arm版服务器遇到相关问题

安装 docker

下载docker离线包

(下载地址)[https://download.docker.com/linux/static/stable/]
选择系统架构对应的文件目录:aarch64,我目前使用的docker版本是:docker-20.10.21.tgz

下载 docker-compose离线包

查看docker-compose 版本 : docker-compose --version

(Github下载地址)[https://github.com/docker/compose/releases]
选择对应系统架构的离线安装包,我目前使用的版本是:v2.17.2

docker.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 进入安装文件存放目录
$ cd /home/main

# 解压 docker 到当前目录
$ tar -xvf docker-20.10.21.tgz

# 将 docker 文件移动到 /usr/bin 目录下
$ cp -p docker/* /usr/bin

# 将 docker-compose 文件复制到 /usr/local/bin/ 目录下,并重命名为 docker-compose
$ cp docker-compose-linux-aarch64 /usr/local/bin/docker-compose

# 设置 docker-compose 文件权限
$ chmod +x /usr/local/bin/docker-compose

# 将 docker.service 移到 /etc/systemd/system/ 目录
$ cp docker.service /etc/systemd/system/

# 设置 docker.service 文件权限
$ chmod +x /etc/systemd/system/docker.service

# 重新加载配置文件
$ systemctl daemon-reload

# 启动docker
$ systemctl start docker

# 设置 docker 开机自启
$ systemctl enable docker.service

问题

本来docker好好的能启动,然后服务器重启以后就启动不了docker了。cpu架构是aarch64

1
2
3
4
5
6
7
Error response from daemon: failed to create task for container: 
failed to create shim task: OCI runtime create failed:
container_linux.go:328: starting container process caused "permission denied": unknown


## 解决办法
yum remove -y podman

麒麟 docker启动容器提示“Warning:IPv4 forwarding is disabled.Networking will not work.”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#查看更改前的配置
sysctl net.ipv4.ip_forward
# net.ipv4.ip_forward = 0


#经查询需要修改如下文件
/etc/sysctl.conf

#添加
net.ipv4.ip_forward = 1
#然后重启network服务和docker服务即可
systemctl restart network
systemctl restart docker

#查看更改后的配置
sysctl net.ipv4.ip_forward

Job for docker.service failed because the control process exited with error code

  1. 问题描述
    启动docker服务: systemctl restart docker

提示:Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details.

  1. 问题解决
  • 进入docker目录:cd /etc/docker/

  • 修改daemon的类型:mv daemon.json daemon.conf

  • 重启docker:systemctl restart docker

安装apt

wget http://ports.ubuntu.com/pool/main/a/apt/apt_1.6.1_arm64.deb # 下载deb文件
sudo dpkg -i apt_1.6.1_arm64.deb # 安装apt
[但你会发现 没有dpkg命令很无语,然后呢 还是选用了yum来处理]

yum使用

初始的yum是没有用的,要更换源,所以找到合适的源很重要。

换源操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#进入配置文件夹
cd /etc/yum.repos.d/

#进入到 任意vim *.repo文件内进行修改源
vim docker-ce.repo

#添加源.
[aliyun]
name=aliyun
baseurl=https://opsx.alibaba.com/mirror
gpgcheck=0
enabled=1

[tencent]
name=tencent
baseurl=https://mirrors.cloud.tencent.com/
gpgcheck=0
enabled=1

#yum仓库的标准格式:
#1)[仓库标识名称],名称任意,在一个文件中可以拥有多个标识
#2)name=仓库名称
#3)baseurl=仓库的路径,支持多种格式,file://本地路径,ftp://,http:// 或 https://
#4)gpgcheck=gpg密钥,值可以是0(代表不检测),1(代表检测,如果是1,下方还要定义一个gpgkey=密钥连接)
#5)enabled=是否启动当前仓库,值可以0,也可以是1(默认为1,代表启动仓库)

#知名平台的YUM源
#阿里源:https://opsx.alibaba.com/mirror
#腾讯源:https://mirrors.cloud.tencent.com/
#网易源:http://mirrors.163.com/
#清华源:https://mirrors.tuna.tsinghua.edu.cn/

# 清除所有缓存
yum clean all
# 重新给本地仓库建立缓存
yum makecache
# 列出所有仓库信息
yum repolist all

#测试本地YUM仓库是否可用
yum install httpd -y

遇到数据查询,已有的数据查询查出来为空,然后插入数据,死循环

例: account 账户有3w多个,重复账户同一个有700-800多
当前每次远端拉取数据,然后去mysql中查询是否有存在account账户,存在不插入数据,不存在插入数据。
【注:数据库量一次性获取3w多条。】
问题: 数据库表存在重复账户,且能查到,但查询判断就是为空,导致数据无线插入。
alt text
解决办法:

  1. 更改account属性,变为唯一值。 【最后放弃,有软删除】
  2. 发现account账户存储长度 为char(22) , 发现重复账户都是过长,且为开启mysql的严格模式,导致被截断存储,所以查询是就是找不到。 所以更改存储长度varchar(50)
1
2
#停止防火墙
systemctl stop firewalld
avatar
懒觉猫先生
欢迎你们的到来!
关注我吧
最新文章
最新评论
正在加载中...
网站资讯
文章数目 :
178
已运行时间 :
本站总字数 :
123.5k
本站访客数 :
本站总访问量 :
最后更新时间 :