Home > Database > Mysql Tutorial > body text

mysql数据库优化技术(2)

WBOY
Release: 2016-06-07 15:20:37
Original
1104 people have browsed it

任务调度计划 php 定时完成数据库的备份: ?1 、手动备份数据库 (表)的方法: cmd 控制台: mysqldump-uroot-p123 数据库 (temp) 文件保存路径 (d:\temp.bak) ;备份数据库的某几张表: mysqldump-uroot-p123 数据库 [ 表名 1 ,表名 2..](tempdept) 文件

任务调度计划

php定时完成数据库的备份:

? 1、手动备份数据库(表)的方法:cmd控制台:mysqldump -u root -p123 数据库(temp) >文件保存路径(d:\temp.bak);备份数据库的某几张表:mysqldump -u root -p123 数据库 [表名1,表名2..] (temp dept)>文件路径(d:\temp.dept.bak)

? 使用备份文件恢复数据:MySQL控制台:source d:\temp.dept.bak(如果不成功,\可能需要转义)

? 2、使用定时器自动完成。把备份数据库的指令,写入到bat文件,然后通过任务管理器去定时调用bat文件:创建mytask.bak文件,在文件中写如下指令:”D:\wamp\bin\mysql\mysql5.6.12\bin\mysqldump” -u root -p123 temp dept >d:\temp.dept.bak(如果mysqldump.exe文件路径有空格要用双引号引起来)。在控制面板->系统和安全->计划任务->创建基本任务。(缺点是每次都覆盖原来的文件)

? 3、使用PHP调度。1、建立一个PHP文件(mytask.php)

<?php date_default_timezone_set(‘PRC’);
$bakfilename=date(“YmdHis”,time());	//文件名要不要后缀无所谓
$command="D:\wamp\bin\mysql\mysql5.6.12\bin\mysqldump -u root -p123 temp dept  >d:\\$bakfilename”;
exec($command);	//执行命令
?>
Copy after login


2、建立mytask2.bat文件,用于定时执行上面建立的PHP文件(php.exe可以再控制台解析 php 文件:php.exe php文件路径),mytask2.bat内容如下: D:\wamp\bin\php\php5.4.16\php.exe   D:\wamp\www\mytask.php

 

? insert into dept select deptno,dname,loc from dept;主从复制。

PHP完成定时发送邮件功能。

? 发送邮件有两种方法:搭建自己的服务器、让已有的服务器(如163的)代为转发。

? 1、设计一张邮件表:

create table maillist

(id int unsigned primary key auto_increment,

getter varchar(64) not null default '',

sender varchar(64) not null default '',

title varchar(32) not null default '',

content varchar(2048) not null default '',

sendtime int unsigned not null default 0,

flag tinyint unsigned not null default 0

)engine=myisam charset utf8;

2、插入一些数据:

insert into maillist values

(null,'464839522@qq.com','hzn.itself@gmail.com','hello100','abc,hello100',unix_timestamp()+10*3600,0);

insert into maillist values

(null,'464839522@qq.com','hzn.itself@gmail.com','hello200','abc,hello200',unix_timestamp()+10*3600,0);

3、建立一个php文件(mytask.php:

<?php //连接数据库
$con=mysql_connect(&#39;localhost&#39;,&#39;root&#39;,123) or die(&#39;数据库连接失败&#39;);
mysql_select_db(&#39;temp&#39;,$con);
//取出未发送的邮件flag=0
$sql="select * from maillist where flag=0";
$res=mysql_query($sql,$con);
while(!!$row=mysql_fetch_assoc($res)){
//取出该邮件的时间
$sendtime=$row[&#39;sendtime&#39;];
if($sendtime<=time()){
echo &#39;这里写发送邮件的代码.....&#39;;	//使用网上提供的PHPMailer
$sql="update maillist set flag=1 where id={$row[&#39;id&#39;]}";
if(mysql_query($sql,$con)){
echo &#39;<br/>更新数据库成功';
}
}
}
 
mysql_free_result($res);
mysql_close($con);
?>
Copy after login


4、配置php.ini

[mail function]

; For Win32 only.

; http://php.net/smtp

SMTP = localhost

; http://php.net/smtp-port

smtp_port = 25

 

; For Win32 only.

; http://php.net/sendmail-from

sendmail_from = 464...522@qq.com //可以写多个


表的分割技术

水平分割:

mysql数据库优化技术(2)
mysql数据库优化技术(2)

mysql数据库优化技术(2)

uuid表用于生成id

 

addUser.php

<?php //连接数据库
$con=mysql_connect(&#39;localhost&#39;,&#39;root&#39;,123) or die(&#39;数据库连接失败&#39;);
mysql_select_db(&#39;temp&#39;,$con);
//获取一个uuid->可以认为是qq号
$sql="insert into uuid values(null)";
if(mysql_query($sql,$con)){
$uuid=mysql_insert_id();
$tablename='qqlogin'.$uuid%3;	//3张表
$sql="insert into ".$tablename." values('$uuid','aaa','aaa')";
if(mysql_query($sql,$con)){
echo '添加用户成功';
}
}else{
die('添加失败');
}
 
mysql_close($con);
?>
Copy after login

checkUser.php

<?php //连接数据库
$con=mysql_connect(&#39;localhost&#39;,&#39;root&#39;,123) or die(&#39;数据库连接失败&#39;);
mysql_select_db(&#39;temp&#39;,$con);
//用户传来的qq号
$qqid=intval($_GET[&#39;id&#39;]);
$tablename=&#39;qqlogin&#39;.$qqid%3;
$sql="select name from ".$tablename." where id=$qqid";
$res=mysql_query($sql,$con);
if($row=mysql_fetch_assoc($res)){
echo &#39;<br/>在'.$tablename.'表中存在这个用户'.$row['name'];
}else{
die('没有用户');
}
mysql_free_result($res);
mysql_close($con);
?>
Copy after login


? 我们在提供检索时,应该根据业务的需求,找到分表的标准,并在检索页面,约束用户用户检索方式-》分页,如果有大表检索的需求,也是少数的。

? 表的垂直分割:

某个表的某些字段,在查询时,并不是经常使用,但是数据量很大,建议把这些字段单独放到另一张表。

? 修改my.ini:端口号port=3306、最大连接数(并发数)max_connections=1000

mysql数据库优化技术(2)

? tinyint(1)括号里的数据表示零填充:

create table test(id1 tinyint(2) zerofill,id2 tinyint(3) zerofill);

insert into test values(2,3);

mysql数据库优化技术(2)

? 增量备份:mysql数据库会议二进制的形式,把用户对mysql的操作,记录到文件中。

? 增量备份会记录(dml语句,创建表的语句,不会记录select);记录的是:操作语句本身、操作的时间、操作的位置。

? 如何启用增量备份:(1)配置mysql.ini文件或my.cof,启用二进制备份log-bin=mysql-bin(存放路径)(默认把文件存放在data目录下);(2)启动mysql得到文件:

mysql-bin.index 索引文件,有哪些增量备份文件

mysql-bin.000001 存放用户对数据库操作的文件

3)可以使用mysql/bin/mysqlbinlog程序查看备份文件。cmd: mysqlbinlog 备份文件路径

? 可以通过位置或时间恢复

mysql数据库优化技术(2)

时间点:stop 表示从开始恢复到该时间点的操作,start表示从该时间点恢复到最后的操作;

恢复时间段:mysqlbinlog --start-datetime=”2013-01-14 18:20:21” --stop-datetime=”2013-01-14 18:40:35”

恢复位置段:mysqlbinlog --start-postion=”110” --stop-postion=”230”

 

? reset master:清理二进制日志;expire_logs_days=过期天数,设置到了过期时间自动清理的功能,my.ini中添加

? 如何在工作中将全备份和增量备份配合使用:每周做一个全备份:mysqldump,启用增量备份(把过期时间设为大于或等于7的天数)。


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template