首页
KMS
推荐
layui
Search
1
MobaXterm最新版破解
121,445 阅读
2
Sublime text 3 最新版注册码
112,093 阅读
3
[易语言] Game-EC 驱动辅助模块8.5.1[卓越]加密狗版【破解版】
108,293 阅读
4
文件对比神器 Beyond Compare 注册码
65,072 阅读
5
Office 2016 零售版转VOL版
16,566 阅读
默认分类
编程
探究
Yii2学习笔记
疑难杂症
原创
工具
数据库
算法学习
服务器运维
网络安全
渗透测试
逆向破解
登录
Search
标签搜索
PHP
PHP Tools for Visual Studio
PHP Tools 破解
破解
Crack
VS2019
Beyond Compare
python
mitmproxy
mitmweb
mitmdump
openssl
windows
青春图床
开源
swoole
hyperf
redis
vue
SnowFlake
kali
累计撰写
27
篇文章
累计收到
40
条评论
首页
栏目
默认分类
编程
探究
Yii2学习笔记
疑难杂症
原创
工具
数据库
算法学习
服务器运维
网络安全
渗透测试
逆向破解
页面
KMS
推荐
layui
搜索到
27
篇与
的结果
2021-10-22
搭建MySQL高可用集群
MySQL InnoDB Cluster 搭建过程基于Ubuntu 20.04系统搭建系统防火墙均已关闭为了方便管理,主节点和从节点root密码统一使用一个模式:单主多从graph LR A[Application/Client] --> B[Mysql Router] B --> A B --> C[MySQL Master R/W] C --> |Group Replication| D[Slave01 R/O] C --> |Group Replication| E[Slave02 R/O] C --> |Group Replication| F[Slave02 R/O] C --> |Group Replication| G[Slave02 R/O] 节点IP作用node01192.168.121.135主node02192.168.121.136从node03192.168.121.137从node04192.168.121.138路由管理系统配置(所有服务器)在每台服务器上配置hosts,编辑/etc/hosts文件,加入以下内容192.168.121.135 node01 192.168.121.136 node02 192.168.121.137 node03 192.168.121.138 node04软件安装主节点、从节点、路由管理节点初始化,安装MySQL官方apt源sudo wget https://repo.mysql.com/mysql-apt-config_0.8.19-1_all.deb && sudo dpkg -i mysql-apt-config_0.8.19-1_all.deb && sudo apt-get update主节点、从节点安装mysql-server、mysql-shellsudo apt install mysql-server mysql-shell -y路由管理节点安装mysql-shell、mysql-routersudo apt install mysql-router mysql-shell -yMySQL配置(主、从服务器)修改MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf(主节点)[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log default-storage-engine = INNODB character-set-server = utf8mb4 port = 3306 #复制框架 server_id = 1 gtid_mode = ON enforce_gtid_consistency = ON master_info_repository = TABLE relay_log_info_repository = TABLE binlog_checksum = NONE log_slave_updates = ON log_bin = binlog binlog_format = ROW max_connections = 100 max_allowed_packet = 100M #组复制设置 #server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列 transaction_write_set_extraction = XXHASH64 #告知插件加入或创建组命名,UUID loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。 loose-group_replication_start_on_boot = off #告诉插件使用IP地址,端口33061用于接收组中其他成员转入连接 loose-group_replication_local_address = "node01:33061" #启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意 loose-group_replication_group_seeds = "node01:33061,node02:33061,node03:33061" loose-group_replication_ip_whitelist = "node01,node02,node03,node04" loose-group_replication_bootstrap_group = off # 使用MGR的单主模式 loose-group_replication_single_primary_mode = on loose-group_replication_enforce_update_everywhere_checks = off disabled_storage_engines = MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE从节点也需要修改,只需要把配置文件中的server_id、loose-group_replication_local_address修改为对应的值例如node02server_id = 2 loose-group_replication_local_address = "node02:33061"以此类推重启MySQLsudo service mysql restart使root用户支持远程登录update mysql.user set host='%' where user='root';赋予管理集群所需的权限GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;刷新权限flush privileges;配置本地实例在所有节点服务器上配置本地实例,使用mysqlsh工具dba.configureLocalInstance('root@localhost:3306', {'password': 'root', 'interactive': false});检查实例状态dba.checkInstanceConfiguration("root@localhost:3306");如果输出以下内容说明配置成功。The instance 'node01:3306' is valid to be used in an InnoDB cluster. { "status": "ok" }创建集群在主节点上创建集群,同样使用mysqlsh工具# 连接实例 shell.connect('root@localhost:3306'); # 创建一个集群,命名为 'myCluster' var cluster = dba.createCluster('myCluster'); # 查看集群状态 cluster.status();输出以下内容就表示创建成功{ "clusterName": "myCluster", "defaultReplicaSet": { "name": "default", "primary": "node01:3306", "ssl": "REQUIRED", "status": "OK_NO_TOLERANCE", "statusText": "Cluster is NOT tolerant to any failures.", "topology": { "node01:3306": { "address": "node01:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.27" } }, "topologyMode": "Single-Primary" }, "groupInformationSourceMember": "node01:3306" }从节点加入集群在主节点中打开mysqlsh工具# 连接实例 shell.connect('root@localhost:3306'); # 根据集群名字获取集群对象 var cluster = dba.getCluster('myCluster'); # 将node02节点加入集群 cluster.addInstance('root@node02:3306');如果出现WARNING: A GTID set check of the MySQL instance at 'node02:3306' determined that it contains transactions that do not originate from the cluster, which must be discarded before it can join the cluster. node02:3306 has the following errant GTIDs that do not exist in the cluster: bbdb0716-32e7-11ec-86e0-000c29040a05:1-2 WARNING: Discarding these extra GTID events can either be done manually or by completely overwriting the state of node02:3306 with a physical snapshot from an existing cluster member. To use this method by default, set the 'recoveryMethod' option to 'clone'. Having extra GTID events is not expected, and it is recommended to investigate this further and ensure that the data can be removed prior to choosing the clone recovery method. Please select a recovery method [C]lone/[A]bort (default Abort):输入C继续,之后提示出下面内容说明加入成功The instance 'node02:3306' was successfully added to the cluster.其他从节点加入的方式一致查询集群状态cluster.status()输出下面内容{ "clusterName": "myCluster", "defaultReplicaSet": { "name": "default", "primary": "node01:3306", "ssl": "REQUIRED", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { "node01:3306": { "address": "node01:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.27" }, "node02:3306": { "address": "node02:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.27" }, "node03:3306": { "address": "node03:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.27" } }, "topologyMode": "Single-Primary" }, "groupInformationSourceMember": "node01:3306" }可以看到,所有节点均已加入集群,并且正常运行配置 MySQL Router创建配置文件保存目录sudo mkdir /mysqlrouter将创建的目录授权给mysqlrouter用户编辑/etc/apparmor.d/usr.bin.mysqlrouter文件,加入以下内容# Allow config file access /mysqlrouter/ rw, /mysqlrouter/** rw,重启apparmorsudo /etc/init.d/apparmor restart配置 MySQL Router,生成配置文件到/data/mysqlrouter目录sudo mysqlrouter --bootstrap node01:3306 --directory /mysqlrouter --user=root --conf-use-sockets --force--conf-use-sockets 表示使用 unix sockets 通信--directory 指定配置文件保存目录输出下面内容表示创建成功# Bootstrapping MySQL Router instance at '/mysqlrouter'... - Creating account(s) (only those that are needed, if any) - Verifying account (using it to run SQL queries that would be run by Router) - Storing account in keyring - Adjusting permissions of generated files - Creating configuration /mysqlrouter/mysqlrouter.conf # MySQL Router configured for the InnoDB Cluster 'myCluster' After this MySQL Router has been started with the generated configuration $ mysqlrouter -c /mysqlrouter/mysqlrouter.conf InnoDB Cluster 'myCluster' can be reached by connecting to: ## MySQL Classic protocol - Read/Write Connections: localhost:6446, /mysqlrouter/mysql.sock - Read/Only Connections: localhost:6447, /mysqlrouter/mysqlro.sock ## MySQL X protocol - Read/Write Connections: localhost:6448, /mysqlrouter/mysqlx.sock - Read/Only Connections: localhost:6449, /mysqlrouter/mysqlxro.sock启动 MySQL Routersudo /mysqlrouter/start.sh启动完成后会监听下面几个端口端口socket文件协议服务6446/mysqlrouter/mysql.sockMySQLMySQL 读写6447/mysqlrouter/mysqlro.sockMySQLMySQL 只读6448/mysqlrouter/mysqlx.sockMySQL XMySQL X 读写6449/mysqlrouter/mysqlxro.sockMySQL XMySQL X 只读8443无HTTPSWeb 管理验证集群登录后,新建一个数据库和表,往里面写进数据,查看从节点数据会不会同步;关闭node01的mysql服务,route将主节点自动切换到node02,node02从只读变为可读写,重新启动node01 mysql后,node01变为只读模式。
2021年10月22日
278 阅读
0 评论
0 点赞
2021-09-01
[2021]PHP循环性能比较
导语时间飞速流逝,转眼已经过去了3年,这几年科技在快速发展,PHP也来到了8.0.10版本。回望这几年,大数据时代悄然降临,面对海量的数据,我们迫切的需要更为快速的运算性能;基础硬件的升级、软件算法的迭代,这些都是必不可少的部分。编程语言也在不断进化着,但是我们写的代码真的高效吗?你真的会用这门语言吗?带着这些疑问来到我们今天的测试项目。循环语句是我们在编程中经常书写的代码,我们通常会使用循环对数组、集合、列表进行遍历,但是每种循环语句的实现各不相同,今天我们就对for、foreach这两个最常用的语句进行一个简单的性能测试。这次测试不包含内置函数的测试,例如array_map等回调类型的函数,也不对while、do...while语句进行测试,毕竟用while、do...while遍历数据的情况较少。其实早在2018年的时候做过这样的一个测试,但是不严谨,具体可以看之前这篇文章: PHP循环性能测试测试方法使用for、foreach、foreach-key三种方式进行嵌套空循环测试,每一层循环1000次,且每种方式运行5次,记录每次运行的耗时,取最小值作为最终测试结果。测试代码算法例子:$test_result = []; for($t = 0; $t < 5; $t++) { $start_time = microtime(true); for($i = 0; $i < 1000; $i++) { for($j = 0; $j < 1000; $j++) { // do something } } $end_time = microtime(true); $test_result[] = ($end_time-$start_time)*1000; } echo 'for:'.min($test_result).PHP_EOL;测试环境硬件环境 CPU单核 Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz内存2GB硬盘60GB SSD云硬盘操作系统Ubuntu Server 20.04 LTS 64bit软件环境PHP 5.6.40PHP 7.4.23PHP 8.0.10完整测试代码<?php function _for($test_count = 5, $loop_count = 1000) { $test_result = []; for($t = 0; $t < $test_count; $t++) { $start_time = microtime(true); for($i = 0; $i < $loop_count; $i++) { for($j = 0; $j < $loop_count; $j++) { // do something } } $end_time = microtime(true); $test_result[] = ($end_time-$start_time)*1000; } echo 'for:'.min($test_result).PHP_EOL; } function _foreach($test_count = 5, $loop_count = 1000) { $test_result = []; $array = range(1, $loop_count); for($t = 0; $t < $test_count; $t++) { $start_time = microtime(true); foreach($array as $value) { foreach($array as $value2) { // do something } } $end_time = microtime(true); $test_result[] = ($end_time-$start_time)*1000; } echo 'foreach:'.min($test_result).PHP_EOL; } function _foreach_key($test_count = 5, $loop_count = 1000) { $test_result = []; $array = range(1, $loop_count); for($t = 0; $t < $test_count; $t++) { $start_time = microtime(true); foreach($array as $key => $value) { foreach($array as $key2 => $value2) { // do something } } $end_time = microtime(true); $test_result[] = ($end_time-$start_time)*1000; } echo 'foreach-key:'.min($test_result).PHP_EOL; } _for(); _foreach(); _foreach_key();测试结果PHP5.6.40PHP7.4.23PHP8.0.10测试方法PHP 5.6.40PHP 7.4.23PHP 8.0.10for21.63696289062513.2529735565194.356861114502foreach46.97203636169419.380092620856.3300132751465foreach-key53.55119705200234.90209579467810.4660987854以上耗时结果均为毫秒单位,值越小越好从上面的结果可以看出,新版本对性能的提升确实非常大,基本上都是质的提升。如果可以尽量使用最新的稳定版。PHP8对比PHP7基本是3倍的性能提升。结束语这次测试结果还是让我很意外,本以为PHP7性能提升得已经够多了,没想到PHP8直接碾压,再加上PHP8引入的JIT(Just In Time),让PHP8非常乐观,不过到目前我还没弄懂在哪些情况下才会用到JIT,如果后面有时间我会专门写一篇文章来测试JIT。这篇文章的目的只是参考作用,毕竟只是空循环,实际应用中可能会复杂很多。但有一点可以肯定,新版本带来的性能提升是毋庸置疑的,大家可以放心食用~
2021年09月01日
288 阅读
0 评论
0 点赞
2021-01-28
PHP Tools for Visual Studio 一键破解工具 v1.3
为什么要做这个工具介于之前有小伙伴在问 PHP Tools 什么时候更新呀,为什么补丁用不了之类的问题,我做了这个一键破解工具。
2021年01月28日
4,295 阅读
14 评论
0 点赞
2020-12-25
PD16 虚拟机 网络初始化失败 解决
引子随着苹果公司发布了新一代搭载自研ARM架构的M1处理器的新Macbook 系列产品,各大厂商也是先后对自家的软件进行优化适配。其中就有 Parallels Desktop 虚拟机。
2020年12月25日
4,954 阅读
2 评论
0 点赞
2020-09-24
[免费]JetBrains全系列软件激活教程激活码
写在前面目前支持 JetBrains 2020.2.2 及以下版本的激活!!!建议大家去 JetBrains官网 下载JetBrains系列工具的官方版,然后使用本教程方法激活。Jetbrains 自2020年1月起大量封杀激活码,现在几乎没有可用的激活码了,X宝上的都已经关店了,那些卖激活码的随时准备坑钱跑路。没有激活码了怎么办?
2020年09月24日
3,381 阅读
0 评论
0 点赞
2020-09-12
MYSQL | 最左匹配原则
最左匹配原则最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配。例如某表现有索引(a,b,c),现在你有如下语句:
2020年09月12日
1,634 阅读
0 评论
0 点赞
2020-07-21
PHP Tools for Visual Studio 破解版(1.40.11953)(更新)
如何使用请看 https://www.jindashen.cn/default/2019/11/13/112.html这篇文章。
2020年07月21日
3,584 阅读
3 评论
0 点赞
2020-07-07
SnowFlake算法PHP版
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。
2020年07月07日
1,679 阅读
0 评论
0 点赞
2020-07-02
开源一个图床程序《青春图床》
最近在研究 swoole,还有基于 swoole 的一些开发框架,目前主要在研究 hyperf 。熟悉了一下,随手撸个简单的图库出来看看效果。。。体验地址: http://yp.3yi.ink/就只做了一个图片上传的功能。。。。(不要笑哦。。)
2020年07月02日
1,585 阅读
0 评论
0 点赞
2020-06-25
PHP Tools for Visual Studio 破解版(更新)
如何使用请看 https://www.jindashen.cn/default/2019/11/13/112.html这篇文章。
2020年06月25日
3,779 阅读
5 评论
0 点赞
2020-03-12
python之windows上安装mitmproxy遇到的问题和解决办法
mitmproxy 简介首先说下mitm是什么意思,mitm是 Man-in-the-Middle 的缩写,意思是中间人,proxy就是代理了。而 mitmproxy则是用python开发的一个免费、开源的中间人代理工具,并且支持使用python api来进行外挂脚本扩展...
2020年03月12日
3,816 阅读
0 评论
0 点赞
2019-12-18
Beyond Compare 4.x 通杀注册机
在网上找了好久才找到的Beyond Compare 4.x 通杀注册机网上找了一圈,发现有狗东西居然拿人家的东西卖钱???果断分享出来!具体怎么使用就不说了,很简单,自己研究截至目前Beyond Compare的最新版是 4.3.3 (构建号 24545)里面包含Mac版的破解!!百度云链接: https://pan.baidu.com/s/1rqNnUw8HZw7EL0lxDCt75w 提取码: c2q3建议保存一份到自己的网盘!!链接掉了不补
2019年12月18日
5,443 阅读
1 评论
0 点赞
2019-11-13
PHP Tools for Visual Studio 破解版
PHP Tools for Visual Studio 2019 破解版这个是我无意间发现漏洞,然后破解的。。。
2019年11月13日
10,566 阅读
9 评论
0 点赞
2019-09-23
什么是IaaS、PaaS和SaaS及其区别
IaaS、PaaS和SaaS是云计算的三种服务模式。定义SaaS:Software-as-a-Service(软件即服务)提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器。消费者不需要管理或控制任何云计算基础设施,包括网络、服务器、操作系统、存储等等;
2019年09月23日
2,050 阅读
0 评论
0 点赞
2019-05-23
记一次极限Linux分区扩容
这次操作可谓是争分夺秒啊~记录下来,一遍后面忘了能找到。。在写这篇文章的时候,之前扩容的100G还剩80G,还不够啊~~
2019年05月23日
10,984 阅读
0 评论
0 点赞
2019-04-10
Yii2-常用数据库操作
简单的介绍一下在Yii2中一些常用的数据库CURD操作
2019年04月10日
3,543 阅读
0 评论
0 点赞
2019-03-20
开源小工具:Hosts-Manager
Hosts-Manager
2019年03月20日
3,663 阅读
0 评论
0 点赞
2019-01-17
MySQL分区表
分区:分区的功能不是在存储引擎层实现的。因此不只是InnoDB才支持分区。MyISAM、NDB都支持分区操作。分区的过程是将一个表或者索引分解为多个更小、更可管理的部分。从逻辑上将,只有一个表或者索引,但是在物理上这个表或索引可能由数十个物理分区组成。
2019年01月17日
2,536 阅读
0 评论
0 点赞
2018-10-11
[2018]PHP循环性能比较
我们来测试一下for foreach array_map 这三个遍历数组方式的性能测试环境操作系统:Windows 7 64 位PHP版本:5.3.8 x64 TS
2018年10月11日
4,829 阅读
0 评论
0 点赞
2018-09-03
文件对比神器 Beyond Compare 注册码
Beyond Compare是一个非常不错的专业级的文件对比工具。使用他可以很方便的对比出两个文件或者文件夹的不同之处。并把相差的每一个字节用颜色加以表示,查看非常方便,还支持多种规则对比。
2018年09月03日
65,072 阅读
2 评论
0 点赞
1
2