热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL高可用(GaleraCluster)

GaleraCluster简介GaleraCluster是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前GaleraClus

Galera Cluster简介

Galera Cluster是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster和MariaDB Cluster,Galera本时是具有多主特性,即采用Multi-master的集群架构,是一个即稳健,又在数据一致性、完整性及高性能方面有出色表现的高可用解决方案

Galera Cluster内部机制


Galera Cluster种每个MySQLServer之间相互为主主的关系,当客户端发送指令到一个数据库时,数据库将数据修改后返回一个OK,表示用户的请求已经被收到,但是事务并没有结束依旧可以撤销。当事务结束时用户发送一个commit(提交),服务器收到后会将数据的更新发送给其他的MySQLServer,此时会开启一个全局性的事务ID给组内的其他服务器,其他服务器会查看是否有事务冲突,如果没有冲突就确认更改成功。

Galera Cluster特点

  1. 多主架构:真正的多点读写的集群,在任何时候读写数据都是最新的
  2. 同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的
  3. 并发复制:从节点APPLY数据时,支持并行执行有更好的性能。
  4. 故障切换:数据库故障时,因为支持多点写入,切换容易
  5. 热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务的时间就会非常少。在节点故障期间,节点本身对集群的影响非常小
  6. 自动节点克隆: 在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,Galera Cluster会自动拉取在线节点数据,最终集群会变为一直
  7. 对应用透明:集群的维护,对应用程序是透明的

优点:

  1. 多主写入,无延迟复制,能保证数据强一致性;
  2. 有成熟的社区,有互联网公司在大规模的使用;
  3. 自动故障转移,自动添加、剔除节点;

 

缺点:

    1. 需要为原生MySQL节点打wsrep补丁
    2. 只支持innodb储存引擎
    3. 至少三节点;

 

Galera Cluster搭建

环境准备

准备3台msyql服务器主机名ip地址
node1 192.168.73.110
node2 192.168.73.111
node3 192.168.73.112

一、配置YUM源

在每个节点上配置YUM源

[root@node1 ~]# vim /etc/yum.repos.d/mysql.repo
[mysql]
name=galera cluster
baseurl=http://mirrors.neusoft.edu.cn/mariadb//mariadb-10.0.38/yum/centos7-amd64/
gpgcheck=0

 

二、安装MariaDB-Galera-server

(1)在每个节点上安装MariaDB-Galera-server

[root@node1 ~]# yum install MariaDB-Galera-server -y

 (2)MySQL 使用wsrep补丁版本扩展

https://galeracluster.com/downloads/
http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
https://galeracluster.com/library/documentation/install.html

启用yum存储库
对于基于RPM的发行版,例如CentOS,Red Hat和Fedora,您可以通过向目录添加galera.repo文件来启用Codership存储库/etc/yum.repos.d/。
使用首选文本编辑器创建galera.repo文件。

在该baseurl字段中,对Web地址进行以下更改:
[galera]
name = Galera
baseurl = https://releases.galeracluster.com/galera-3/DIST/RELEASE/ARCH
gpgkey = https://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

[mysql-wsrep]
name = MySQL-wsrep
baseurl = https://releases.galeracluster.com/mysql-wsrep-VERSION/DIST/RELEASE/ARCH
gpgkey = https://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

VERSION表示所需的MySQL-wsrep版本。例如,5.6
DIST表示分发名称。例如,centos或fedora。
RELEASE表示分发版本号。例如,6对于CentOS 20或21Fedora。
ARCH表示硬件的体系结构。例如,x86_64对于64位系统。
Codership存储库中的软件包现在可以通过安装进行安装yum。

 

三、修改配置文件

配置文件在/etc/my.cnf.d/server.cnf,有必须设置和可选设置两个配置

# Mandatory settings                    #这里的项目为必填
wsrep_provider=                         #添加模块路径
wsrep_cluster_address=                  #添加所有服务器的地址gcomm服务器间代替通讯协议
binlog_format=row                       #启用二进制日志

# Optional setting                      #以下项为可选项
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
#wsrep_cluster_name=\'testcluster\'       #集群的名称
#wsrep_node_name=\'node1\'                #当前节点的名称
#wsrep_node_address=\'192.168.73.110\'    #当前节点的地址

 

对每个节点配置文件进行修改,此处以node1为例

[root@node1 ~]# vim /etc/my.cnf.d/server.cnf 
[galera]
# Mandatory settings
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.73.110,192.168.73.111,192.168.73.112"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

 

四、启动服务

第一个启动的节点需要添加--wsrep-new-cluster选项,说明这是一个新的集群,其余节点启动服务无需添加参数

[root@node1 ~]# service mysql start --wsrep-new-cluster

 

node2节点启动服务

[root@node2 ~]# service mysql start

 

node3节点启动服务

[root@node3 ~]# service mysql start

 

五、测试

1.测试同步

从node1导入数据库

[root@node1 ~]# mysql 

node2查看

[root@node2 ~]# mysql -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

node3查看

[root@node3 ~]# mysql -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

 

2.测试冲突

同时在3节点创建表
在node2节点成功,其余节点都失败

[root@node2 ~]# mysql -e "CREATE TABLE hellodb.test(id int auto_increment primary key,name char(20));"
[root@localhost ~]# 

node1节点

[root@node1 ~]# mysql -e "CREATE TABLE hellodb.test(id int auto_increment primary key,name char(20));"
ERROR 1050 (42S01) at line 1: Table \'test\' already exists

node3节点

[root@node3 ~]# mysql -e "CREATE TABLE hellodb.test(id int auto_increment primary key,name char(20));"
ERROR 1050 (42S01) at line 1: Table \'test\' already exists

其他

Galera Cluster系统和状态变量
1.查看状态变量:SHOW STATUS LIKE \'wsrep_%\'

MariaDB [(none)]> SHOW STATUS LIKE \'wsrep_%\';
+------------------------------+-------------------------------------------------------------+
| Variable_name                | Value                                                       |
+------------------------------+-------------------------------------------------------------+
| wsrep_local_state_uuid       | e9f07cd3-7253-11e9-b27e-174ea2b4587d                        |
| wsrep_protocol_version       | 9                                                           |
| wsrep_last_committed         | 38                                                          |
| wsrep_replicated             | 36                                                          |
| wsrep_replicated_bytes       | 18960                                                       |
| wsrep_repl_keys              | 144                                                         |
| wsrep_repl_keys_bytes        | 2016                                                        |
| wsrep_repl_data_bytes        | 14522                                                       |
| wsrep_repl_other_bytes       | 0                                                           |
| wsrep_received               | 12                                                          |
| wsrep_received_bytes         | 1782                                                        |
| wsrep_local_commits          | 6                                                           |
| wsrep_local_cert_failures    | 0                                                           |
| wsrep_local_replays          | 0                                                           |
| wsrep_local_send_queue       | 0                                                           |
| wsrep_local_send_queue_max   | 1                                                           |
| wsrep_local_send_queue_min   | 0                                                           |
| wsrep_local_send_queue_avg   | 0.000000                                                    |
| wsrep_local_recv_queue       | 0                                                           |
| wsrep_local_recv_queue_max   | 1                                                           |
| wsrep_local_recv_queue_min   | 0                                                           |
| wsrep_local_recv_queue_avg   | 0.000000                                                    |
| wsrep_local_cached_downto    | 1                                                           |
| wsrep_flow_control_paused_ns | 0                                                           |
| wsrep_flow_control_paused    | 0.000000                                                    |
| wsrep_flow_control_sent      | 0                                                           |
| wsrep_flow_control_recv      | 0                                                           |
| wsrep_cert_deps_distance     | 1.000000                                                    |
| wsrep_apply_oooe             | 0.000000                                                    |
| wsrep_apply_oool             | 0.000000                                                    |
| wsrep_apply_window           | 1.000000                                                    |
| wsrep_commit_oooe            | 0.000000                                                    |
| wsrep_commit_oool            | 0.000000                                                    |
| wsrep_commit_window          | 1.000000                                                    |
| wsrep_local_state            | 4                                                           |
| wsrep_local_state_comment    | Synced                                                      |
| wsrep_cert_index_size        | 82                                                          |
| wsrep_causal_reads           | 0                                                           |
| wsrep_cert_interval          | 0.026316                                                    |
| wsrep_open_transactions      | 0                                                           |
| wsrep_open_connections       | 0                                                           |
| wsrep_incoming_addresses     | 192.168.73.110:3306,192.168.73.111:3306,192.168.73.112:3306 |
| wsrep_cluster_weight         | 3                                                           |
| wsrep_desync_count           | 0                                                           |
| wsrep_evs_delayed            |                                                             |
| wsrep_evs_evict_list         |                                                             |
| wsrep_evs_repl_latency       | 0/0/0/0/0                                                   |
| wsrep_evs_state              | OPERATIONAL                                                 |
| wsrep_gcomm_uuid             | e9efec79-7253-11e9-8e15-9f3e0cc2d8a1                        |
| wsrep_cluster_conf_id        | 3                                                           |
| wsrep_cluster_size           | 3                                                           |
| wsrep_cluster_state_uuid     | e9f07cd3-7253-11e9-b27e-174ea2b4587d                        |
| wsrep_cluster_status         | Primary                                                     |
| wsrep_connected              | ON                                                          |
| wsrep_local_bf_aborts        | 0                                                           |
| wsrep_local_index            | 0                                                           |
| wsrep_provider_name          | Galera                                                      |
| wsrep_provider_vendor        | Codership Oy <info@codership.com>                           |
| wsrep_provider_version       | 25.3.25(r3836)                                              |
| wsrep_ready                  | ON                                                          |
| wsrep_thread_count           | 2                                                           |
+------------------------------+-------------------------------------------------------------+

 

2.查看系统变量:SHOW VARIABLES like \'wsrep_%\'\G;

MariaDB [(none)]> SHOW VARIABLES like \'wsrep_%\'\G;
*************************** 1. row ***************************
Variable_name: wsrep_auto_increment_control
        Value: ON
*************************** 2. row ***************************
Variable_name: wsrep_causal_reads
        Value: OFF
*************************** 3. row ***************************
Variable_name: wsrep_certification_rules
        Value: strict
*************************** 4. row ***************************
Variable_name: wsrep_certify_nonpk
        Value: ON
*************************** 5. row ***************************
Variable_name: wsrep_cluster_address
        Value: gcomm://192.168.73.110,192.168.73.111,192.168.73.112
*************************** 6. row ***************************
Variable_name: wsrep_cluster_name
        Value: testcluster
*************************** 7. row ***************************
Variable_name: wsrep_convert_lock_to_trx
        Value: OFF
*************************** 8. row ***************************
Variable_name: wsrep_data_home_dir
        Value: /var/lib/mysql/
*************************** 9. row ***************************
Variable_name: wsrep_dbug_option
        Value: 
*************************** 10. row ***************************
Variable_name: wsrep_debug
        Value: OFF
*************************** 11. row ***************************
Variable_name: wsrep_desync
        Value: OFF
*************************** 12. row ***************************
Variable_name: wsrep_dirty_reads
        Value: OFF
*************************** 13. row ***************************
Variable_name: wsrep_drupal_282555_workaround
        Value: OFF
*************************** 14. row ***************************
Variable_name: wsrep_forced_binlog_format
        Value: NONE
*************************** 15. row ***************************
Variable_name: wsrep_load_data_splitting
        Value: ON
*************************** 16. row ***************************
Variable_name: wsrep_log_conflicts
        Value: OFF
*************************** 17. row ***************************
Variable_name: wsrep_max_ws_rows
        Value: 0
*************************** 18. row ***************************
Variable_name: wsrep_max_ws_size
        Value: 2147483647
*************************** 19. row ***************************
Variable_name: wsrep_mysql_replication_bundle
        Value: 0
*************************** 20. row ***************************
Variable_name: wsrep_node_address
        Value: 192.168.73.110
*************************** 21. row ***************************
Variable_name: wsrep_node_incoming_address
        Value: AUTO
*************************** 22. row ***************************
Variable_name: wsrep_node_name
        Value: node1
*************************** 23. row ***************************
Variable_name: wsrep_notify_cmd
        Value: 
*************************** 24. row ***************************
Variable_name: wsrep_on
        Value: ON
*************************** 25. row ***************************
Variable_name: wsrep_osu_method
        Value: TOI
*************************** 26. row ***************************
Variable_name: wsrep_provider
        Value: /usr/lib64/galera/libgalera_smm.so
*************************** 27. row ***************************
Variable_name: wsrep_provider_options
        Value: base_dir = /var/lib/mysql/; base_host = 192.168.73.110; base_port = 4567; cert.log_cOnflicts= no; cert.optimistic_pa = yes; debug = no; evs.auto_evict = 0; evs.causal_keepalive_period = PT1S; evs.debug_log_mask = 0x1; evs.delay_margin = PT1S; evs.delayed_keep_period = PT30S; evs.inactive_check_period = PT0.5S; evs.inactive_timeout = PT15S; evs.info_log_mask = 0; evs.install_timeout = PT7.5S; evs.join_retrans_period = PT1S; evs.keepalive_period = PT1S; evs.max_install_timeouts = 3; evs.send_window = 4; evs.stats_report_period = PT1M; evs.suspect_timeout = PT5S; evs.use_aggregate = true; evs.user_send_window = 2; evs.version = 0; evs.view_forget_timeout = P1D; gcache.dir = /var/lib/mysql/; gcache.keep_pages_size = 0; gcache.mem_size = 0; gcache.name = /var/lib/mysql//galera.cache; gcache.page_size = 128M; gcache.recover = no; gcache.size = 128M; gcomm.thread_prio = ; gcs.fc_debug = 0; gcs.fc_factor = 1.0; gcs.fc_limit = 16; gcs.fc_master_slave = no; gcs.max_packet_size = 64500; gcs.max_throttle = 0.25; gcs.recv_q_hard_limit = 9223372036854775807; gcs.recv_q_soft_limit = 0.25; gcs.sync_dOnor= no; gmcast.listen_addr = tcp://0.0.0.0:4567; gmcast.mcast_addr = ; gmcast.mcast_ttl = 1; gmcast.peer_timeout = PT3S; gmcast.segment = 0; gmcast.time_wait = PT5S; gmcast.version = 0; ist.recv_addr = 192.168.73.110; pc.announce_timeout = PT3S; pc.checksum = false; pc.ignore_quorum = false; pc.ignore_sb = false; pc.linger = PT20S; pc.npvo = false; pc.recovery = true; pc.version = 0; pc.wait_prim = true; pc.wait_prim_timeout = PT30S; pc.weight = 1; protonet.backend = asio; protonet.version = 0; repl.causal_read_timeout = PT30S; repl.commit_order = 3; repl.key_format = FLAT8; repl.max_ws_size = 2147483647; repl.proto_max = 9; socket.checksum = 2; socket.recv_buf_size = 212992; 
*************************** 28. row ***************************
Variable_name: wsrep_recover
        Value: OFF
*************************** 29. row ***************************
Variable_name: wsrep_replicate_myisam
        Value: OFF
*************************** 30. row ***************************
Variable_name: wsrep_restart_slave
        Value: OFF
*************************** 31. row ***************************
Variable_name: wsrep_retry_autocommit
        Value: 1
*************************** 32. row ***************************
Variable_name: wsrep_slave_fk_checks
        Value: ON
*************************** 33. row ***************************
Variable_name: wsrep_slave_threads
        Value: 1
*************************** 34. row ***************************
Variable_name: wsrep_slave_uk_checks
        Value: OFF
*************************** 35. row ***************************
Variable_name: wsrep_sst_auth
        Value: 
*************************** 36. row ***************************
Variable_name: wsrep_sst_donor
        Value: 
*************************** 37. row ***************************
Variable_name: wsrep_sst_donor_rejects_queries
        Value: OFF
*************************** 38. row ***************************
Variable_name: wsrep_sst_method
        Value: rsync
*************************** 39. row ***************************
Variable_name: wsrep_sst_receive_address
        Value: AUTO
*************************** 40. row ***************************
Variable_name: wsrep_start_position
        Value: 00000000-0000-0000-0000-000000000000:-1
*************************** 41. row ***************************
Variable_name: wsrep_sync_wait
        Value: 0
41 rows in set (0.00 s

 监测参数说明

监测状态说明
1. 集群完整性检查:
wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群.
wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值.
wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接.
wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况.
2. 节点状态检查:
wsrep_ready: 该值为ON,则说明可以接受SQL负载.如果为Off,则需要检查wsrep_connected.
wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群.(可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的.具体错误需要查看错误日志)
wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因.
3. 复制健康检查:
wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善.
wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多.
wsrep_flow_control_sent:表示该节点已经停止复制了多少次.
wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.

 

参考:https://blog.csdn.net/jeanette_zlj/article/details/79550690
参考:https://blog.51cto.com/11886307/2391974


推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
author-avatar
默然b并不是我的选择
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有