php主从数据库操作 mysql主从数据库搭建

php opencart怎么进行数据库操作

1,根目录下config.php中定义了数据库信息:

创新互联建站是一家专注于网站设计、成都网站制作与策划设计,江阳网站建设哪家好?创新互联建站做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:江阳等地区。江阳做网站价格咨询:18982081108

// DB

define('DB_DRIVER', 'mysqli');

define('DB_HOSTNAME', 'localhost');

define('DB_USERNAME', 'root');

define('DB_PASSWORD', 'qqqq');

define('DB_DATABASE', 'qqqq');

define('DB_PORT', '3306');

define('DB_PREFIX', 'oc_');

2,systemlibrary文件夹下db.php中定义了DB类,数据库的连接方法

$this-db = new $class($hostname, $username, $password, $database, $port);

3,index.php中初始化数据库连接

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT);

4,controller中调用model层定义的查询函数

$layout_id = $this-model_catalog_category-getCategoryLayoutId(end($path));

5,model层getCategoryLayoutId函数中返回查询sql结果

$query = $this-db-query("SELECT * FROM " . DB_PREFIX . "category_to_layout WHERE category_id = '" . (int)$category_id . "' AND store_id = '" . (int)$this-config-get('config_store_id') . "'");

PHP中高级面试题 – 第三天

一、简述一下MongoDB的应用场景

mongodb 支持副本集、索引、自动分片,可以保证较高的性能和可用性。

更高的写入负载

默认情况下,MongoDB 更侧重高数据写入性能,而非事务安全,MongoDB 很适合业务系统中有大量 “低价值” 数据的场景。但是应当避免在高事务安全性的系统中使用 MongoDB,除非能从架构设计上保证事务安全。

高可用性

MongoDB 的复副集 (Master-Slave) 配置非常简洁方便,此外,MongoDB 可以快速响应的处理单节点故障,自动、安全地完成故障转移。这些特性使得 MongoDB 能在一个相对不稳定(如云主机)的环境中,保持高可用性。

数据量很大或者未来会变得很大

依赖数据库 (MySQL) 自身的特性,完成数据的扩展是较困难的事,在 MySQL 中,当一个单达表到 5-10GB 时会出现明显的性能降级,此时需要通过数据的水平和垂直拆分、库的拆分完成扩展,使用 MySQL 通常需要借助驱动层或代理层完成这类需求。而 MongoDB 内建了多种数据分片的特性,可以很好地适应大数据量的需求。

基于位置的数据查询

MongoDB 支持二维空间索引,因此可以快速及精确地从指定位置获取数据。

表结构不明确

在一些传统 RDBMS 中,增加一个字段会锁住整个数据库 / 表,或者在执行一个重负载的请求时会明显造成其它请求的性能降级。通常发生在数据表大于 1G 的时候(当大于 1TB 时更甚)。 因 MongoDB 是文档型数据库,为非结构货的文档增加一个新字段是很快速的操作,并且不会影响到已有数据。另外一个好处当业务数据发生变化时,是将不再需要由 DBA 修改表结构。

二、数据库设计经验,为什么进行分表?分库?一般多少数据量开始分表?分库?分库分表的目的?

1、为什么要分表

当一张表的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。

分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。

2、分表的方案

做 mysql 集群,有人会问 mysql 集群,根分表有什么关系吗?虽然它不是实际意义上的分表,但是它启到了分表的作用,做集群的意义是什么呢?为一个数据库减轻负担,说白了就是减少 sql 排队队列中的 sql 的数量,举个例子:有 10 个 sql 请求,如果放在一个数据库服务器的排队队列中,他要等很长时间,如果把这 10 个 sql 请求,分配到 5 个数据库服务器的排队队列中,一个数据库服务器的队列中只有 2 个,这样等待时间是不是大大的缩短了呢?

linux mysql proxy 的安装,配置,以及读写分离

mysql replication 互为主从的安装及配置,以及数据同步

优点:扩展性好,没有多个分表后的复杂操作(php 代码)

缺点:单个表的数据量还是没有变,一次操作所花的时间还是那么多,硬件开销大。

三、简述一下数据库主从复制,读写分离

* 什么是主从复制

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;

* 主从复制的原理:

1.数据库有个bin-log二进制文件,记录了所有的sql语句。

2.只需要把主数据库的bin-log文件中的sql语句复制。

3.让其从数据的relay-log重做日志文件中再执行一次这些sql语句即可。

* 主从复制的作用

1.做数据的热备份,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。

2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问频率,提高单机的I/O性能

3.主从复制是读写分离的基础,使数据库能制成更大 的并发。例如子报表中,由于部署报表的sql语句十分慢,导致锁表,影响前台的服务。如果前台服务使用master,报表使用slave,那么报表sql将不会造成前台所,保证了前台的访问速度。

* 主从复制的几种方式:

1.同步复制:所谓的同步复制,意思是master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。

2.异步复制:如同AJAX请求一样。master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。

3.半同步复制:master只保证slaves中的一个操作成功,就返回,其他slave不管。

这个功能,是由google为MYSQL引入的。

* 关于读写分离

在完成主从复制时,由于slave是需要同步master的。所以对于insert/delete/update这些更新数据库的操作,应该在master中完成。而select的查询操作,则落下到slave中。

php中选择打开数据库的方法是

在mysql数据库中,创建一个test数据库,用于测试。

请点击输入图片描述

新建一个php文件,命名为test.php,用于讲解php如何选择要操作的数据库。

请点击输入图片描述

在test.php文件中,使用header()方法将页面的编码格式设置为utf-8,避免输出中文乱码。

请点击输入图片描述

在test.php文件中,使用mysql_connect()函数,通过账号和密码创建一个数据库的连接。

请点击输入图片描述

在test.php文件中,再使用mysql_select_db()函数选择要操作的数据库test,选择数据库成功,则返回true,否则,返回false。最后,通过if语句判断结果。

请点击输入图片描述

在浏览器打开test.php文件,查看结果。

请点击输入图片描述

END

总结:

1、创建一个test数据库。

2、使用mysql_connect()函数创建一个数据库的连接。

3、再使用mysql_select_db()函数选择要操作的数据库test,并通过if语句判断结果。

ThinkPHP怎么处理一对多关系的主从表的增删改

主从表的数据增删改,是由服务器的数据库配置来操作的.不需要php做处理的.

如果你讲的是同一个库,不同表之间有关联的话.只需要执行多句sql语句就好了(删除类的,如果表支持事务就更好了)

php数据库添加、删除、修改数据(mysql)

一、PHP操作MySql数据库

新增数据

?php

$query

=

"INSERT

INTO

grade

(name,email,point,regdate)

VALUE

('

李三','yc60.com@gmail.com',,NOW())"

;

@mysql_query($query)

or

die(

'添加数据出错:'

.mysql_error());

?

修改数据

?php

$query

=

"UPDATE

grade

SET

name='小可爱'

WHERE

id=6"

;

@mysql_query($query)

or

die(

'修改出错:'

.mysql_error());

?

删除数据

?php

$query

=

"DELETE

FROM

grade

WHERE

id=6";

@mysql_query($query)

or

die(

'删除错误:'

.mysql_error());

?

显示数据

?php

$query

=

"SELECT

id,name,email,point

FROM

grade";

$result

=

@mysql_query($query)

or

die(

'查询语句出错:'

.mysql_error());

while

(!!

$row

=

mysql_fetch_array($result))

{

echo

$row[

'id'

].

'----'

.$row['name'

].'----'

.$row

['email'

].

'----'

.$row['point'

];

echo

'br

/

';

}

?

二、其他常用函数

mysql_f

etch_row()

:从结果集中取得一行作为枚举数组

mysql_f

etch_assoc()

从结果集中取得一行作为关联数组

mysql_f

etch_array()

从结果集中取得一行作为关联数组,或数字数组,或二者兼有

mysql_f

etch_lengths

()

取得结果集中每个输出的长度

mysql_f

ield_name():

取得结果中指定字段的字段名

mysql_num_rows():

取得结果集中行的数目

mysql_num_f

ields():取得结果集中字段的数目

mysql_get_client_inf

o()

取得

MySQL

客户端信息

mysql_get_host_info():

取得

MySQL

主机信息

mysql_get_proto_info():

取得

MySQL

协议信息

mysql_get_server_inf

o()

取得

MySQL

服务器信息


名称栏目:php主从数据库操作 mysql主从数据库搭建
网页URL:http://pwwzsj.com/article/hiiceh.html