0%

数据库的备份是运维中非常重要的一环,定期备份数据库可以有效的防止数据丢失。特别是线上数据的备份尤为重要,养成定期备份数据库信息能有效的减少不必要的损失和麻烦。

备份脚本准备

首先先准备一个备份脚本mysql_autobackup.sh,将以我这里的目录为例,脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

# 1、原生mysql方式
/usr/local/mysql/bin/mysqldump -uroot -p123456 --databases database_name > /data/dbbank/back_`date +%F`.sql

# 2、docker的方式

/usr/bin/docker exec -i mysql /bin/bash -c 'mysqldump -uroot -p123456 --databases database_name' > /data/dbbank/back_`date +%F`.sql

# -uroot 数据库用户名
# -p123456 数据库的密码
# database_name 要备份的数据库名
# /data/dbbank/back_`date +%F`.sql 要保存的备份地址,并以日期命名

阅读全文 »

本文主要记录php对接微信支付v3版本的整个过程,包含支付、退款、回调等功能,会从申请证书开始记录

一、证书申请 V3

1、入口介绍

在微信商户平台中,[账户中心]->[API安全]中可以看到这样的界面

证书的申请在商户API证书下面的管理证书

阅读全文 »

一、安装zsh

安装 oh-my-zsh 需要首先安装 zsh

使用以下命令安装zsh,若其他linux系统可以使用yum来安装,不再赘述

1
2
3
4
5
sudo apt install zsh

#或者

sudo yum install zsh

二、安装oh-my-zsh

oh-my-zsh官网: https://ohmyz.sh/#install

执行命令如下命令直接进行安装

1
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

执行之后终端界面已经发生了变化

阅读全文 »

1、下载redis 并解压到当前目录

1
2
wget http://pecl.php.net/get/redis-3.1.2.tgz
tar -zxvf redis-3.1.2.tgz

2、进入解压的redis目录

1
cd redis-3.1.2

3、用phpize生成configure配置文件(你自己的phpize在哪里可以查找一下!)

1
2
3
whereis phpize   # 先找phpize在哪  

/usr/local/php/bin/phpize # 执行

4、配置

1
./configure --with-php-config=/usr/local/php/bin/php-config    # php-config为php/bin下的执行文件
阅读全文 »

模块说明

特别注意:php7.3开始要求系统libzip的version >= 0.11,但是目前通过 yum -y install libzip-devel 安装的是0.10的版本,官方版本从1.4.0开始要依赖cmake安装,对cmake的版本还有要求

报错如图:

下面介绍三种安装方式:

1、yum安装(不推荐,官方安装都是0.1版本的)

1
2
3
4
5
6
7
8
# 卸载原有低版本的libzip包
sudo yum -y remove libzip libzip-devel
# 重新安装看看版本是否符合要求
sudo yum -y install libzip libzip-devel
# 否则添加wlnmp源
sudo rpm -ivh https://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
# 安装libzip包,当前wlnmp提供的libzip包版本1.8.0
sudo yum install wlibzip
阅读全文 »

一、安装Docker

安装依赖包,执行命令

1
yum install -y yum-utils device-mapper-persistent-data lvm2

此时若直接执行安装docker命令就会发现是十分慢的,这个等待过程是漫长的。
配置国内的源就可以解决问题yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo这里使用的是阿里云的源。

接着再执行命令

1
yum install docker-ce docker-ce-cli containerd.io    //安装docker即可。

配置docker开机自启

1
systemctl enable docker

执行命令启动docker

1
systemctl start docker

查看docker版本

1
docker -v
阅读全文 »

想使用ShowDoc作为内部一个知识共享仓库,以及文件在线协作的功能。于是内部使用Docker部署,简单方便,主要映射数据存储的文件夹。

下面介绍ShowDoc在服务器上通过Docker的方式部署步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 先搜索对应的可以使用的镜像版本和仓库
docker search showdoc
# 确认打星最多的那个使用 star7th/showdoc
docker pull star7th/showdoc
# 创建文件夹,方便存储在服务器中,避免重要文件重启容器后丢失
mkdir -p /showdoc_data/html
chmod -R 777 /showdoc_data
docker run -d --name showdoc --user=root --privileged=true -p 4999:80 -v /showdoc_data/html:/var/www/html/ star7th/showdoc

# 异常网络状态下,可以直接在docker run的时候指定镜像仓库
docker pull registry.cn-shenzhen.aliyuncs.com/star7th/showdoc
# 安装后记得执行docker tag命令以进行重命名
docker tag registry.cn-shenzhen.aliyuncs.com/star7th/showdoc:latest star7th/showdoc:latest
# 后续继续进行创建文件夹赋权和指定映射的文件夹

最后访问服务器的IP地址,端口4999即可。

提醒:

  1. 服务器上需要安装Docker,如果没有安装,请查看详细文档 https://zhuanlan.zhihu.com/p/699515988
  2. 如果是阿里云服务器,需要进行安全组的端口映射,将4999端口开放。

在PHP中,可以使用usort函数对数组进行排序,并且可以指定一个回调函数来定义排序的逻辑。如果要按照数组元素的某个字段进行排序,可以使用匿名函数(闭包)来实现。

同时也支持多个字段进行升/降序排列。

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
43
44
45
46
47
48
49
50
<?php
$arr = [
['name' => '张三', 'age' => 25, 'k_sort' => 3, 'recommend' => 2],
['name' => '李四', 'age' => 23, 'k_sort' => 3, 'recommend' => 1],
['name' => '王五', 'age' => 30, 'k_sort' => 5, 'recommend' => 2],
];

// 排序操作:含有活动优惠的商品靠前排序
usort($arr, function ($a, $b) {
$result = $b['k_sort'] - $a['k_sort']; // 优先活动(降序)
if ($result == 0) {
$result = $a['recommend'] <=> $b['recommend']; // 其次置顶(升序)
if ($result == 0) {
$result = $b['age'] - $a['age']; // 再次排序(降序)
}
}
return $result;
});

print_r($arr);


运行结果:
Array
(
[0] => Array
(
[name] => 王五
[age] => 30
[k_sort] => 5
[recommend] => 2
)

[1] => Array
(
[name] => 李四
[age] => 23
[k_sort] => 3
[recommend] => 1
)

[2] => Array
(
[name] => 张三
[age] => 25
[k_sort] => 3
[recommend] => 2
)

)

m3u8为视频流文件,里面包含多个ts文件,ts为视频流切片,很多播放器是无法直接播放m3u8文件的,这里提供两种方式进行在线m3u8视频播放(预览)

1、hls.js

前端页面引入js:

1
<script type="text/javascript" src="./js/HLC_paly/hls.js"></script>

播放代码:

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
<video id="HLS_Player" autoplay="autoplay" loop muted controls="controls" width="100%" height="100%"></video>

<script type="text/javascript" >
HLS_Player = document.getElementById('HLS_Player');
if (Hls.isSupported()) {
HLS_Controller = new Hls();
HLS_Controller.loadSource("视屏流地址");
HLS_Controller.attachMedia(HLS_Player);
HLS_Controller.on(Hls.Events.MANIFEST_PARSED, function() {
HLS_Player.play();
});

}
// hls.js is not supported on platforms that do not have Media Source Extensions (MSE) enabled.
// When the browser has built-in HLS support (check using `canPlayType`), we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video element through the `src` property.
// This is using the built-in support of the plain video element, without using hls.js.
// Note: it would be more normal to wait on the 'canplay' event below however on Safari (where you are most likely to find built-in HLS support) the video.src URL must be on the user-driven
// white-list before a 'canplay' event will be emitted; the last video event that can be reliably listened-for when the URL is not on the white-list is 'loadedmetadata'.
else if (HLS_Player.canPlayType('application/vnd.apple.mpegurl')) {
HLS_Player.src = 'http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8';
HLS_Player.addEventListener('loadedmetadata', function() {
HLS_Player.play();
});
}
</script>
阅读全文 »

最近给我亲戚实现一个在windows下根据人脸识别找到所有类似照片的需求,通过python学了下,特别在windows下的环境搭建方面遇到了很多的坑,环境搭建可以查看前两篇博客有讲述安装中的坑,这里分享下通过python实现这个功能的代码

代码的实现并不是很难,其中主要用到的类库就是Face_Recognition,这个类库在mac、linux上可以完美适配,特别在windows上出现的问题很多,特别是Face_Recognition需要用到的dlib在windows上无法安装,以下的这个通过一张照片全局查找类似照片的代码,谢谢指正。

阅读全文 »