ThinkPHP经过了六年的发展,当前最新版本为3.0。最新版本提供了NoSQL、云技术、分布式支持,使得ThinkPHP的功能更加完善,能够满足大型Web应用的开发需求。ThinkPHP定位于轻量级,快速和简单是该框架的主要特点,这在本书后面的章节内容中将会明显地感受到。接下来首先对ThinkPHP处理MVC的流程作一个简单的介绍,加深对ThinkPHP的直观认识。......
2023-11-04
前面介绍过多数据库动态切换可以实现数据库读写分离,但这种方式是需要手动切换的,也就是说读的时候需要开发人员指定数据库,写的时候也是如此。事实上,ThinkPHP已经完美地解决了读写分离功能,本节将会详细介绍。
读写分离的本质是数据主从同步,所以要想真正实现读写分离,还必须要在数据库系统内首先实现主从同步复制。由于主从复制在每种数据库上实现的方式都不尽相同,而且涉及数据库系统知识,这不是本书介绍对象,所以接来下不会深入介绍数据库主从复制的原理,只简单介绍实现一个简单的数据库主从复制过程。
1.配置数据库主从复制
仍然以MySQL为例,介绍MySQL主从复制的配置过程。要实现MySQL主从复制,需要确保主MySQL服务器的版本号大于或等于从MySQL服务器的版本号,并且需要确保版本号大于5.1。除此之外还需要确保开启了数据库bin-log二进制日志和慢查询日志。前者是必需的,而后者是可选的,用于数据库维护和调优。
由于bin-log日志是主从复制的关键,所以这里有必要进行简单介绍(更多资料可以参阅MySQL官方手册或者相关书籍)。bin-log是MySQL数据库中非常有用的一种高级日志,它完全地记录了数据库系统对数据库所有的增、删、改、查行为,但不会记录服务器本身的健康状态。假设程序执行了select*from tpk_user where id=5语句,那么bin-log将会完整地记录,并且为该操作添加上position值。
所有bin-log日志默认存放于数据库存放目录里(默认为data或var),bin-log日志是一种二进制文件,使用一般的文本编辑器无法打开(如记事本、vi等)。MySQL提供了MySQLbinlog管理工具用于查看bin-log日志。利用bin-log存放完整SQL语句的特性,系统管理人员可以轻易地从bin-log日志中恢复数据。同样的原理,MySQL主从复制并不是真正地复制数据表中的信息,而是复制主数据库中的bin-log日志,然后再从这些日志中恢复数据,实现数据的复制。所以要实现主从复制首要前提就是开启bin-log日志,并且确保主从数据库之间的master bin-log日志中的position值相同。
下面将使用两台MySQL数据库服务器为例,简单介绍主从复制的过程,满足本章后续的学习需要。本例中主数据库的ip地址为192.168.2.1;从数据库的ip地址为192.168.2.2,读者可以使用虚拟机来模拟上述环境。下面首先配置主数据库。
(1)配置主MySQL服务器
前面多次提到要实现主从复制,首先需要开启bin-log日志功能,无论主服务器还是从服务器都一样。首先查看主服务器的bin-log日志状态。
如果结果为ON则表示bin-log日志已经处于激活状态,否则需要打开MySQL配置文件,开启bin-log功能,如以下代码所示。
作为主服务器,还需要配置服务器的server-id,该值是唯一性的,是主从服务的重要标识,通常情况下主服务器的server-id设置为1,如以下代码所示。
配置完成后,保存配置文件,重启MySQL数据库。至此,主服务器就基本配置完成了,剩下的只需要配置一个专用于同步数据的用户即可。为了安全,在此只赋给同步用户复制数据的权限,读者可以使用可视化的phpmyadmin来设置,也可以使用命令行操作,命令如下代码所示。
如果使用phpmyadmin管理工具,创建的用户只需要确保REPLICATION SLAVE被打“√”即可,如图7-6所示。
图7-6 选择REPLICATION SLAVE
通过前面的步骤,主服务器就配置完成了,最后将数据库tp中的表和数据导出,以便导入到从服务器,确保主从数据库中的数据一致。读者可以使用mysqldump导出,也可以使用phpmyadmin导出。mysqldump命令如下。
以上是Linux的导出路径,如果是Windows系统,需要做对应的更改。mysqldump工具位于MySQL安装路径的bin目录(例如/usr/local/mysql/bin)。(www.chuimin.cn)
(2)配置从MySQL服务器
首先创建一个数据库用于存放主数据库中的数据,这里将从服务器的数据库命名为tp(5.1.7后的版本需要确保主从一致),然后将前面导出的tp.sql数据导入到该数据库中,接着将tp.sql文件复制到从服务器上,最后执行导入步骤,如以下代码所示。
读者也可以使用可视化的phpmyadmin导入数据。但如果使用phpmyadmin导入时,主从数据库都需要使用reset master命令重置bin-log日志。
导入数据之后,根据前面讲述的方式查看是否已经启动bin-log日志。如果没有,需要打开配置文件开启bin-log日志功能,然后设置配置文件中的server-id为2,如以下代码所示。
修改配置文件后,需要重新启动MySQL,以便让新配置生效。最后进入MySQL命令行工具,执行同步操作,如以下代码所示。
现在可以使用show slave status命令查看同步状态,如果Slave_IO_Running和Slave_SQL_Running这两项都为yes则表示同步成功,如以下代码所示。
读者可以在主数据库中对tpk_user数据表进行增、删、改、查等操作,从数据库(192.168.2.10)中的tpk_user数据表同样也会跟着发生改变。接下来将结合ThinkPHP实现数据的读写分离。
提示:在5.1.7以前的版本中,从服务器的同步配置是需要在MySQL配置文件中进行配置的。但新版只需要在配置文件中配置server-id和指定需要同步的表及不需要同步的表,然后使用命令执行同步操作即可,这点与老版本区别较大,需要读者注意。
2.实现读写分离
前面只是配置了数据库主从同步功能,主从同步通常用于数据库读写分离。ThinkPHP提供了完善的读写分离功能,开发人员不需要手动切换数据库。什么时候读,什么时候写系统会自动判断。读数据时系统会操作从服务器,而写数据时系统会操作主服务器。最终由数据库实现同步,这就是一个最典型的数据库读写分离,下以将以前面配置好的两台主从数据库为例,详细介绍实现读写分离。
首先打开项目下的数据库配置文件,修改其中的数据库连接参数。要实现多数据库连接,只需要使用“,”分隔多台服务器即可,如以下代码所示。
如上述代码所示,要启用读写分离只需要设置DB_RW_SEPARATE为true即可。然后其他的配置信息和普通的配置信息相差不大。DB_HOST用于配置服务器ip,多个服务器使用“,”隔开,排在第1个位置的表示主服务器(即写入服务器),排在后面的默认都会被分配为从服务器(读服务器);DB_USER用于配置服务登录用户,顺序与DB_HOST相对应,如果分布式数据库所有登录用户都相同,可以只输入一个登录名即可;DB_PWD与DB_HOST配置过程一样,在此不再细述。
配置文件配置好后,现在就可以在动作中测试读写分离了,如以下代码所示。
add动作执行后,读者可以首先查看192.168.2.1主服务器,然后再观察192.168.2.10从服务器,可以看到这两台服务器的数据是同步更新的。通过读写分离,能够有效地提高数据库的负载能力。
有关PHP MVC开发实战的文章
ThinkPHP经过了六年的发展,当前最新版本为3.0。最新版本提供了NoSQL、云技术、分布式支持,使得ThinkPHP的功能更加完善,能够满足大型Web应用的开发需求。ThinkPHP定位于轻量级,快速和简单是该框架的主要特点,这在本书后面的章节内容中将会明显地感受到。接下来首先对ThinkPHP处理MVC的流程作一个简单的介绍,加深对ThinkPHP的直观认识。......
2023-11-04
和其他PHP MV框架一样,要使用ThinkPHP必须首先要安装和部署框架文件。ThinkPHP支持多种数据库驱动,包括PDO套件,接下来将通过ThinkPHP实现一个简单的MVC应用。这里将下载的版本为ThinkPHP 3.0,解压后ThinkPHP目录结构如图4-22所示。图4-23 ThinkPHP成功初始化项目......
2023-11-04
在这一过程中,开发人员需要对URL请求进行处理,例如安全检测、URL映射等,只能在运算进行前使用特定的文件进行拦截或处理。ThinkPHP的行为机制本质上是一种URL拦截处理机制,行为的引入把过去没有生命周期概念的PHP应用添加了生命周期的概念。图11-8 ThinkPHP行为执行过程内置行为是确保系统能够运行的基础,一般情况下开发人员不需要扩展内置的行为。如图11-8所示,项目首先执行的行为标签是app_init,一直到app_end标签,中间的标签有些有对应的行为,有些没有。......
2023-11-04
接下将继续以ThinkPHP 3.0为例,详细介绍在MVC的中SOAP服务端开发,步骤如下。然后在home项目中创建api控制器,该控制器用于SOAP服务绑定,首先创建article.wsdl服务绑定,如以下代码所示。图12-15 WSDL绑定出错接下来需要在article.wsdl文件中创建相应的操作及服务绑定。并且建立http://tp.localhost/index.php/api/Article服务绑定地址。至此,一个article.wsdl SOAP服务就创建完成了,接下来就可以使用专业的SOAP测试工具或者在PHP中直接调用该服务。......
2023-11-04
接下来将使用CodeIgniter实现一个简单的新闻列表,用户点击列表中的新闻标题将会进入新闻的正文页面,通过该例子演示CodeIgniter实现MVC开发的流程。在CodeIgniter中,控制器命名规则比较灵活,它不需要加前缀或后缀,一个普通的文件即可。......
2023-11-04
接下来将使用ThinkPHP创建一个简单的MVC网站应用。通过正确修改上述配置文件信息,现在ThinkPHP就可以操作MySQL数据库了。在ThinkPHP中无论是模型的文件名,还是模型的类名都必须遵循内建的文件规则。图4-24 ThinkPHP MVC运行效果 说明:在ThinkPHP 3.0以前的版本中,视图还有主题的概念,所谓的主题是为了使网站更好地应用多模板、多风格。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
对于普通的开发者而言,最需要关注Lib目录及Extend目录,接下来分别进行介绍。由于ThinkPHP遵循Apache 2.0协议,意味着PHP开发人员可以通过修改ThinkPHP源代码,以便更适合自己的开发需求,这就要求开发人员必须要对Extend目录下的扩展类库要有深入的认识。......
2023-11-04
相关推荐