php怎么解压到目录,PHP的运行环境难配置吗?
PHP的运行环境不难配置!下面是个案例:
PHP开发环境配置(Windows版)
Apache+MySQL+PHP+phpMyAdmin
系统:Windows XP
Step1:下载以下文件
(1)php-5.2.0-Win32.zip
pecl-5.2.0-Win32.zip
(2)apache_2.2.3-win32-x86-no_ssl.msi
(3)mysql-5.1.12-beta-win32.zip
(4)phpMyAdmin-2.9.1.1-all-languages.zip
Step2:安装PHP, 配置php.ini
有两种方法在 Windows下安装PHP:手工安装或者使用安装程序安装。自动安装的安装程序php-5.2.0-win32-installer.msi不包含任何外部的PHP扩展(PHP_*.dll)。如果需要,可以在 Windows ZIP 包和 PECL 中找到。据PHP官方手册上称安装 PHP 最好的选择是手工安装。在手工安装中安装 PHP 最好的方式便是将所有 PHP 有关的文件都放入同一目录,并在系统的 PATH 环境变量中设置此目录。本例为手工安装.
1. 将下载的php-5.2.0-Win32.zip解压到C:\PHP\ 这个目录.
2. 再将C:\PHP\ 目录下的*.dll和 C:\PHP\ext目录下的所有文件文件复制粘贴到C:\windows\system32\下.
如果需要更多扩展,就将pecl-5.2.0-Win32.zip中的文件也放到C:\windows\system32\下.
3. 配置php.ini。
在ZIP 包中有两个ini文件,php.ini-dist和php.ini-recommended。建议使用 php.ini-recommended,因为在该文件中优化了性能和安全。复制所选择的 ini 文件到 PHP 能找到的目录中,并将其重命名为 php.ini 。
再用记事本打开 php.ini ,查找register_globals = Off,把off改成On.
再查找short_open_tag = Off,把off改成On有一处.
再查找extension_dir = "./" 改为 extension_dir = "C:\PHP\ext"
然后再查找;extension=php_mbstring.dll,把前面的分号去掉.
extension=php_mbstring.dll(不选这个phpMyAdmin会错)
以下几个dll作相同更改.
extension=php_dba.dll
extension=php_dbase.dll
extension=php_filepro.dll 可选
extension=php_gd2.dll 支持GD库的,一般要选
extension=php_imap.dll 可选
extension=php_ldap.dll
extension=php_mysql.dll 支持MySQL的
接下来修改了一些文件上传以及内存使用最大限制:
memory_limit = 20M ;内存容量
post_max_size = 20M ;闪存容量
upload_max_filesize = 20M ; 附件容量
asp_tags = On ;可选,On允许ASP风格的标记,Off禁止
4. 将 PHP 目录添加到 PATH 环境变量中
系统环境变量path=C:\php
5. 使 php.ini 文件在 Windows下被 PHP 所用
系统环境变量PHPRC=C:\php
Step3: 安装Apache,配置 httpd.conf 使之支持PHP
1.安装apache_2.2.3-win32-x86-no_ssl.msi,一路按Next即可.
安装完成后输入[url]http://localhost[/url] 查看Apache是否安装成功.
(如果安装了IIS请关闭,或者请改变安装端口,不然无法启动Apache服务)
2. 打开文件C:\Apache2\conf\httpd.conf,查找以下设置项.
即注册文件后缀.
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
AddType application/x-httpd-php .php .phtml .php3 .php4
AddType application/x-httpd-php-source .phps
</Directory>
绿色为我们新增的设置.
3.查找LoadModule模块
LoadModule php5_module "C:/ php/php5apache2_2.dll"
注意斜杠方向与Windows中路径”\”相反.
4.查找以下,并增加index.php
根据需要还可以增加其它自定义首页如index.htm
<IfModule dir_module>
DirectoryIndex index.html index.html.var index.php
</IfModule>
5. 查找 Documentroot "C:/Apache2/htdocs" 将其改为你的WEB路径; (这里是WEB主目录,可以不修改)
6.重启apache.
7. 在web根目录 C:\Apache2\htdocs\ 下新建index.php,内容如下:
<?php
phpinfo();
?>
在浏览器中输入URL: [url]http://localhost/index.php[/url] 测试结果.
如果不能正常运行,请检查配置.
Step4: 安装MySQL
MySQL安装过程
注意:安装中,一定要正确配置MySQL Server
安装完成后,新建conn.php
<?php
$link=mysql_connect('localhost','root','root');
if(!$link) echo "MySQL 数据库连接失败";
else echo "MySQL 数据库连接成功!";
mysql_close();
?>
运行该文件,测试数据库连接.
Step5:安装phpMyAdmin配置config.inc.php
phpMyAdmin并不是必需的,只是为了方便管理MySQL数据库,本身是用PHP编写而成.但是有了它,会大方便MySQL数据库管理.
1. 解压phpMyAdmin-2.9.1.1-all-languages.zip到C:\phpMyAdmin
2. 将C:\phpMyAdmin\config.sample.inc.php重命名为config.inc.php
3. 对照原文件进行如下更改,绿色为新增的.
$cfg['blowfish_secret'] = 'root';
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'root';
4. 将C:\phpMyAdmin\下所有文件和目录复制到
C:\Apache\htdocs\phpMyAdmin,
在浏览器中输入[url]http://localhost/phpMyAdmin/index.php[/url]进行测试
如何搭建内网服务器?
1. 需求理解
从题主的问题中,我们可以捕获到以下信息:现有的设备资源是一台普通电脑;目的是搭建一个文件服务器,实现内网的文件共享;文件共享需要加入权限验证,合理管控;服务器需要实现备份功能,异常时可以直接还原;题主的需求还是非常普遍典型的,简单来说就是一台普通电脑如何作为一台内网可控的文件服务器使用,下面我们就来解答一下。
2. 系统选型
由于是作为服务器使用,我们推荐使用服务器专用的操作系统。现在的服务器系统主要是Windows Server和Linux发行版。Windows Server使用上比较方便,Linux发行版需要一定的命令基础。考虑到题主的实际需求比较简单,Windows Server就可以满足了。这里我们推荐目前比较主流的Windows Server 2016作为服务器系统使用。
3. 文件服务搭建流程
4. Windows Server 2016设置共享步骤
设置文件夹共享权限设置部门权限5. 备份策略
百度搜索“微力同步”工具,根据官网相关指引即可完成文件的备份同步工作。
6.其他方案:
题主这个诉求,其实也可以通过一些现成的工具来解决。例如我们自己现在就用了有度即时通的网盘功能替代了。
建好分区后,可以设置分区的用户以及用户权限
有度即时通-打造企业专属的高效工作交流平台,欢迎政企单位体验使用!
Java开发分库分表需要解决的问题及mycat是怎样实现分库分表的?
MySQL的使用场景中,读写分离只是方案中的一部分,想要扩展,势必会用到分库分表,可喜的是Mycat里已经做到了,今天花时间测试了一下,感觉还不错。
关于分库分表
当然自己也理了一下,分库分表的这些内容,如果分成几个策略或者阶段,大概有下面的几种。
最上面的第一种是直接拆表,比如数据库db1下面有test1,test2,test3三个表,通过中间件看到的还是表test,里面的数据做了这样的拆分,能够在一定程度上分解压力,如果细细品来,和分区表的套路有些像。
接下来的几类也是不断完善,把表test拆解到多个库中,多个服务器中,如果做了读写分离,全套的方案这样的拆解改进还是很大的。如此来看,数据库中间件做了很多应用和数据库之间的很多事情,能够流行起来除了技术原因还是有很多其他的因素。
分库分表的测试环境模拟
如果要在一台服务器上测试分库分表,而且要求架构方案要全面,作为技术可行性的一个判定参考,是否可以实现呢。
如果模拟一主两从的架构,模拟服务分布在3台服务器上,这样的方案需要创建9个实例,每个实例上有3个db需要分别拆分。
大体的配置如下:
master1: 端口33091
(m1)slave1: 端口33092
(m1)slave2: 端口33093
master2: 端口33071
(m2)slave1: 端口33072
(m2)slave2: 端口33073
master3: 端口33061
(m3)slave1: 端口33062
(m3)slave2: 端口33063
画个图来说明一下,其中db1,db2,db3下面有若干表,需要做sharding
所以我们需要模拟的就是这个事情。
使用Mycat碰到的几个小问题解惑
使用Mycat的时候碰到了几个小问题,感觉比较有代表性,记录了一下。
问题1:
首先是使用Mycat连接到数据库之后,如果不切换到具体的数据库下,使用[数据库名].[表名]的方式会抛出下面的错误,可见整个过程中,Mycat拦截了SQL信息做了过滤,在转换的时候找不到目标路由。当然实际使用中,规范使用肯定不会有这个问题。
mysql> select * from db1.shard_auto;
ERROR 1064 (HY000): find no Route:select * from db1.shard_auto
问题2:
在配置了sharding策略之后,insert语句抛出了下面的错误,这个是对语法的一个基本的要求。
mysql> insert into shard_mod_long values(1,'aa',date);
ERROR 1064 (HY000): partition table, insert must provide ColumnList
问题3:
如果sharding策略配置有误,很可能出现表访问正常,但是DML会有问题,提示数据冲突了。至于如何配置sharding,下面会讲。
mysql> select * from shard_mod_long;
Empty set (0.00 sec)
mysql> insert into shard_mod_long(ID,name,shard_date) values(1,'aa',current_date);
ERROR 1105 (HY000): Duplicate entry '1' for key 'PRIMARY'
问题4:
如果sharding的配置有误,很可能出现多份冗余数据。
查看执行计划就一目了然,通过data_node可以看到数据指向了多个目标库。
mysql> explain insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date);
+-----------+------------------------------------------------+
| DATA_NODE | SQL |
+-----------+------------------------------------------------+
| pxcNode11 | insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date) |
| pxcNode21 | insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date) |
| pxcNode31 | insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date) |
+-----------+------------------------------------------------+
这种情况如果有一定的需求还是蛮不错的,做sharding可惜了。问题就在于下面的这个table配置。
<table name="shard_auto" primaryKey="ID" type="global" dataNode="pxcNode11,pxcNode21,pxcNode31" rule="auto-sharding-long" />
需要去掉 type="global"的属性,让它sharding。
Mycat里面的sharding策略
Mycat的分片策略很丰富,这个是超出自己的预期的,也是Mycat的一大亮点。
大体分片规则如下,另外还有一些其他分片方式这里不全部列举:
(1)分片枚举:sharding-by-intfile
(2)主键范围:auto-sharding-long
(3)一致性hash:sharding-by-murmur
(4)字符串hash解析:sharding-by-stringhash
(5)按日期(天)分片:sharding-by-date
(6)按单月小时拆分:sharding-by-hour
(7)自然月分片:sharding-by-month
在开始之前,我们要创建下面的表来模拟几个sharding的场景,表名根据需求可以改变。
create table shard_test(ID int primary key, name varchar(20),shard_date date);
主键范围分片
主键范围分片是参考了主键值,按照主键值的分布来分布数据库在不同的库中,我们先在对应的sharding节点上创建同样的表结构。
关于sharding的策略,需要修改rule.xml文件。
常用的sharding策略已经在Mycat里面实现了,如果要自行实现也可以定制。比如下面的规则,是基于主键字段ID来做sharding,分布的算法是rang-long,引用了function rang-long,这个function是在对应的一个Java类中实现的。
<tableRule name="auto-sharding-long">
<rule>
<columns>ID</columns>
<algorithm>rang-long</algorithm>
</rule>
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
当然主键的范围是不固定的,可以根据需求来定制,比如按照一百万为单位,或者1000位单位,文件是 autopartition-long.txt 文件的内容默认如下,模板里是分为了3个分片,如果要定制更多的就需要继续配置了,目前来看这个配置只能够承载15亿的数据量,可以根据需求继续扩展定制。
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2
插入一些数据来验证一下,我们可以查看执行计划来做基本的验证,配置无误,数据就根据规则流向了指定的数据库下的表里。
mysql> explain insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date);
+-----------+------------------------------------------------+
| DATA_NODE | SQL |
+-----------+------------------------------------------------+
| pxcNode11 | insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date) |
+-----------+------------------------------------------------+
还有一个查看sharding效果的小方法,比如我插入一个极大的值,保证和其他数据不在一个分片上,我们运行查询语句两次,结果会有点变化。
sharing的效果
mysql> select * from shard_auto;
+---------+------+------------+
| ID | name | shard_date |
+---------+------+------------+
| 1 | aa | 2017-09-06 |
| 2 | bb | 2017-09-06 |
| 5000001 | aa | 2017-09-06 |
+---------+------+------------+
3 rows in set (0.00 sec)
稍作停顿,继续运行。
mysql> select * from shard_auto;
+---------+------+------------+
| ID | name | shard_date |
+---------+------+------------+
| 5000001 | aa | 2017-09-06 |
| 1 | aa | 2017-09-06 |
| 2 | bb | 2017-09-06 |
+---------+------+------------+
3 rows in set (0.01 sec)
Hash分片
Hash分片其实企业级应用尤其广泛,我觉得一个原因是通过这种数据路由的方式,得到的数据情况是基本可控的,和业务的关联起来比较直接。很多拆分方法都是根据mod方法来平均分布数据。
sharding的策略在rule.xml里面配置,还是默认的mod-long规则,引用了算法mod-long,这里是根据sharding的节点数来做的,默认是3个。
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-how many data nodes -->
<property name="count">3</property>
</function>
比如查看两次insert的结果情况。
mysql> explain insert into shard_mod_long(ID,name,shard_date) values(4,'dd',current_date);
+-----------+------------------------------------------------+
| DATA_NODE | SQL |
+-----------+------------------------------------------------+
| pxcNode22 | insert into shard_mod_long(ID,name,shard_date) values(4,'dd',current_date) |
+-----------+------------------------------------------------+
mysql> explain insert into shard_mod_long(ID,name,shard_date) values(5,'ee',current_date);
+-----------+------------------------------------------------+
| DATA_NODE | SQL |
+-----------+------------------------------------------------+
| pxcNode23 | insert into shard_mod_long(ID,name,shard_date) values(5,'ee',current_date) |
+-----------+------------------------------------------------+
可以看到数据还是遵循了节点的规律,平均分布。
至于schema.xml的配置,是整个分库的核心,我索性也给出一个配置来,供参考。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-定义MyCat的逻辑库 -->
<schema name="db1" checkSQLschema="false" sqlMaxLimit="100" >
<table name="shard_mod_long" primaryKey="ID" type="global" dataNode="pxcNode11,pxcNode21,pxcNode31" rule="mod-long" />
<table name="shard_auto" primaryKey="ID" type="global" dataNode="pxcNode11,pxcNode21,pxcNode31" rule="auto-sharding-long" />
</schema>
<!-定义MyCat的数据节点 -->
<dataNode name="pxcNode11" dataHost="dtHost" database="db1" />
<dataNode name="pxcNode21" dataHost="dtHost2" database="db1" />
<dataNode name="pxcNode31" dataHost="dtHost3" database="db1" />
<!-定义数据主机dtHost,连接到MySQL读写分离集群 ,schema中的每一个dataHost中的host属性值必须唯一-->
<!-dataHost实际上配置就是后台的数据库集群,一个datahost代表一个数据库集群 -->
<!-balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡-->
<!-writeType="0",所有写操作发送到配置的第一个writeHost,这里就是我们的hostmaster,第一个挂了切到还生存的第二个writeHost-->
<dataHost name="dtHost" maxCon="500" minCon="20" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--心跳检测 -->
<heartbeat>show slave status</heartbeat>
<!--配置后台数据库的IP地址和端口号,还有账号密码 -->
<writeHost host="hostMaster" url="192.168.163.128:33091" user="mycat_user" password="mycat" />
</dataHost>
<dataHost name="dtHost2" maxCon="500" minCon="20" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--心跳检测 -->
<heartbeat>show slave status</heartbeat>
<!--配置后台数据库的IP地址和端口号,还有账号密码 -->
<writeHost host="hostMaster" url="192.168.163.128:33071" user="mycat_user" password="mycat" />
</dataHost>
<dataHost name="dtHost3" maxCon="500" minCon="20" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--心跳检测 -->
<heartbeat>show slave status</heartbeat>
<!--配置后台数据库的IP地址和端口号,还有账号密码 -->
<writeHost host="hostMaster" url="192.168.163.128:33061" user="mycat_user" password="mycat" />
</dataHost>
</mycat:schema>
=================================================================================================
用Mycat,学会数据库读写分离、分表分库
php疑难杂症铺 2017-09-13 14:31用Mycat,学会数据库读写分离、分表分库
系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。Mycat是一个广受好评的数据库中间件,已经在很多产品上进行使用了。希望通过这篇文章的介绍,能学会Mycat的使用。
安装
Mycat官网:http://www.mycat.io/
可以了解下Mycat的背景和应用情况,这样使用起来比较有信心。
Mycat下载地址:http://dl.mycat.io/
官网有个文档,属于详细的介绍,初次入门,看起来比较花时间。
下载:
建议大家选择 1.6-RELEASE 版本,毕竟是比较稳定的版本。
安装:
根据不同的系统选择不同的版本。包括linux、windows、mac,作者考虑还是非常周全的,当然,也有源码版的。(ps:源码版的下载后,只要配置正确,就可以正常运行调试,这个赞一下。)
Mycat的安装其实只要解压下载的目录就可以了,非常简单。
安装完成后,目录如下:
目录说明binmycat命令,启动、重启、停止等catletcatlet为Mycat的一个扩展功能confMycat 配置信息,重点关注libMycat引用的jar包,Mycat是java开发的logs日志文件,包括Mycat启动的日志和运行的日志。配置
Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:
文件说明server.xmlMycat的配置文件,设置账号、参数等schema.xmlMycat对应的物理数据库和数据库表的配置rule.xmlMycat分片(分库分表)规则Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。
我们现在做一个主从、读写分离,简单分表的示例。结构如下图:
服务器IP说明Mycat192.168.0.2mycat服务器,连接数据库时,连接此服务器database1192.168.0.3物理数据库1,真正存储数据的数据库database2192.168.0.4物理数据库2,真正存储数据的数据库Mycat作为主数据库中间件,肯定是与代码弱关联的,所以代码是不用修改的,使用Mycat后,连接数据库是不变的,默认端口是8066。连接方式和普通数据库一样,如:jdbc:mysql://192.168.0.2:8066/
server.xml
示例
重点关注下面这段,其他默认即可。
参数说明user用户配置节点--name登录的用户名,也就是连接Mycat的用户名--password登录的密码,也就是连接Mycat的密码--schemas数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs--privileges配置用户针对表的增删改查的权限,具体见文档吧我这里配置了一个账号test 密码也是test,针对数据库lunch,读写权限都有,没有针对表做任何特殊的权限。
schema.xml
schema.xml是最主要的配置项,首先看我的配置文件。
参数说明schema数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应dataNode分片信息,也就是分库相关配置dataHost物理数据库,真正存储数据的数据库每个节点的属性逐一说明:
schema:
属性说明name逻辑数据库名,与server.xml中的schema对应checkSQLschema数据库前缀相关设置,建议看文档,这里暂时设为folsesqlMaxLimitselect 时默认的limit,避免查询全表table:
属性说明name表名,物理数据库中表名dataNode表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的nameprimaryKey主键字段名,自动生成主键时需要设置autoIncrement是否自增rule分片规则名,具体规则下文rule详细介绍dataNode
属性说明name节点名,与table中dataNode对应datahost物理数据库名,与datahost中name对应database物理数据库中数据库名dataHost
属性说明name物理数据库名,与dataNode中dataHost对应balance均衡负载的方式writeType写入方式dbType数据库类型heartbeat心跳检测语句,注意语句结尾的分号要加。应用场景
数据库分表分库
配置如下:
我在192.168.0.2、192.168.0.3均有数据库lunch。
lunchmenu、restaurant、userlunch、users这些表都只写入节点dn1,也就是192.168.0.2这个服务,而dictionary写入了dn1、dn2两个节点,也就是192.168.0.2、192.168.0.3这两台服务器。分片的规则为:mod-long。
主要关注rule属性,rule属性的内容来源于rule.xml这个文件,Mycat支持10种分表分库的规则,基本能满足你所需要的要求,这个必须赞一个,其他数据库中间件好像都没有这么多。
table中的rule属性对应的就是rule.xml文件中tableRule的name,具体有哪些分表和分库的实现,建议还是看下文档。我这里选择的mod-long就是将数据平均拆分。因为我后端是两台物理库,所以rule.xml中mod-long对应的function count为2,见下面部分代码:
数据库读写分离
配置如下:
这样的配置与前一个示例配置改动如下:
删除了table分配的规则,以及datanode只有一个
datahost也只有一台,但是writehost总添加了readhost,balance改为1,表示读写分离。
以上配置达到的效果就是102.168.0.2为主库,192.168.0.3为从库。
注意:Mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writehost,需要通过mycat的主从复制将数据复制到readhost,这个问题当时候我纠结了好久,数据写入writehost后,readhost一直没有数据,以为是自己配置的问题,后面才发现Mycat就没有实现主从复制的功能,毕竟数据库本身自带的这个功能才是最高效稳定的。
至于其他的场景,如同时主从和分表分库也是支持的了,只要了解这个实现以后再去修改配置,都是可以实现的。而热备及故障专业官方推荐使用haproxy配合一起使用,大家可以试试。
使用
Mycat的启动也很简单,启动命令在Bin目录:
如果在启动时发现异常,在logs目录中查看日志。
wrapper.log 为程序启动的日志,启动时的问题看这个
mycat.log 为脚本执行时的日志,SQL脚本执行报错后的具体错误内容,查看这个文件。mycat.log是最新的错误日志,历史日志会根据时间生成目录保存。
mycat启动后,执行命令不成功,可能实际上配置有错误,导致后面的命令没有很好的执行。
Mycat带来的最大好处就是使用是完全不用修改原有代码的,在mycat通过命令启动后,你只需要将数据库连接切换到Mycat的地址就可以了。如下面就可以进行连接了:
连接成功后可以执行sql脚本了。
所以,可以直接通过sql管理工具(如:navicat、datagrip)连接,执行脚本。我一直用datagrip来进行日常简单的管理,这个很方便。
Mycat还有一个管理的连接,端口号是9906.
连接后可以根据管理命令查看Mycat的运行情况,当然,喜欢UI管理方式的人,可以安装一个Mycat-Web来进行管理,有兴趣自行搜索。
简而言之,开发中使用Mycat和直接使用Mysql机会没有差别。
常见问题
使用Mycat后总会遇到一些坑,我将自己遇到的一些问题在这里列一下,希望能与大家有共鸣:
Mycat是不是配置以后,就能完全解决分表分库和读写分离问题?
Mycat配合数据库本身的复制功能,可以解决读写分离的问题,但是针对分表分库的问题,不是完美的解决。或者说,至今为止,业界没有完美的解决方案。
分表分库写入能完美解决,但是,不能完美解决主要是联表查询的问题,Mycat支持两个表联表的查询,多余两个表的查询不支持。 其实,很多数据库中间件关于分表分库后查询的问题,都是需要自己实现的,而且节本都不支持联表查询,Mycat已经算做地非常先进了。
分表分库的后联表查询问题,大家通过合理数据库设计来避免。
Mycat支持哪些数据库,其他平台如 .net、PHP能用吗?
官方说了,支持的数据库包括MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,很赞。
尽量用Mysql,我试过SQL Server,会有些小问题,因为部分语法有点差异。
Mycat 非JAVA平台如 .net、PHP能用吗?
可以用。这一点MyCat做的也很棒。
如何将html打包成一个app?
以下内容由“健谈IT”回答
前端开发技术蓬勃发展,手机性能不断优化提高,目前有些场景完全可以采用Web开发好页面,然后“加壳”打包成手机APP。目前,有很多混合开发的框架,比如cordova、HBuilder等,在使用这些技术开发APP时,可以使用其内置的打包功能。
但有一些场合,对于一些功能少、项目比较小的APP,完全可以利用WebView控件自己进行打包。下面给出一个案例:如下图,是github上的一个开源的分页插件。我们以此为案例演示整个过程。
我们下载项目,里面有个
nofresh.html
文件,如下图所示。接下来我们正式开始打包步骤:
一、使用Eclipse建立一个Android项目使用Eclipse新建一个Android项目,当然,使用Android studio也可以的。
将HTML项目复制到Android项目中将下载的motypager插件复制粘贴到Android项目的assets文件夹里面。
修改layout文件,加入WebView控件在
activity_main.xml
的布局文件中,加入一个WebView控件,如下:使用WebView打开HTML页面在MainActivity中的OnCreate方法中使用WebView加载打开指定的HTML页面。需要注意的是:页面地址格式是以file:///android_asset开始,后面是你HTML页面的相对地址
打包完成上面的步骤之后,基本上一个最基本的项目就建立好了。接下来就是将项目打包成apk文件,也就是手机APP的安装包。
在项目文件夹上右击,弹出的菜单选择Export
然后选择下图所示项
此时需要你生成一个打包的keystore,选择好key的保存地址,然后输入2次密码
然后输入key的基本信息
然后输入完成这一切之后,就能选择保存apk文件了
可以看到在桌面上生成了刚才的key和APP安装包文件
在手机上安装测试到此为止,一个HTML页面就成功打包成APP了。虽然步骤繁琐,但是整个过程是我们自己可控的。希望我的回答对你有所步骤,如果喜欢,请关注我:“健谈IT”
网站怎么备份?
网站部署到线上后,基本上都是全天候提供Web服务的,服务器在公网7x24小时运行中,难免会遇到一些问题,比如:硬件损坏、人为误操作、黑客攻击。所以说数据在服务器上是存在损坏、丢失风险的,此时备份机制就很重要了。
一个网站程序主要由两部分构成:程序源码+数据库,下面分别说下如何给源码和数据库备份。
数据库备份不同数据库的备份操作不同,但大体类似,备份方式主要有两种:
将结构及数据导出为SQL文件;
直接备份数据库物理文件,这种方式备份时建议先停止数据库服务。
以MySQL为例,我们可以通过数据库管理工具Navicat来备份(此工具支持各类主流数据库),如下图示:
另外还可以通过phpMyAdmin这款Web版MySQL管理工具进行数据备份,如下图示:
源码及文件备份源码也是文件的一种,对于文件类备份有很多方案供大家参考:
1、Rsync + Inotify 实时增量备份
借助Linux的Inotify特性可以监控文件系统,一旦发生了文件变化就及时通知Rsync进行数据备份。这种模式更多用于主从服务器上的文件同步备份操作。
2、借助FTP工具管理文件
不管是Windows Server还是Linux,都可以在服务器上安装FTP服务器端工具(FileZilla Server),然后用户通过FTP客户端工具即可连接上服务器进行文件操作。
3、通过系统定时任务执行备份操作
比如在Linux系统上,我们可以通过 Crontab + Shell + tar 来定时备份文件,这种可以做到无人值守式备份。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!