us like 'uptime';
② 一共执行的次数:
select: show status like 'com_select';
update: show status like 'com_update';
insert: show status like 'com_insert';
delete: show status like 'com_delete';
③ 当前连接数
show status like 'connections';
④ 显示慢查询次数
show status like 'slow_queries';
2、定位执行效率较低的sql语句 我们要通过以下几步定位慢查询sql语句:
① 关闭mysql服务
在windows下,打开"服务",找到mysql,关闭服务
在Linux下,直接找到mysqld 进程,kill掉
② 命令行进入mysql的安装目录 输入
版本5.5及以后
bin\mysqld.exe --safe-mode --slow-query-log
版本5.0及以前
bin\mysqld.exe -log-slow-queries=d:/ab.log
回车
③ 再次进入mysql命令行模式 更改慢查询设定的时间限制为1s
set long_query_time = 1;
④ 此时慢查询日志已开启
记录地址在:my.ini 中的datadir所指的目录中
3、通过explain 分析低效率sql语句的执行情况
mysql> explain select * from emp where empno = 345680\G
*************************** 1. row ***************************
id: 1 #查询序列号
select_type: SIMPLE #查询类型
PRIMARY/
table: emp #查询的表名
type: ALL #扫描方式 ALL(全表扫描,尽量避免)
SYSTEM 表仅有一行
CONST 表匹配到的仅有一行
possible_keys: NULL #表中可能使用到的索引
key: NULL #实际使用的索引
key_len: NULL
ref: NULL
rows: 4000000 #该sql语句扫描了多少行,可能得到记录数
Extra: Using where #额外信息 比如排序方式 如filesort等
1 row in set (0.00 sec)
4、确定问题采取相应的措施 优化sql语句
① 优化group by 语句
使用group by子句后 系统会默认进行排序
如果不需要进行排序,则建议加上 order by null
② 使用连接 join 代替子查询
【八、碎片整理】
针对myisam引擎进行碎片整理
//对指定的表进行碎片整理
mysql> optimize table table_name;
【九、备份/还原】
1、PHP定时完成数据库备份 ① 手动备份 命令
备份数据库
# mysqldump -uroot -psa 数据库名 > /文件路径
备份表
#mysqldump -uroot -psa 数据库名.表1 数据库名.表2... > 文件路径
② 手动数据 恢复
mysql> source 备份文件路径
2、定时任务 ① windows 批处理 (任务管理器)
(1)建立 .bat 批处理文件 (如 my.bat )
找到mysql文件的安装的bin 目录 复制文件路径
在my.bat中加入如下语句
D:\phpservice\mysql\bin\mysqldump -uroot -psa demp > d:demp.bak.sql
(2)将my.bat 文件加入定时任务
控制面板 -> 管理工具 -> 任务计划程序 -> 操作 -> 创建任务 ->
操作 中导入任务
触发器 中新建设置触发时间
常规 中设置任务名称
条件 中设置任务时间
设置 中设置任务的相关条件
(3) 设置好以后,就会按时触发了
② linux crontab -e 计划任务
这个更简单
直接将上面写入的脚本路径 与 程序路径 更改一下就ok
3、PHP实现定时数据库备份
//设置时区
date_default_timezone_set("PRC");
//设置文件名
$bakfile_path = date('Y-m-d H:i:s', time());
//拼装命令
$commond = "D:\phpservice\mysql\bin\mysqldump -uroot -psa demp > d:{$bakfile_path}.bak.sql";
//执行命令
exec($commond);
?>
4、mysql的增量备份
my
sql数据库会以二进制的形式,将
mysql对数据库的操作,记录到文件
当用户希望恢复的时候,可以使用该文件进行备份恢复。
增量备份原理
① 记录dml语句(不含查询语句)
② 记录 a. 操作语句本身
b. 操作时间
c. 操作position
如何进行增量备份/与恢复
(1) 配置mysql.ini 启用二进制的备份
在[mysqld] 下增加语句
log-bin = d:\binlog\mylog
(2) 重启mysql服务 (这一步很关键)
windows 下 在服务里找到 mysql 并重启
linux 下 restart mysql 进程
(3) 查看mysql的日志
找到日志文件的位置
使用命令:
# mysqlbinlog 日志文件路径
日志分析
a. end_log_pos 日志文件中操作 所处的位置
b. TIMESTAMP 操作所处的时间点
c. 根据上面两点进行数据库的恢复
(4) 按时间戳/位置恢复
按时间恢复
# mysqlbinlog --stop-datetime="2015-01-14 18:23:43" d:\binlog\mylog000001 | mysql -uroot -psa
按位置恢复
# mysqlbinlog --start-position="112" d:\binlog\mylog000001 | mysql -uroot -psa
【十、配置优化】
1、端口号更改 如果要设定多个mysql 在同一服务器上使用,需要更改端口号
如果不使用3306,则需要在mysql_connect连接函数使用的时候带上
端口号
2、更改最大连接数(mysql.ini/mysql.conf) max_connections = 100 (最佳范围100-1000)
3、开启查询缓存 query_cache_size = 15M
4、针对不同的引擎设置不同的缓存大小 myisam ---> key_buffer_size
innodb ---> innodb_additonal_new_pool_size = 64M
innodb_buffer_pool_size = 1G
5、如果服务器内存超过4G,可考虑使用64位操作系统和 64位mysql服务器
|