Mysql:1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
Mysql:1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
-- 导出表结构
SELECT A.TABLE_SCHEMA,
A.TABLE_NAME,
A.TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES A
WHERE A.TABLE_SCHEMA = '$table_name';
解压后的文件夹中有3个文件:
在Apache安装目录中新建cert目录,并将解压的Apache证书、证书链文件和密钥文件拷贝到cert目录中。如果需要安装多个证书,需在Apache目录中新建对应数量的cert目录,用于存放不同的证书 。
说明 如果申请证书时选择了手动创建CSR文件,请将手动生成创建的密钥文件拷贝到cert目录中并命名为domain name.key。
在Apache安装目录下,打开Apache/conf/httpd.conf文件,并找到以下参数,按照下文中注释内容进行配置。
#LoadModule ssl_module modules/mod_ssl.so #删除行首的配置语句注释符号“#”加载mod_ssl.so模块启用SSL服务,Apache默认是不启用该模块的。 #Include conf/extra/httpd-ssl.conf #删除行首的配置语句注释符号“#”。
说明 如果您在httpd.conf文件中没有找到以上配置语句,请确认您的Apache服务器中是否已经安装mod_ssl.so模块。可执行yum install -y mod_ssl
命令安装mod_ssl模块。
保存httpd.conf文件并退出。
打开Apache/conf/extra/httpd-ssl.conf文件并找到以下参数,按照下文中注释内容进行配置。
注意:根据操作系统的不同,http-ssl.conf文件也可能存放在conf.d/ssl.conf目录中。
<VirtualHost *:443>
ServerName #修改为申请证书时绑定的域名www.YourDomainName1.com。
DocumentRoot /data/www/hbappserver/public
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # 修改加密套件。
SSLHonorCipherOrder on
SSLCertificateFile cert/domain name1_public.crt # 将domain name1_public.crt替换成您证书文件名。
SSLCertificateKeyFile cert/domain name1.key # 将domain name1.key替换成您证书的密钥文件名。
SSLCertificateChainFile cert/domain name1_chain.crt # 将domain name1_chain.crt替换成您证书的密钥文件名;证书链开头如果有#字符,请删除。
</VirtualHost>
#如果证书包含多个域名,复制以上参数,并将ServerName替换成第二个域名。
<VirtualHost *:443>
ServerName #修改为申请证书时绑定的第二个域名www.YourDomainName2.com。
DocumentRoot /data/www/hbappserver/public
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # 修改加密套件。
SSLHonorCipherOrder on
SSLCertificateFile cert/domain name2_public.crt # 将domain name2替换成您申请证书时的第二个域名。
SSLCertificateKeyFile cert/domain name2.key # 将domain name2替换成您申请证书时的第二个域名。
SSLCertificateChainFile cert/domain name2_chain.crt # 将domain name2替换成您申请证书时的第二个域名;证书链开头如果有#字符,请删除。
</VirtualHost>
说明 需注意您的浏览器版本是否支持SNI功能。如果不支持,多域名证书配置将无法生效。
保存httpd-ssl.conf文件并退出。
在Apache的bin目录下执行以下命令:
1、停止Apache服务。
systemctl stop httpd
2、开启Apache服务。
systemctl start httpd
在httpd.conf文件中的中间,添加以下重定向代码。
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
证书安装完成后,您可通过登录证书的绑定域名验证该证书是否安装成功。
https://domain name #domain name替换成证书绑定的域名。
如果网页地址栏出现小锁标志,表示证书安装成功。
<?php
namespace FatSmallTools;
class NavicatPassword
{
protected $version = 0;
protected $aesKey = 'libcckeylibcckey';
protected $aesIv = 'libcciv libcciv ';
protected $blowString = '3DC5CA39';
protected $blowKey = null;
protected $blowIv = null;
public function __construct($version = 12)
{
$this->version = $version;
$this->blowKey = sha1('3DC5CA39', true);
$this->blowIv = hex2bin('d9c7c3c8870d64bd');
}
public function encrypt($string)
{
$result = FALSE;
switch ($this->version) {
case 11:
$result = $this->encryptEleven($string);
break;
case 12:
$result = $this->encryptTwelve($string);
break;
default:
break;
}
return $result;
}
protected function encryptEleven($string)
{
$round = intval(floor(strlen($string) / 8));
$leftLength = strlen($string) % 8;
$result = '';
$currentVector = $this->blowIv;
for ($i = 0; $i < $round; $i ) {
$temp = $this->encryptBlock($this->xorBytes(substr($string, 8 * $i, 8), $currentVector));
$currentVector = $this->xorBytes($currentVector, $temp);
$result .= $temp;
}
if ($leftLength) {
$currentVector = $this->encryptBlock($currentVector);
$result .= $this->xorBytes(substr($string, 8 * $i, $leftLength), $currentVector);
}
return strtoupper(bin2hex($result));
}
protected function encryptBlock($block)
{
return openssl_encrypt($block, 'BF-ECB', $this->blowKey, OPENSSL_RAW_DATA|OPENSSL_NO_PADDING);
}
protected function decryptBlock($block)
{
return openssl_decrypt($block, 'BF-ECB', $this->blowKey, OPENSSL_RAW_DATA|OPENSSL_NO_PADDING);
}
protected function xorBytes($str1, $str2)
{
$result = '';
for ($i = 0; $i < strlen($str1); $i ) {
$result .= chr(ord($str1[$i]) ^ ord($str2[$i]));
}
return $result;
}
protected function encryptTwelve($string)
{
$result = openssl_encrypt($string, 'AES-128-CBC', $this->aesKey, OPENSSL_RAW_DATA, $this->aesIv);
return strtoupper(bin2hex($result));
}
public function decrypt($string)
{
$result = FALSE;
switch ($this->version) {
case 11:
$result = $this->decryptEleven($string);
break;
case 12:
$result = $this->decryptTwelve($string);
break;
default:
break;
}
return $result;
}
protected function decryptEleven($upperString)
{
$string = hex2bin(strtolower($upperString));
$round = intval(floor(strlen($string) / 8));
$leftLength = strlen($string) % 8;
$result = '';
$currentVector = $this->blowIv;
for ($i = 0; $i < $round; $i ) {
$encryptedBlock = substr($string, 8 * $i, 8);
$temp = $this->xorBytes($this->decryptBlock($encryptedBlock), $currentVector);
$currentVector = $this->xorBytes($currentVector, $encryptedBlock);
$result .= $temp;
}
if ($leftLength) {
$currentVector = $this->encryptBlock($currentVector);
$result .= $this->xorBytes(substr($string, 8 * $i, $leftLength), $currentVector);
}
return $result;
}
protected function decryptTwelve($upperString)
{
$string = hex2bin(strtolower($upperString));
return openssl_decrypt($string, 'AES-128-CBC', $this->aesKey, OPENSSL_RAW_DATA, $this->aesIv);
}
}
use FatSmallToolsNavicatPassword;
//需要指定版本,11或12
$navicatPassword = new NavicatPassword(12);
//$navicatPassword = new NavicatPassword(11);
//解密
//$decode = $navicatPassword->decrypt('15057D7BA390');
$decode = $navicatPassword->decrypt('BD24FE2CDBD24FE2CDAA36A18B4AA36A18B4');
echo $decode."n";
注意代码需要修改一下使用。
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.util.Arrays;
/**
* 以下程序均为ChatGPT生成
* @Author: 木芒果
*/
public class NavicatPassword {
public static void main(String[] args) throws Exception {
NavicatPassword navicatPassword = new NavicatPassword();
// 解密11版本及以前的密码
//String decode = navicatPassword.decrypt("15057D7BA390", 11);
// 解密12版本及以后的密码
//String decode = navicatPassword.decrypt("15057D7BA390", 12);
String decode = navicatPassword.decrypt("解密密码", 12);
System.out.println(decode);
}
private static final String AES_KEY = "libcckeylibcckey";
private static final String AES_IV = "libcciv libcciv ";
private static final String BLOW_KEY = "3DC5CA39";
private static final String BLOW_IV = "d9c7c3c8870d64bd";
public static String encrypt(String plaintext, int version) throws Exception {
switch (version) {
case 11:
return encryptEleven(plaintext);
case 12:
return encryptTwelve(plaintext);
default:
throw new IllegalArgumentException("Unsupported version");
}
}
public static String decrypt(String ciphertext, int version) throws Exception {
switch (version) {
case 11:
return decryptEleven(ciphertext);
case 12:
return decryptTwelve(ciphertext);
default:
throw new IllegalArgumentException("Unsupported version");
}
}
private static String encryptEleven(String plaintext) throws Exception {
byte[] iv = hexStringToByteArray(BLOW_IV);
byte[] key = hashToBytes(BLOW_KEY);
int round = plaintext.length() / 8;
int leftLength = plaintext.length() % 8;
StringBuilder result = new StringBuilder();
byte[] currentVector = iv.clone();
Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
for (int i = 0; i < round; i++) {
byte[] block = xorBytes(plaintext.substring(i * 8, (i + 1) * 8).getBytes(), currentVector);
byte[] temp = cipher.doFinal(block);
currentVector = xorBytes(currentVector, temp);
result.append(bytesToHex(temp));
}
if (leftLength > 0) {
currentVector = cipher.doFinal(currentVector);
byte[] block = xorBytes(plaintext.substring(round * 8).getBytes(), currentVector);
result.append(bytesToHex(block));
}
return result.toString().toUpperCase();
}
private static String encryptTwelve(String plaintext) throws Exception {
byte[] iv = AES_IV.getBytes();
byte[] key = AES_KEY.getBytes();
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] result = cipher.doFinal(plaintext.getBytes());
return bytesToHex(result).toUpperCase();
}
private static String decryptEleven(String ciphertext) throws Exception {
byte[] iv = hexStringToByteArray(BLOW_IV);
byte[] key = hashToBytes(BLOW_KEY);
byte[] encrypted = hexStringToByteArray(ciphertext.toLowerCase());
int round = encrypted.length / 8;
int leftLength = encrypted.length % 8;
StringBuilder result = new StringBuilder();
byte[] currentVector = iv.clone();
Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "Blowfish");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
for (int i = 0; i < round; i++) {
byte[] block = Arrays.copyOfRange(encrypted, i * 8, (i + 1) * 8);
byte[] temp = xorBytes(cipher.doFinal(block), currentVector);
currentVector = xorBytes(currentVector, block);
result.append(new String(temp));
}
if (leftLength > 0) {
currentVector = cipher.doFinal(currentVector);
byte[] block = Arrays.copyOfRange(encrypted, round * 8, round * 8 + leftLength);
result.append(new String(xorBytes(block, currentVector)));
}
return result.toString();
}
private static String decryptTwelve(String ciphertext) throws Exception {
byte[] iv = AES_IV.getBytes();
byte[] key = AES_KEY.getBytes();
byte[] encrypted = hexStringToByteArray(ciphertext.toLowerCase());
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] result = cipher.doFinal(encrypted);
return new String(result);
}
private static byte[] xorBytes(byte[] bytes1, byte[] bytes2) {
byte[] result = new byte[bytes1.length];
for (int i = 0; i < bytes1.length; i++) {
result[i] = (byte) (bytes1[i] ^ bytes2[i]);
}
return result;
}
private static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}
private static byte[] hashToBytes(String s) throws Exception {
return MessageDigest.getInstance("SHA-1").digest(s.getBytes());
}
private static String bytesToHex(byte[] bytes) {
StringBuilder result = new StringBuilder();
for (byte b : bytes) {
result.append(String.format("%02X", b));
}
return result.toString();
}
}
意外将hosts文件删除,将恢复方法记录
版本信息: Windows 10 专业版 1909
将C:\Windows\System32\drivers\etc\
目录下的lmhosts.sam
文件复制一份并重命名为hosts
即可。
安装markdown-preview插件后,使用时无论是使用快捷键还是命令,都没有任何反馈
在vim命令行输入messages
输出以下出错信息( 部分):
......
[vim-node-rpc] rpc error: internal/modules/cjs/loader.js:883
[vim-node-rpc] rpc error: throw err;
[vim-node-rpc] rpc error: ^
[vim-node-rpc] rpc error:
[vim-node-rpc] rpc error: error: cannot find module 'tslib'
[vim-node-rpc] rpc error: require stack:
[vim-node-rpc] rpc error: - /users/dxm/.vim/bundle/markdown-preview.nvim/app/lib/app/index.js
[vim-node-rpc] rpc error: - /users/dxm/.vim/bundle/markdown-preview.nvim/app/index.js
......
可以看到是因为缺少tslib模块引起的错误,经查资料得知此模块用途超出我的知识范围qaq,
tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能。-百度百科
所以去插件的Github仓库去碰碰运气,终于在一条issue下找到解决方法:
在插件目录下执行:
npm install
其他操作系统或许可以尝试诸如yarn install
等操作,当然,还是要根据出错信息 自己排查解决。
# vim /etc/my.cnf
添加skip-grant-tables
;
# systemctl restart mysqld.service
[root@cvm-3ibcdh728a225 html]# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.34 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set authentication_string='your-new-passwd' where user='root';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges ;
Query OK, 0 rows affected (0.02 sec)
mysql> quit
Bye
# vim /etc/my.cnf
# systemctl restart mysqld.service
修改完成。
— end —
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>T</title>
<style>
.images-box {
padding: 0 0vw 2vw 0vw;
font-size: 0;
word-spacing: 0;
letter-spacing: 1vw;
line-height: 1vw;
}
.images-box a {
display: inline-block;
height: 30%;
width: 30%;
overflow: hidden;
text-decoration: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.images-box a:only-child {
height: initial;
width: initial;
max-width: 80%;
}
.images-box a:nth-child(1):nth-last-child(2) {
width: 45%;
height: 45%;
}
.images-box a:nth-child(2):nth-last-child(1) {
width: 45%;
height: 45%;
}
.images-box a:nth-child(1):nth-last-child(4) {
height: 45%;
width: 45%;
}
.images-box a:nth-child(2):nth-last-child(3) {
height: 45%;
width: 45%;
}
.images-box a:nth-child(3):nth-last-child(2) {
height: 45%;
width: 45%;
}
.images-box a:nth-child(4):nth-last-child(1) {
height: 45%;
width: 45%;
}
.images-box a img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
</head>
<body>
<div class="images-box">
<a><img src="./1.jpg"></img></a>
<a><img src="./1.jpg"></img></a>
<a><img src="./1.jpg"></img></a>
...
</div>
</body>
</html>
#include<stdio.h>
int main(){
int x = 90;
int y = 100;
while(y > 0)
if(x > 100){
x = x - 10;
y--;
}
else x++;
}
x | y | 基础操作语句执行 |
---|---|---|
90 | 100 | 未执行 |
91 | 100 | 未执行 |
92 | 100 | 未执行 |
93 | 100 | 未执行 |
94 | 100 | 未执行 |
95 | 100 | 未执行 |
96 | 100 | 未执行 |
97 | 100 | 未执行 |
98 | 100 | 未执行 |
99 | 100 | 未执行 |
100 | 100 | 未执行 |
101 | 100 | 执行第一次 |
91 | 99 | 未执行 |
92 | 99 | 未执行 |
93 | 99 | 未执行 |
94 | 99 | 未执行 |
… | … | … |
x
总是从90~101
循环,y
从100
减小到0
,y
每减小1
,最内层循环执行1
次,共执行100
次; 所以时间复杂度为O(1)
;
1、打开Typora软件的主题目录(文件-偏好设置-外观-打开主题文件夹)
类似C:\Users\i\AppData\Roaming\Typora\themes
这种
2、在主题目录下新建文件,命名为base.user.css
,注意拓展名为css,没有显示拓展名的系统可能为txt
3、将以下代码写入base.user.css中
/** initialize css counter */
#write, .sidebar-content,.md-toc-content {
counter-reset: h1
}
#write h1, .outline-h1, .md-toc-item.md-toc-h1 {
counter-reset: h2
}
#write h2, .outline-h2, .md-toc-item.md-toc-h2 {
counter-reset: h3
}
#write h3, .outline-h3, .md-toc-item.md-toc-h3 {
counter-reset: h4
}
#write h4, .outline-h4, .md-toc-item.md-toc-h4 {
counter-reset: h5
}
#write h5, .outline-h5, .md-toc-item.md-toc-h5 {
counter-reset: h6
}
/** put counter result into headings */
#write h1:before,
h1.md-focus.md-heading:before,
.outline-h1>.outline-item>.outline-label:before,
.md-toc-item.md-toc-h1>.md-toc-inner:before{
counter-increment: h1;
content: counter(h1) " "
}
#write h2:before,
h2.md-focus.md-heading:before,
.outline-h2>.outline-item>.outline-label:before,
.md-toc-item.md-toc-h2>.md-toc-inner:before{
counter-increment: h2;
content: counter(h1) "." counter(h2) " "
}
#write h3:before,
h3.md-focus.md-heading:before,
.outline-h3>.outline-item>.outline-label:before,
.md-toc-item.md-toc-h3>.md-toc-inner:before {
counter-increment: h3;
content: counter(h1) "." counter(h2) "." counter(h3) " "
}
#write h4:before,
h4.md-focus.md-heading:before,
.outline-h4>.outline-item>.outline-label:before,
.md-toc-item.md-toc-h4>.md-toc-inner:before {
counter-increment: h4;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) " "
}
#write h5:before,
h5.md-focus.md-heading:before,
.outline-h5>.outline-item>.outline-label:before,
.md-toc-item.md-toc-h5>.md-toc-inner:before {
counter-increment: h5;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) " "
}
#write h6:before,
h6.md-focus.md-heading:before,
.outline-h6>.outline-item>.outline-label:before,
.md-toc-item.md-toc-h6>.md-toc-inner:before {
counter-increment: h6;
content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) " "
}
/** override the default style for focused headings */
#write>h3.md-focus:before,
#write>h4.md-focus:before,
#write>h5.md-focus:before,
#write>h6.md-focus:before,
h3.md-focus:before,
h4.md-focus:before,
h5.md-focus:before,
h6.md-focus:before {
color: inherit;
border: inherit;
border-radius: inherit;
position: inherit;
left:initial;
float: none;
top:initial;
font-size: inherit;
padding-left: inherit;
padding-right: inherit;
vertical-align: inherit;
font-weight: inherit;
line-height: inherit;
}
4、重启软件,测试
—End—