Percona XtraBackup 使用

percona-xtrabackup 介绍

percona-xtrabackup 软件包中中包含了两个工具,一个是xtrabackup,另一个是 innobackupex,innobackupex 由 perl 进行封装,在对 innodb 表进行备份时会自动调用 xtrabackup 工具,所以对 InnoDB 表做备份的实际是xtrabackup这个工具,xtrabackup 也只能对innodb表做备份,这是一个专门对 innodb 开发的热备工具,而对myisam 这样的其他引擎的表则由 innobackupex 来负责备份,若是全备份加增量的方案,那每次增量 innobackupex 工具对非innodb表都是全备份且会请求读锁。

xtrabackup 对 innodb 表进行备份时不再只是简单复制文件,而是利用在innodb存储引擎层中的LSN(日志序列号)的新旧来识别这一数据页是否需要备份。

xtraback 工具对 innodb 引擎完美支持真正的热备份,备份好的数据中数据文件与事务日志的文件因innodb cache等因素的存在,所以备份好的数据和事务日志中的数据往往是不一致的,所以,在做数据恢复时需要把事务日志中已提交的事务做redo,没有提交的事务做 undo 操作,这就是在做数据恢复时要做的准备工作,即 prepare。

安装

下载安装程序 https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/ , 这里需要的是 mysql 5.7 所以下载 xtraBackup 2.4 版本

1
$ yum localinstall percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

卸载可以使用

1
$ yum remove percona-xtrabackup

用法

备份选项

  • xtrabackup –backup
  • –user: 备份账号
  • –password : 备份账号密码
  • –host : 备份数据库的地址
  • –databases : 要备份的数据库, 多个数据库中间已空格分割, 如 “db1 db2”。 也可以指定某个表, 如: ‘db1.table1’.(该选项对innodb引擎表无效)
  • –default-file : 指定从哪个文件读取mysql配置, 必须放在命令的第一个选项位置.
  • –incremental : 创建一个增量备份, 需指定 –incremental-basedir
  • –incremental-basedir : 上一次全备份或增量备份的目录,
  • –incremental-dir : 还原时增量备份的目录
  • –include=name : 指定表名
  • –compress : 压缩备份

开始操作

备份

1. 完全备份

1
2
xtrabackup --user=root --password=root --backup --databases="play" \
--target-dir=/var/www/datas/full

image.png

2. 修改数据

3. 进行第一次增量备份

1
2
xtrabackup --user=root --password=root --backup --target-dir=/var/www/datas/inc1/ \
--incremental-base-dir=/var/www/datas/full/ --databases="play"

image.png

image.png

4. 再次修改数据

5. 第二次增量备份

1
2
xtrabackup --user=root --password=root --backup --target-dir=/var/www/datas/inc2/ \
--incremental-base-dir=/var/www/datas/inc1/ --databases="play"

image.png

image.png

恢复

部分备份恢复

  1. 暂停mysql 服务
1
systemctl stop mysqld
  1. 复制备份数据到数据库目录下
1
cp -rf play/ /var/lib/mysql
  1. 修改数据库文件权限
1
chown -R mysql.mysql /var/lib/mysql
  1. 启动mysql服务
1
systemctl start mysqld

压缩备份

为了进行压缩备份,需要使用 选项:xtrabackup --compress

如要加快压缩速度,则可以使用并行压缩,可以使用选项启用它。以下示例将使用四个线程进行压缩:xtrabackup --compress-threads

1
2
3
xtrabackup --backup --compress --compress-threads = 4  --user=root --password=root \
--databases="play" \
--target-dir=/var/www/datas/compress

image.png

image.png

备份脚本

配置文件

1
2
3
4
5
user=root
password=root
databases=play
host=127.0.0.1
base_dir=/var/www/datas

运行脚本

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/bash

config_file=`pwd`/config.conf
source $config_file

xtrabackup="xtrabackup --user=$user --password=$password --backup --databases=\"$databases\""

# 创建备份目录
full_path="$base_dir/full"
inc_path="$base_dir/inc"

if [ ! -d $full_path ]; then
mkdir -p $full_path
fi

if [ ! -d $inc_path ]; then
mkdir -p $inc_path
fi

# 备份文件夹名
folder=`date +%Y-%m-%d-%H-%M-%S`
# 目标文件夹
inc_target=$inc_path/$folder

# 错误信息
error() {
echo -e "\e[1;31m$1\e[0m" 1>&2
exit 1
}

# 获取目录最近修改信息
lastModify() {
if [ -d $1 ]; then
path=`ls -t $1 | head -n 1`
if [ $path ]; then
echo $path
else
error "$1 没有最新修改的信息"
fi
else
error "$1 目录不存在"
fi
}

# 执行全量备份
doFull() {
$xtrabackup \
--target-dir=$full_path
}

# 执行增量备份
doInc() {
# 是否是第一次增量备份
if [ "$(ls -A $inc_path)" ]; then
# 不是第一次备份, 以最近的一次作为基准
last_path=$(lastModify $inc_path);

# 创建目录
if [ ! -d $inc_target ]; then
mkdir -p $inc_target
fi

$xtrabackup \
--incremental-base-dir=$inc_path/$last_path \
--target-dir=$inc_target
else
# 第一增量备份, 先进行全量备份
doFull
if [ ! -d $inc_target ]; then
mkdir -p $inc_target
fi

$xtrabackup \
--incremental-base-dir=$full_path \
--target-dir=$inc_target
fi
}

case $1 in
full)
doFull
;;
inc)
doInc
;;
*)
echo "full:全量备份"
echo "inc:增量备份"
;;
esac

原文地址 : Percona XtraBackup 使用
本站是作者语雀文档的镜像站, 如对文章有任何疑问请移步语雀进行 提问

微信公众号相关信息

微信公众号通过 js 获取配置

微信 JSSDK 官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

需要添加公众号白名单

1
2
3
4
{
"errcode": 40164,
"errmsg": "invalid ip 118.190.42.90 ipv6 ::ffff:118.190.42.90, not in whitelist rid: 60196b9b-4c5ba79c-066b49c8"
}

添加白名的位置 : 开发 -> 基本配置 -> 公众号开发信息 -> IP白名单 

PHP 代码吊起

1
2
3
4
5
6
7
$appId     = sys_setting('cash.wx_service_app_id');
$appSecret = sys_setting('cash.wx_service_app_secret');
self::$instance = Factory::officialAccount([
'app_id' => $appId,
'secret' => $appSecret,
]);
$config = $Official->jssdk->buildConfig([])

微信公众号 OAuth 获取

发起用户授权

请求微信地址 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

返回 code

REDIRECT_URI**
返回的URL 形如

1
REDIRECT_URI?code=091MY61w31vBNV2TZ01w3Q5yeu4MY61V&state=STATE

这里注意的地址是授权回调域名, 否则回调的域名不正确

SCOPE
**

关于 scope 的授权参考这里 : https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

STATE
**

重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

通过 code 获取用户OpenID


原文地址 : 微信公众号相关信息
本站是作者语雀文档的镜像站, 如对文章有任何疑问请移步语雀进行 提问

搭建一个可以写前端代码的无刷新框架[vue/less]

其实现在有更好的方案 : Laravel Mix, 如果需要学习可以参考此文档

github 地址: https://github.com/imvkmark/fe-refresh-demo

在开发过程中, 现在遇到了写一些 html 的例子来测试代码, 但是在做的过程中, 使用在线的 jsbin 等工具总不如本地的代码测试跟踪起来便利, 所以就想本地搭建一个服务器可以监听本地的文件并能够实时显示在浏览器中进行测试, 主要完成 html/css 的预览以及测试

我这里选用的技术栈是

阅读更多

查看连接 wifi 的mac 地址

到手机拨bai号界面拨 *#*#4636#*#*,这时会弹出一个新界面,接下来点击“WLAN information(或者Wi-Fi information)”,再点击“WLAN status(或者Wi-Fi status)”,最后点击“Refresh status”键,你就能看到BSSID信息了,这个BSSID就是你要的无线路由器MAC地址!
image.png


原文地址 : 查看连接 wifi 的mac 地址
本站是作者语雀文档的镜像站, 如对文章有任何疑问请移步语雀进行 提问

禅道安装和升级

安装

下载

最新版下载地址可以在 找到

1
2
3
4
5
cd /webdata/www
# 下载
wget https://www.zentao.net/dl/zentao/17.1/ZenTaoPMS.17.1.php7.2_7.4.zip
# 解压
unzip ZenTaoPMS.17.1.php7.2_7.4.zip

配置 Nginx & Php 环境

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
server{
listen 80;
server_name zentao.domain.com;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}

server{
listen 443 ssl;
server_name zentao.domain.com;
index index.php;
root /path/of/zentaopms/www/;

ssl_certificate https/zentao.domain.com.crt;
ssl_certificate_key https/zentao.domain.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

client_max_body_size 20m;

location / {
try_files $uri $uri/ /index.php?$query_string;
}
access_log /webdata/logs/team/access.log main;
error_log /webdata/logs/team/error.log;
}

重启 nginx

1
2
$ nginx -t
$ nginx -s reload

接下来访问域名安装即可

升级

升级主要的步骤是备份, 覆盖安装, 执行 upgrade.php

备份, 在禅道后台操作即可, 覆盖解压到指定目录

1
unzip -o ZenTaoPMS.17.1.php7.2_7.4.zip 

执行升级, 运行 upgrade.php


原文地址 : 禅道安装和升级
本站是作者语雀文档的镜像站, 如对文章有任何疑问请移步语雀进行 提问