zhang

zhang 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

zhang 回答了问题 · 1月20日

解决mysql5.7遇到个奇怪的问题

找到原因了,这就是mysql5.7的一个坑:
搭建了 5.7.24 和 5.7.18 多次还原测试,当 limit 等于1,uid 和 order by 的字段create_time 都存在索引,那么mysql就会随机性在 uid 和 create_time 选择一个索引查询,如果选择了 create_time 他就按照order by 排序全表扫,直到查到最近对应的uid一条数据,这样就变的很卡,不知道为什么第一次查他基本选择uid查,所以测试不会出现问题,但是后面多次查他又抛弃了uid使用了create_time扫。

测试:

CREATE TABLE `testsql` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `uid` int(10) unsigned NOT NULL COMMENT 'UID',
  `pull_qr` varchar(50) NOT NULL COMMENT '任意数据',
  `type` tinyint(1) DEFAULT NULL COMMENT '任意数据',
  `check_status` tinyint(1) DEFAULT '0' COMMENT '状态:0未完成,1已完成',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`),
  KEY `create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试数据';

把这个表随机写入500万条数据,对应uid数据不会超过1万条,然后查询:

SELECT `id`,`pull_qr` FROM `testsql` WHERE `uid` = '1' AND `check_status` = 0 AND `type` = 1 ORDER BY `create_time` ASC LIMIT 1

第一次查基本会以UID为索引查,没问题,后面断开,再查,多次重复操作,他居然只走 create_time 索引扫了,总结就是当 possible_keys 为uid key 为 create_time 的时候,有一定概率会使用 create_time 排序后扫下来,直到扫到对应的一条uid才停止。

最终解决方案:force index(uid) 强制走指定索引

相关类似文章:
https://developer.aliyun.com/article/51065

关注 3 回答 2

zhang 提出了问题 · 1月20日

解决mysql5.7遇到个奇怪的问题

数据库用的5.7.18,500多万条数据,uid有索引,出现个奇怪的问题:
如果ASC后 limit 4条没有问题
image

但是同样的语句如果 limit 1到3条,直接卡死
image

EXPLAIN这条语句又正常:
image
image

多次测试DESC没有此问题,只有使用了ASC且limit 1-3 范围内才会出现直接卡死情况,请问这种问题应该往哪个方向排查?
是否是mysql这个版本的bug这种可能性?
(后期多次测试发现是 limit=1 且和 ORDER BY组合的情况下才会出现随机选择索引,和DESC无关)

关注 3 回答 2

zhang 回答了问题 · 2020-12-22

解决请问这个mysql语句要怎么写?

select from (select from (select * from test GROUP BY t1,t2) as a GROUP BY t1) as b where t2>0;
这个也行

关注 1 回答 3

zhang 提出了问题 · 2020-12-22

解决请问这个mysql语句要怎么写?

image

不能使用in 的情况下,要怎么把t1对应t2没有0的数据找出来?
比如这个图 结果是 8、9 H ,因为H没有为0的t2。

关注 1 回答 3

zhang 赞了回答 · 2020-12-02

关于mysql5.6 in 语句优化,和5.7的问题

in是存在一定数量的,这里的“一定数量”在MySQL5.6.5以及以后的版本中是由eq_range_index_dive_limit这个参数控制 。默认设置是10,一直到5.7以后的版本默认修改为200,当然可以手动设置的,这个官方给的解释。但是经过测试发现,这个数量存在一定的被表的数量级等等或者是字段属性影响的。多试试几个表,你会发现,in的数量大多都是不一样的。至今只找到了这些线索 ,希望对你有用

关注 5 回答 4

zhang 赞了文章 · 2020-10-23

基于ECS搭建云上博客

场景介绍

本文为您介绍如何基于ECS搭建云上博客。

背景知识

本场景主要涉及以下云产品和服务:

云服务器ECS
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。

Wordpress
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当作一个内容管理系统(CMS)来使用。

场景体验

本场景将提供一台基础环境为CentOS 的ECS(云服务器)实例。我们将会在这台服务器上安装和部署LAMP环境,然后安装 WordPress,帮助您快速搭建自己的云上博客。首先您需要登录到已创建的ECS虚拟服务器上,然后在云服务器上安装一个MySQL数据库来存储博客内容。

步骤一:连接ECS服务器

具体操作可见阿里云体验实验室连接步骤

如尚未购买及操作ECS,可在此处免费体验阿里云ECS服务器。
资源地址:https://developer.aliyun.com/adc/scenario/fdecd528be6145dcbe747f0206e361f3

步骤二:安装Apache服务(连接ECS后)

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。

1.执行如下命令,安装Apache服务及其扩展包。

yum –y install httpd httpd-manual mod_ssl mod_perl mod_auth_mysql

2.返回类似如下图结果则表示安装成功。
在这里插入图片描述

执行如下命令,启动Apache服务。

systemctl start httpd.service

3.测试Apache服务是否安装并启动成功。

Apache默认监听80端口,所以只需在浏览器访问ECS分配的IP地址http://<ECS公网IP>,如下图:
在这里插入图片描述

步骤三:安装MySQL数据库

由于使用wordpress搭建云上博客,需要使用MySQL数据库存储数据,所以这一步我们安装一下MySQL。
1.执行如下命令,下载并安装MySQL。

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server

在这里插入图片描述
2.执行如下命令,启动 MySQL 数据库。

systemctl start mysqld.service

3.执行如下命令,查看MySQL运行状态。

systemctl status mysqld.service

在这里插入图片描述
4.执行如下命令,查看MySQL初始密码。

grep "password" /var/log/mysqld.log

在这里插入图片描述
5.执行如下命令,登录数据库。

mysql -uroot -p

在这里插入图片描述

6.执行如下命令,修改MySQL默认密码。
说明:新密码设置的时候如果设置的过于简单会报错,必须同时包含大小写英文字母、数字和特殊符号中的三类字符。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassWord1.';

7.执行如下命令,创建wordpress库。

create database wordpress; 

8.执行如下命令,查看是否创建成功。

show databases;

9.输入exit退出数据库。

在这里插入图片描述

步骤四:安装PHP环境

WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当作一个内容管理系统(CMS)来使用。

1.执行如下命令,安装PHP环境。

yum -y install php php-mysql gd php-gd gd-devel php-xml php-common php-mbstring php-ldap php-pear php-xmlrpc php-imap

2.执行如下命令创建PHP测试页面。

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

3.执行如下命令,重启Apache服务。

systemctl restart httpd

4.打开浏览器,访问http://&lt;ECS公网IP>/phpinfo.php,显示如下页面表示PHP语言环境安装成功。
在这里插入图片描述

步骤五:Wordpress安装和配置

1.执行如下命令,安装wordpress。

yum -y install wordpress

显示如下信息表示安装成功。

在这里插入图片描述
2.修改WordPress配置文件。
a.执行如下命令,修改wp-config.php指向路径为绝对路径。

# 进入/usr/share/wordpress目录。
cd /usr/share/wordpress
# 修改路径。
ln -snf /etc/wordpress/wp-config.php wp-config.php
# 查看修改后的目录结构。
ll

b.执行如下命令,移动wordpress到Apache根目录。

# 在Apache的根目录/var/www/html下,创建一个wp-blog文件夹。
mkdir /var/www/html/wp-blog
mv * /var/www/html/wp-blog/

c.执行以下命令修改wp-config.php配置文件。

在执行命令前,请先替换以下三个参数值。

  • database_name_here为之前步骤中创建的数据库名称,本示例为wordpress。
  • username_here为数据库的用户名,本示例为root。
  • password_here为数据库的登录密码,本示例为NewPassWord1.。

d.执行以下命令,查看配置文件信息是否修改成功。

cat -n /var/www/html/wp-blog/wp-config.php

在这里插入图片描述
3.执行如下命令,重启Apache服务。

systemctl restart httpd

步骤六:测试Wordpress

完成以上所有步骤后,就可以测试我们基于ECS所搭建的云上博客了。

1.打开浏览器并访问http://&lt;ECS公网IP>/wp-blog/wp-admin/install.php。
2.根据以下信息完成wordpress初始化配置。

  • Site Title:站点名称,例如:Hello ADC。
  • Username:管理员用户名,例如:admin。
  • Password:访问密码,例如:cIxWg9t@a8MJBAnf%j。
  • Your
    Email:email地址,建议为真实有效的地址。若没有,可以填写虚拟email地址,但将无法接收信息,例如:admin@admin.com。

在这里插入图片描述
3.单击Install WordPress完成Wordpress初始化。
4.单击Log In进行登录。
在这里插入图片描述
5.输入设置的用户名和密码。
在这里插入图片描述
6.登录后,您就可以添加博客进行发布了。
在这里插入图片描述

查看原文

赞 0 收藏 0 评论 0

zhang 关注了问题 · 2020-09-28

解决php服务如何开启OCSP Stapling ?

比如nginx开启方式:
ssl_stapling on;
ssl_stapling_verify on;

PHP要如何配置才能开启OCSP?

$context = array(
'ssl' => array(
'local_cert' => '/etc/apache2/ssl/2_www.XXXX.cn.crt',
'local_pk' => '/etc/apache2/ssl/3_www.XXXXcn.key',
'verify_peer' => false,)
);
$context=stream_context_create($context_option);

image

关注 2 回答 1

zhang 提出了问题 · 2020-09-28

解决php服务如何开启OCSP Stapling ?

比如nginx开启方式:
ssl_stapling on;
ssl_stapling_verify on;

PHP要如何配置才能开启OCSP?

$context = array(
'ssl' => array(
'local_cert' => '/etc/apache2/ssl/2_www.XXXX.cn.crt',
'local_pk' => '/etc/apache2/ssl/3_www.XXXXcn.key',
'verify_peer' => false,)
);
$context=stream_context_create($context_option);

image

关注 2 回答 1

zhang 回答了问题 · 2020-07-08

解决php7 cli模式下高并发情况下 CURL 内存不会自动释放

根本原因找到了!不是CURL的问题,是其他地方用了带 create的函数没有释放造成的!

关注 1 回答 1

zhang 提出了问题 · 2020-07-08

解决php7 cli模式下高并发情况下 CURL 内存不会自动释放

PHP 7.4.5
关键的参数都已设置:
curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com');
curl_setopt($ch, CURLOPT_TIMEOUT, 10);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
...
curl_close($ch);

正常访问没问题,但是在高并发下 执行这个CURL的进程内存会持续增加(抓包内存内容都是访问后的结果),隔一天后都不会释放,要怎么处理?

关注 1 回答 1

认证与成就

  • 获得 2 次点赞
  • 获得 11 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 11 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2018-03-16
个人主页被 379 人浏览